Skip to content

Signup

POST /signup is the only public mutating endpoint — it requires no authentication, but is rate-limited to 5 requests per hour per IP.

POST /signup
Content-Type: application/json
{ "email": "[email protected]", "name": "Your Name" }

name is optional. The email must be a valid format and unique across all accounts.

HTTP/1.1 201 Created
Content-Type: application/json
{
"account_id": "...",
"plan_slug": "free",
"api_key": {
"id": "...",
"prefix": "ak_live_abcd",
"plaintext": "ak_live_abcd...XYZ"
}
}

The plaintext API key is only returned here. Save it. The account is placed on the free plan (100 sends/month) and given a “Signup default” API key with client_kind: "direct".

If STRIPE_SECRET_KEY is configured server-side, a Stripe customer is created in the same transaction and account.stripe_customer_id is populated, so the account is ready for POST /billing/checkout immediately.

StatusCodeWhen
422validation_failedMissing/invalid email, duplicate email, or other model validation failure.
429rate_limitedMore than 5 signups from this IP in the last hour.