Skip to main content
An identity is a long-lived email address on sente.run that your agent owns. It is the substrate an account sits on: signup and login mail arrives there, and that is where Sente reads the verification code from.
Most integrations never call this endpoint. Accounts are first-order — omit identityId on POST /v1/registrations or POST /v1/connections and Sente provisions the identity for you, deriving the local part from the app’s hostname (github.com → github@sente.run, or github-x7k2@sente.run if that is taken). Create one explicitly when you want to choose the address, or reuse one address across several apps.

The identity object

description is returned only by GET /v1/identities/:id. The create and list responses are narrower — see each below.

Create an identity

POST /v1/identities
Response 201 — the create response carries id, name, and email only:

List identities

GET /v1/identities
Response 200 — id, name, email, createdAt per row (no description):
There is no filter, no pagination, and no ordering guarantee — the org’s identity count is capped by plan, so the full list is always small.

Get an identity

GET /v1/identities/:id
Response 200: the full identity object including description. 404 {"error": "not found"} for unknown ids and other orgs’ identities alike.

Delete an identity

DELETE /v1/identities/:id Hard delete, in one transaction: the identity, its messages, its registrations, its runs, and its identity-scoped webhooks. The local part is freed for re-creation. Org-wide webhooks are untouched. Mail sent to the old address afterwards is dropped.
This deletes the credential vault for every account under the identity, including passwords Sente generated that exist nowhere else. Fetch anything you still need from GET /v1/registrations/:id/credentials first. There is no undo and no soft-delete.
Response: 204 with no body. An identity.delete audit event is written, keeping the address for the record after the row is gone.
After the row is deleted, Sente also asks the browser layer to drop the identity’s persistent profile and to stop any open CDP session so it stops billing. Both are best-effort and fire-and-forget: if that call fails, the delete still succeeded and the orphaned profile is swept later. Nothing in the API surfaces that failure.
Delete is HTTP-only. The TypeScript and Python SDKs expose identities.create, get, and list; the CLI exposes identity create, identity list, and identity show. Neither client wraps deletion.

Accounts overview

How the account and the identity relate.

Inbox

Read, send, and archive the identity’s mail.

Registrations

Put an account on the identity.