member.identity_linked

A subscriber connects a platform account to their membership.

When this fires

A member of the project gains a connected account on a connector — the platform account (a Telegram account today) that signs them in to the portal and that the project's bot knows them by. Three doors raise it: the member completes Connect … from the portal's Account & Recovery screen and the project's bot confirms the account; the member signs in to the portal through a connector the project had not seen them on before; or the member taps Use the same account to adopt an account they already use in another of the creator's projects. Each connected account emits its own event. Nothing is emitted when an account the member already holds is confirmed again.

Required ability

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

Payload

{
  "id": "evt_01HX...",
  "type": "member.identity_linked",
  "created_at": "2026-09-12T10:06:00Z",
  "api_version": "2026-05-01",
  "project_id": "7f3d1c92-8b45-4e6a-9d21-5c8e0a4b6f13",
  "data": {
    "subscriber_id": "2a91c4e7-6f38-4b52-8e0d-9c1a7b3f5d80",
    "identity_id": "0c2d8a7e-4b1f-4d3e-9a6b-2f5e8c1d7a90",
    "connector": "telegram",
    "external_id": "123456789",
    "display_name": "Ada Lovelace",
    "source": "handshake",
    "preferred": true
  }
}

Field reference

FieldTypeNotes
idstring ULIDUnique event id, prefixed evt_. Use for idempotent processing.
typestringAlways member.identity_linked for this event.
created_atISO 8601 timestampServer-side emission time.
api_versionstringWebhook API contract version.
project_idstring UUIDProject this event belongs to.
data.subscriber_idstring UUIDSubscriber's project-scoped user id.
data.identity_idstring UUIDThe connector account row. One account is one row however many projects link it.
data.connectorstringConnector key the account is on (telegram today).
data.external_idstringThe platform's own id for the account.
data.display_namestring | nullWhat the platform calls the person, when known.
data.sourceenum: handshake | portal | adopted | bot | backfillHow the link was proven. handshake covers both Connect … and a portal sign-in.
data.preferredbooleanWhether this account is the one the project reaches first. A member's first account is.

Caveats

  • identity_id is the account row, not the link: the same value appears in member.identity_unlinked and in the identities[] of GET /v1/projects/{project}/members/{member}. The link's own id (what DELETE …/identities/{link} takes) is only in the REST payloads.
  • Accounts the bot creates on first contact are mirrored into the identity tables without raising this event; it is reserved for acts the member takes.

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