Skip to main content
An account is only useful if your code can act as it. Sente hands the login back in three shapes: You don’t change your automation stack for any of them. The point is that your agent gets a signed-in browser and never holds the password.

Open a live session (CDP)

POST /v1/registrations/:id/session opens a remote browser on the account’s logged-in profile and returns a CDP URL. Connected accounts use the same call with the connection id.
Puppeteer works the same way: puppeteer.connect({ browserWSEndpoint: cdpUrl }).
One live session per identity, and it is mutually exclusive with runs — both drive the same browser profile. Always close the session when you’re done (DELETE /v1/registrations/:id/session, idempotent): it holds a real remote browser and consumes browser minutes until you close it or its own expiresAt passes.

Freshness and auto re-login

Cookies expire and apps log you out, so getSession will not hand you a browser it can’t vouch for. Freshness is measured by recency of the last confirmed login — the moment a register, login, or connect run completed for that account:
  • Within the freshness window (about 10 minutes by default), the session is opened straight away and you get it in seconds.
  • Older, and Sente queues a re-login first: the vaulted credentials, plus a code from the account’s own inbox (created accounts) or a server-computed TOTP code (connected accounts with a seed). The browser you get back was just confirmed logged in. Expect this to take a minute.
The SDKs and the CLI run that loop for you; the SDKs return healed: true when a re-login happened. Pass maxStaleSec to widen or tighten the window for one call, or verify: false (CLI --no-verify) to skip the check entirely and take whatever the profile holds.
This is recency, not inspection: Sente does not probe the page to test whether you’re still signed in. A cold call can therefore re-login on cookies that were in fact still valid. It costs a minute; it never returns a session it hasn’t just confirmed.
At the raw API level the loop is visible as 409s carrying the id you need to poll: If the healing run itself ends blocked — email MFA on a connected account, a CAPTCHA, a wall — the SDK call raises with that run attached: open its liveViewUrl, clear the step, resume, and retry. See Human takeover.

Export the session — keep your own stack

POST /v1/registrations/:id/session/export returns the logged-in browser state (cookies + localStorage) as a standard Playwright storageState. Load it into your own browser, on your own infrastructure: no CDP connection to Sente, no changes to your existing automation.
Export runs the same verify-then-heal logic as getSession (same 409 SESSION_STALE / SESSION_PENDING contract), so the state you get was just confirmed logged in. It works for created and connected accounts alike. If a session is already open, the export is taken from it; otherwise one is opened for the export and closed again.
An exported storageState is a bearer credential for a logged-in account. Anyone holding the file can act as that account until the cookies expire — no password needed, and no second factor. Keep it out of version control, restrict its permissions, and delete it when you’re done. It does not stay fresh: when it expires, export again. The same applies to a CDP URL while its session is open.

The live view

Every session — and every blocked run — carries a liveViewUrl: an interactive browser page a person can open to watch or take over. It is how a human enters an MFA code, solves a CAPTCHA, or clicks a confirm-before-submit final button. Treat the URL as sensitive: anyone with it controls that browser while the session is open. A blocked run holds its live view for about 10 minutes; after that the session is torn down and the URL stops working.

Which shape to use

Next steps

Human takeover

What to do when a healing re-login blocks on a person.

Audit trail

Every session open, close, and export is recorded — query it via GET /v1/audit-events.

Security model

Why your agent never receives the password, and what the browser agent does see.

API reference: registrations

Exact request bodies, response fields, and status codes for the session endpoints.