409 ALREADY_CONNECTED,
and vice versa).
Start a registration
credentials: { username, password }; omit them and Sente derives a username
and generates a password. Either way they end up in the vault, retrievable with
getCredentials (created accounts only — connected accounts are write-only).
A run ends in one of three states — see Runs and human takeover:
Do not call
waitForOtp/waitForMagicLink around a registration — verification is handled
inside the run. Those helpers are for signups your own code drives
(Receive verification codes).
Confirm-before-submit
PassconfirmBeforeSubmit: true (CLI --confirm-before-submit) to keep a human in the loop for
the action that matters legally: pressing the final submit. The agent fills the whole form, then
stops. The run goes blocked with error.code === "SUBMIT_CONFIRMATION_REQUIRED" and a
liveViewUrl. A person opens the live view, reviews the form, clicks submit themselves — forming
the terms-of-service agreement — and you resume the run. Sente then finishes email verification as
usual.
run.blocked webhook or the sente watch desktop notifier.
What blocks, what fails — honestly
Automated signup does not work everywhere, and Sente does not pretend otherwise:- CAPTCHAs block the run. Sente does not complete CAPTCHAs. The run goes
blockedwith a live-view URL; a human completes the challenge in the interactive live view, then resumes. - Fraud and abuse walls exist. Some apps silently reject or shadow-block signups they judge
automated, sometimes before the verification email is ever sent. Those runs end
failed. Sente cannot make a site accept a signup it has decided to refuse. - Phone verification is not supported. A signup that requires SMS verification blocks for a human; Sente identities are email-only today.
- Some sites prohibit automated account creation in their terms. Do not register there — not even with confirm-before-submit if the terms ban automated form-filling too. Read the target’s terms first. See Acceptable use.
After the run completes
sente credentials <registrationId>/getCredentials(id)— the vaulted{ username, password, origin }.sente relogin <registrationId>/registrations.login(id)— re-authenticate later; returns a fresh{ registration, run }.- The app’s ongoing email (receipts, notifications, password-reset mail) keeps landing in the identity’s inbox — read it like any other message.
- Open a logged-in browser or export the session — see Sessions.
429 RUN_LIMIT_EXCEEDED) — see
Limits.