project.resource.linked

A place a creator picked on a connector becomes a resource of a project.

When this fires

A creator links a place from a connector: a Telegram channel, group or supergroup from the bot's picker, or any connector's own picker answering a link request. The connector's Core\Resources::create() writes the resource row and this event announces it. This creates the resource row; no project.resource.created precedes it.

Required ability

project-resource:view — token must carry this at mint time to subscribe an endpoint to this event.

Payload

{
  "id": "evt_01HX...",
  "type": "project.resource.linked",
  "created_at": "2026-05-18T10:05:00Z",
  "api_version": "2026-05-01",
  "project_id": "7f3d1c92-8b45-4e6a-9d21-5c8e0a4b6f13",
  "data": {
    "project_id": "7f3d1c92-8b45-4e6a-9d21-5c8e0a4b6f13",
    "resource_id": "b73c5f21-9d80-4a6e-8215-4f70ce13a9d6",
    "connector": "telegram",
    "kind": "telegram:channel",
    "space_id": "3c1f7a58-2b6e-4d90-8f41-6a2e9c5d7b10",
    "title": "Research Premium Lounge"
  }
}

Field reference

FieldTypeNotes
idstring ULIDUnique event id, prefixed evt_. Use for idempotent processing.
typestringAlways project.resource.linked for this event.
created_atISO 8601 timestampServer-side emission time.
api_versionstringWebhook API contract version.
project_idstring UUIDProject this event belongs to.
data.project_idstring UUIDMirrors top-level project_id.
data.resource_idstring UUIDResource identifier.
data.connectorstringThe connector key the place is on (telegram, and each connector the marketplace lists as it launches).
data.kindstringThe resource's kind, connector:kind (telegram:channel, telegram:group, telegram:supergroup, a future connector's own kinds).
data.space_idstring UUID | nullThe space the resource gates, as GET /v1/projects/{project}/resources/{resource} returns it under space.id. Null only for a place whose installation the core has no row for yet.
data.titlestringThe place's title at link time.

Caveats

  • Re-linking a place after an unlink creates a new resource row — the project.resource.linked you receive carries a different resource_id than the earlier project.resource.unlinked, and the unlinked row remains behind with space: null.
  • Linking the same place to the same project twice announces nothing the second time: the connector's write is idempotent and answers the existing resource.
  • A manual perk cannot be linked; it has no underlying place, so its kind is manual and it arrives through project.resource.created.

How is this guide?

On this page

Subscriby is a product designed by you — for you.

No boardroom full of executives deciding what we ships next. Our roadmap always shaped by you with your feedback.

Share feedback or a request