Only connect accounts you own or are authorized to operate. Sente never guesses or reuses
credentials.
Connect an account
POST /v1/connections with the identity, the app’s login URL, and the credentials. Sente starts a
run that logs in and verifies the session.
completed and the connection is active. The account is now reachable
through the same session machinery as a registered account — getSession, login,
exportSession — by the returned connection id. See Sessions.
Two-factor authentication
What happens at the 2FA prompt depends on where the second factor lives:- Authenticator app (TOTP) — autonomous. Pass the authenticator secret as
totpSeed(the base32 string behind a QR code’s “can’t scan?” link, or a fullotpauth://URI). Sente vaults it encrypted and computes the 30-second RFC-6238 code server-side at login and every re-login. The seed never reaches any model — the server derives the code and injects it. - Email or SMS code — needs a human. The code goes to your inbox or phone, not the
identity’s, so Sente cannot read it. The run blocks with code
MFA_REQUIREDand an interactive live-view URL. A person opens the live view, enters the code, and resumes the run. Two ways to avoid the human step on future logins: use TOTP on the account, or repoint the account’s notification email to the Sente identity’s address and passverifyToIdentity: truewhen connecting (rawPOST /v1/connectionsonly today — not yet exposed in the SDKs or CLI), so Sente fetches the code from the inbox itself. - TOTP prompt but no seed supplied — the run blocks with
TOTP_REQUIRED; a human enters a code in the live view, then resumes.
What can’t be connected
- SSO-only accounts (Google/Microsoft/Okta sign-in, passkeys). There is no password to vault, so there is nothing Sente can re-login with. Not supported.
- SMS-2FA accounts connect, but every login that triggers an SMS code needs a human in the live view — Sente has no phone number for the account.
Credentials are write-only
Once vaulted, connected-account credentials cannot be read back through the API — by you, by your agent, or by anything that compromises your API key.GET /v1/registrations/:id/credentials on a
connected account returns 403 CREDENTIALS_WRITE_ONLY. Only Sente’s run controller decrypts them,
at login time. You can overwrite them (see rotation below) or purge them; you can never fetch them.
More on the vault: Security.
Revoke vs. delete
- Revoke (
POST /v1/connections/:id/revoke) disables the connection: sessions and logins are refused, but the vaulted secrets are kept — Sente holds them, unused. Connecting the app again re-enables it (the connect call always requires and re-vaults credentials). - Delete (
DELETE /v1/connections/:id) revokes and purges the vaulted password and TOTP seed. Use it for offboarding. Note that Sente holds no credentials after a delete — but the account’s password at the app is unchanged; rotate it there if you want certainty.
Recommended practice
- Connect a scoped account, not your admin login. If the app supports member accounts, service accounts, or restricted roles, create one with the least privilege the agent needs and connect that.
- Rotate credentials by re-supplying them. After changing the password at the app, either
connect again (a
POST /v1/connectionson an existing connection re-vaults fresh credentials) orPUTthe new values:sente.registrations.setCredentials(id, { password })/registrations.set_credentials(id, password=...). ThePUTwrites the vault only — it does not change the password at the app. - List what’s connected with
sente connections/sente.connections.list()and prune connections you no longer use.
If a login breaks later
Sente re-logs-in automatically when a session goes stale (see Sessions). If the app demands an email/SMS code at re-login, the run blocksMFA_REQUIRED and fires a run.blocked webhook so a person can take over.
TOTP-connected accounts re-login without a human.