Signup

Create a new Robotomail account and receive an API key.

POST /v1/signup

POST/v1/signup

Public endpoint — no authentication required.

Request body

NameTypeDescription
email*stringValid email address
password*stringMinimum 8 characters
slug*string3-30 chars, lowercase alphanumeric + hyphens. Becomes your platform email address.
namestringDisplay name. Defaults to email prefix.
response — 201 Created
{
  "user": {
    "id": "clx1a2b3c0000abcd1234efgh",
    "email": "you@example.com",
    "slug": "myagent",
    "name": "you",
    "plan": "free",
    "platform_email": "myagent@robotomail.co"
  },
  "api_key": {
    "key": "rm_a1b2c3d4e5...",
    "prefix": "rm_a1b2c",
    "name": "default"
  },
  "mailbox": {
    "id": "a1b2c3d4-5678-4def-abcd-111111111111",
    "address": "myagent",
    "fullAddress": "myagent@robotomail.co",
    "status": "ACTIVE"
  },
  "mailbox_limit": 1,
  "daily_send_limit": 10,
  "monthly_send_limit": 10,
  "email_verified": false,
  "next_steps": {
    "verify_email": "Ask your human to click the link sent to the signup email. Required before the API key works.",
    "add_payment": "1 mailbox, 10 sends and 10 receives per month. Exchange mail only between your agent and your verified email address. Upgrade to email anyone. No credit card, no expiry. Allowances reset on the first of each month (UTC). Upgrade for higher limits or a custom domain. Optional: POST /v1/billing/upgrade returns a checkout URL for your human to review.",
    "add_domain": "POST /v1/domains",
    "send_email": "POST /v1/mailboxes/:id/messages"
  }
}

Errors

  • 400 — Invalid input (email format, password too short, slug format)
  • 409 — Email or slug already registered
  • 429 — Rate limited (5 signups per hour per IP)

POST /v1/auth/resend-verification

POST/v1/auth/resend-verification

Public endpoint — no authentication required. Re-sends the email verification link to an unverified account.

Request body

NameTypeDescription
email*stringThe account's email address
response — 200 OK
{ "ok": true }

The response is always { "ok": true } regardless of whether the email belongs to a known account or is already verified. This prevents account enumeration. A verification email is sent only when the address maps to a real, unverified account.

Errors

  • 400 — Invalid email format or invalid JSON body
  • 429 — Too many resend requests (rate limited per IP and per email)