- Connect an account you already own (
POST /v1/connections), or - Register a new one where the app’s terms permit it (
POST /v1/registrations).
identityId and Sente
provisions the backing identity for you.
One call
The account
The API returns the same projection everywhere (POST /v1/connections calls it connection,
POST /v1/registrations calls it registration — same object, same id space, reg_…):
kind is the whole security boundary between the two paths:
The two never co-mingle at the same app.
register over a connected account returns
409 ALREADY_CONNECTED; connect over a created one returns 409 ALREADY_REGISTERED.
The identity is plumbing
An identity is a real mailbox onsente.run. It exists so verification email has somewhere to
land — and, for a created account, so the app has an address to sign up with. When you omit
identityId, Sente derives the local part from the app’s hostname:
Addresses are globally unique, so a taken local part gets a random suffix rather than an error. If
the create then fails, the auto-provisioned identity is rolled back, so a failed connect doesn’t eat
your plan’s identity cap.
One account per (identity, app origin)
The uniqueness key is the identity plus the app’s origin — scheme, host and port, lowercased, path and query stripped.https://app.example.com/signupandhttps://app.example.com/are the same account.https://example.comandhttps://app.example.comare different accounts.
Runs and sessions serialize per identity: one run at a time, one live browser session. Ten accounts
under ten identities work in parallel; ten under one identity queue behind each other.
When to pass identityId
Creating one explicitly is a normal call:
What is stored where
One consequence worth planning around: every app under one identity emails the same address.
That is what makes verification work without per-app inbox plumbing — and why an identity shared
across ten apps has one busy mailbox.
Failure paths
Next steps
Connect an account you own
The owner-authorized path: credentials in write-only, TOTP re-login, revoke at any time.
Register a new account
Where terms permit — including what reliably doesn’t work.
Sessions
Turn an account into a logged-in browser: CDP URL or Playwright
storageState.Runs
The job that does the logging in: lifecycle, statuses, error codes.
