POST /v1/auth/email/start
Emails a 6-digit sign-in code, valid for 10 minutes. Always answers 202, whether or not the address has an account.

Request Body required

application/json
email string (email) REQUIRED

Responses

202 The code was sent if the address can receive it.
application/json
object string REQUIRED
Enum: email_challenge
email string REQUIRED
expires_at string (date-time) REQUIRED
400 The request failed validation (`invalid_request`, `invalid_url`).
403 A browser request from a page other than https://beta.b3os.org (`forbidden`, reason `csrf`). Requests without an `Origin` header (the CLI, curl) are not refused.
413 The request body exceeds this operation's limit.
415 The Content-Type is not accepted by this operation.
429 A rate, concurrency or quota limit applies (`rate_limited`, `concurrency_limited`, `quota_exceeded`).
500 Something failed inside B3OS (`internal`). Retry with backoff.
503 The node or the product is not available right now (`node_unavailable`, `product_unavailable`, `capacity_unavailable`).
curl -X POST 'https://beta.b3os.org/v1/auth/email/start' \  -H 'Authorization: Bearer YOUR_API_TOKEN' \  -H 'Content-Type: application/json' \  -d '{  "email": "dev@example.com"}'
const response = await fetch('https://beta.b3os.org/v1/auth/email/start', {  method: 'POST',  headers: {      "Authorization": "Bearer YOUR_API_TOKEN",      "Content-Type": "application/json"  },  body: JSON.stringify({    "email": "dev@example.com"  })});const data = await response.json();console.log(data);
import requestsheaders = {    'Authorization': 'Bearer YOUR_API_TOKEN'}response = requests.post('https://beta.b3os.org/v1/auth/email/start', headers=headers, json={  "email": "dev@example.com"})print(response.json())
202 Response
{  "object": "email_challenge",  "email": "dev@example.com",  "expires_at": "2026-10-25T22:20:00.000Z"}
Ask a question... ⌘I