---
title: "Create an account (programmatic signup)"
method: POST
path: "/v1/accounts"
tags: ["Accounts"]
---

# Create an account (programmatic signup)

`POST /v1/accounts`

## Request

- Base URL: `https://serp-agent.com`
- URL: `https://serp-agent.com/v1/accounts`
- Auth: none required

Public, CAPTCHA-free signup. Returns a sandbox API key **immediately** — shown exactly once, before any email verification. Sandbox keys expire after 14 days and carry hard usage caps (1 project, 1 audit, 2 articles). Rate limited to 5 signups/hour per IP. Idempotency-Key is scoped to the caller's IP so a retried signup replays the stored 201 (raw key included) instead of hitting `account_exists`.

## Headers

- `Idempotency-Key` string

## Request body

- object
  - `email` string, email, required: Trimmed and lowercased server-side.
  - `company_name` string
  - `origin` 'agent' | 'human': Who is signing up. Defaults to "agent".

## Response `201`

Account created. `api_key` is the raw sandbox key — it is shown exactly once and never retrievable again.

- SignupResponse
  - `account_id` string, required
  - `api_key` string, required: Raw sandbox key (sk_sandbox_…). Shown exactly once — store it now.
  - `mode` 'sandbox', required
  - `sandbox_limits` SandboxLimits, required: Hard caps on a sandbox trial key.
    - `audits` integer, required
    - `articles` integer, required
    - `expires_days` integer, required
  - `upgrade_url` string, uri, required
  - `docs` string, uri, required

## Other responses

- `400`: Malformed JSON or invalid field. Code: `invalid_request`.
- `409`: Email already registered. Code: `account_exists`.
- `429`: Too many signups from this IP (5/hour). Code: `rate_limited`.
- `500`: Unexpected server error — safe to retry with the same Idempotency-Key. Code: `internal_error`.

---

[API](https://skmtc.dev/serp-agent/apis/serp-agent-api.md) · [All operations](https://skmtc.dev/serp-agent/apis/serp-agent-api/llms.txt) · [OpenAPI document](https://skmtc.dev/serp-agent/apis/serp-agent-api/revisions/438a943019ac?raw)
