Identities API
A linked identity is an account you hold on a connector, tied to your Subscriby creator account.
A linked identity is an account you hold on a connector, tied to your Subscriby creator account. It is what lets the platform bot reach you, lets you manage projects from it, and lets the connector's sign-in button sign you in. The dashboard shows the same list under Settings → Security → Linked accounts.
These routes are about the caller's own account, so they live under /v1/me and need no project or team in the path. A member's connected accounts are a different thing, read under Members.
Endpoints
/v1/me/identitiesList the caller's linked accountsDELETE/v1/me/identities/{identity}Unlink an accountcurl https://api.subscriby.net/v1/me/identities \ -H "Authorization: Bearer $SUBSCRIBY_TOKEN"Every account linked to the caller's creator account, by connector then purpose. Never paginated.
purposeisprimary(the account that signs you in and receives alerts) orbackup(the account registered for Disaster Recovery).sourcesays how the link was proven:handshake(you completed a link from Settings),bot(the account came in through the connector's own flow),backfill(migrated from before connectors),portaloradopted.external_idis the platform's own id for the account,usernameits handle when the platform has one. Secrets and chat rows are never returned.
Linking has no endpoint. Linking is a two-sided proof: you open it from Settings → Security → Linked accounts and finish it from the account itself, by opening the link or sending the code to the connector's bot. A token cannot stand in for a person on the connector, so there is nothing to POST here.
Requires ability
The token must hold this ability, or the call is refused with 403.
MCP tool
Runs the same action from an agent, behind the same ability.
Authorization
bearerToken A personal access token minted on the dashboard under Settings, then Tokens, sent as Authorization: Bearer sbt_live_…. The token carries the abilities each endpoint lists under Requires ability and is frozen to one team.
In: header
Responses
200OKapplication/json
Array of UserIdentityResource
401UnauthorizedAUTHENTICATION_REQUIREDapplication/json
The request carries no bearer token, or one that is revoked, malformed, or minted for another environment (an sbt_test_ token on production).
403ForbiddenTOKEN_MISSING_ABILITYapplication/json
The token is valid but does not carry the ability this endpoint requires; error.context.required_ability names the one to grant. An endpoint that also checks who owns a row or which tier the account is on answers FORBIDDEN, TEAM_TIER_REQUIRED or CONNECTOR_TIER_REQUIRED with the same status, and says so in its own description.
429Too many requestsRATE_LIMITEDapplication/json
The token has spent its 300 requests a minute or 10,000 an hour; Retry-After says when the next one is accepted.
curl -X DELETE https://api.subscriby.net/v1/me/identities/$IDENTITY_ID \ -H "Authorization: Bearer $SUBSCRIBY_TOKEN" \ -H "Idempotency-Key: $(uuidgen)"Drops a primary link at once and answers an empty 204. You keep your password and passkeys, so nothing locks you out; what you lose until you link again is the connector side: its bot can no longer reach you or manage your projects, and its sign-in button no longer signs you in.
Requires ability
The token must hold this ability, or the call is refused with 403.
Idempotent
Send the header on every call; the same key replays the original response for 24 hours.
Authorization
bearerToken A personal access token minted on the dashboard under Settings, then Tokens, sent as Authorization: Bearer sbt_live_…. The token carries the abilities each endpoint lists under Requires ability and is frozen to one team.
In: header
Path Parameters
One of the caller's links, resolved by the route binder.
uuidHeader Parameters
A key unique to this operation, such as a fresh UUID. The same key replays the original 2xx response for 24 hours (with Idempotent-Replay: true), so a retry after a timeout never repeats the write; the same key with a different body is refused with 409.
uuidResponses
204No content
No content
400Bad requestIDEMPOTENCY_KEY_MISSINGapplication/json
Every write needs an Idempotency-Key header. Send a fresh UUID per distinct operation.
401UnauthorizedAUTHENTICATION_REQUIREDapplication/json
The request carries no bearer token, or one that is revoked, malformed, or minted for another environment (an sbt_test_ token on production).
403ForbiddenTOKEN_MISSING_ABILITYapplication/json
The token is valid but does not carry the ability this endpoint requires; error.context.required_ability names the one to grant. An endpoint that also checks who owns a row or which tier the account is on answers FORBIDDEN, TEAM_TIER_REQUIRED or CONNECTOR_TIER_REQUIRED with the same status, and says so in its own description.
404Not foundRESOURCE_NOT_FOUNDapplication/json
An id in the path names nothing the token can see. TENANT_MISMATCH: the project sits outside the token's scope:project: allow-list, or the token carries no team scope. Both answer 404 rather than 403 so that existence outside the token's scope cannot be inferred.
On this endpoint: RESOURCE_NOT_FOUND: for an id that is not one of the caller's own links, so the API cannot be used to probe which ids exist.
409ConflictIDEMPOTENCY_KEY_REUSEDapplication/json
The key was already used in the last 24 hours with a different request body.
422Validation failedVALIDATION_FAILEDapplication/json
For a **backup** account: it is removed from the Disaster Recovery page, where the change is recorded, not from here.
425Too earlyIDEMPOTENCY_REPLAY_IN_PROGRESSapplication/json
The first request with this key is still running; retry in a few seconds and the original response is replayed.
429Too many requestsRATE_LIMITEDapplication/json
The token has spent its 300 requests a minute or 10,000 an hour; Retry-After says when the next one is accepted.
Related
How is this guide?
Groups API
A group is a named bundle of permissions on a team that several collaborators hold at once: put the three people who run the inbox into a Support group and they share its permissions, take one out and they keep only what their own role gives them.
Me API
GET /v1/me is the first call a client makes.