create_account
Start an account-bootstrap verification session for email, SMS, Telegram, or WhatsApp; returns session ID, channel instructions, and QR/deep links for agent-driven onboarding.
Instructions
Create an account-bootstrap session for agent-driven onboarding. Public endpoint (no API key required). Returns a session id, channel-specific instructions, and — FOR TELEGRAM AND WHATSAPP ONLY — deep_link, qr_code (base64 PNG) and qr_text (UTF-8 text QR).
The endpoint is safe to call regardless of whether the submitted identity is new: completing verification transparently creates a User when none exists, or logs the user in when one already does. The response is intentionally uniform — the server does NOT reveal whether the identity is already registered (this would be a user-enumeration oracle). If the agent needs to distinguish new-vs-returning users, call get_current_user after verification and inspect the user's created_at.
EMAIL CHANNEL SENDS NOTHING HERE. The response carries email_sent=false and send_required=true: confirm with the user that the address is theirs, then call send_account_email. The other channels dispatch nothing either way — the user sends the first message themselves (reverse OTP).
Agent usage: (1) Call create_account with the user's chosen channel. (2) For email, confirm with the user and call send_account_email. On telegram/whatsapp pass deep_link to render_auth_link, which returns the clickable link with a QR code beneath it to you. On sms deep_link is an EMPTY STRING and render_auth_link will reject it — show sms_message, which is what the user sends; this response carries no destination number, so do not invent one. Do not hand qr_text to a link renderer either — it is the link already rendered as QR art; print it verbatim inside a fenced code block if a real terminal needs the QR. (3) Once your reply shows the user the challenge, call wait_for_account_creation with the session id until verification completes. On email the user must press "Sign in the browser that requested this" on the link's page — "Sign in here" signs in the browser they clicked from, and the wait then ends with "completed_elsewhere". (4) On verified, JWT + refresh cookies are set; proceed with whatever follow-up the agent was asked to do.
The user does not see tool results — most clients fold them away, render_auth_link's output included. Before you wait or poll, put what the user must act on into your own reply text: the link itself (not a sentence announcing it), the SMS text and number, or a note to check their inbox.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| No | Email address. Required for email channel. | ||
| channel | Yes | Authentication channel the user will verify through | |
| phone_number | No | E.164 phone number. Required for SMS channel (determines DID routing). |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | ||
| type | No | Outcome of an account-session creation. `account_creation` means a new User will be written on verification. `login` indicates the submitted identity matched an existing User and the session will log them in. | |
| No | |||
| status | No | Status of an auth session. `completed_elsewhere` (terminal, no cookies): an email sign-in the person completed in ANOTHER browser by pressing "Sign in here" on the link's page — this session will never become `verified`. | |
| channel | No | Authentication channel | |
| qr_code | No | Base64-encoded PNG QR code for the deep link | |
| qr_text | No | UTF-8 text QR for terminal/agent rendering | |
| user_id | No | ||
| sms_code | No | Short code for SMS-channel reverse-OTP | |
| deep_link | No | ||
| created_at | No | ||
| email_sent | No | ||
| expires_at | No | ||
| email_error | No | ||
| sms_message | No | ||
| verified_at | No | ||
| instructions | No |