---
title: "Get a sandbox key (start here)"
method: POST
path: "/v1/signup"
tags: ["Onboarding"]
---

# Get a sandbox key (start here)

`POST /v1/signup`

## Request

- Base URL: `https://api.cadencercs.com`
- URL: `https://api.cadencercs.com/v1/signup`
- Auth: none required

The front door. Pass an `email` and you get a real account with a key **linked to it** — that key can then create brands, run readiness checks, sync an agent to Google and mint itself a live key, with no dashboard and no password. Pass no email and the key can only simulate sends: fine for kicking the tyres, a dead end for anything else.

An email that already has an account is refused rather than served — otherwise anyone who knows your address could mint credentials inside your account.

## Request body

- object
  - `email` string: Creates and links an account. Omit for an unlinked send-only key.
  - `name` string
  - `company` string
  - `label` string: Shown in the key list.
  - `acceptTerms` boolean: Records terms acceptance, which a live key later requires.

## Response `200`

A sandbox key, shown once.

- object
  - `api_key` string, required: Store it now — it is never shown again.
  - `kind` 'sandbox', required
  - `account_linked` boolean, required: False means this key can only send; it cannot manage brands or be upgraded.
  - `verification_sent` boolean
  - `terms_version` string
  - `terms_accepted` boolean
  - `terms_url` string
  - `next` string: What this key can do, precisely.
  - `docs` string

## Other responses

- `409`: An account already exists for that email.
- `500`: Unexpected server error. The body is always JSON.

---

[API](https://skmtc.dev/cadencercs/apis/cadence-api.md) · [All operations](https://skmtc.dev/cadencercs/apis/cadence-api/llms.txt) · [OpenAPI document](https://skmtc.dev/cadencercs/apis/cadence-api/revisions/9438443c2081?raw)
