---
title: "Swap a signup code for an API key"
method: POST
path: "/signup/verify"
tags: ["core"]
---

# Swap a signup code for an API key

`POST /signup/verify`

## Request

- Base URL: `https://api.voygr.tech`
- URL: `https://api.voygr.tech/signup/verify`
- Auth: none required

Step 2 of `POST /signup` with `delivery: "code"`, also without a key. Send the `verification_id` and the 6 digits the person got by email.

A code works for 10 minutes or 5 attempts, and only once. Entering it accepts the API Terms.

The key is in this response once and is not emailed, so store it straight away. A new address gets a new account. An address that already has one gets its key replaced: the old key stops working, and we try to email the address a notice with no key in it.

After a 503 the same code still works until it expires. Try again in a minute.

## Request body

- SignupVerifyRequest
  - `verification_id` string, required: From the `POST /signup` response.
  - `code` string, required: The 6 digits from the email. We ignore spaces and dashes.

## Response `200`

The key, sent with `Cache-Control: no-store`.

- SignupVerified: The API key, shown once. It is not emailed.
  - `success` boolean, required
  - `api_key` string, required: Send it as `X-API-Key`. Store it now: it is not shown again.
  - `created` boolean, required: true: a new account was created.
  - `replaced_previous_key` boolean, required: true: the address already had an account, and its previous key no longer works.
  - `opening_balance` integer: Credits the new account starts with. Present only when `created` is true.
  - `message` string, required

## Other responses

- `400`: `CODE_INCORRECT`: the code is wrong. Try again; `attempts_remaining` says how many tries are left. `CODE_INVALID_OR_EXPIRED`: the code was used, has expired or is out of attempts, or the `verification_id` is unknown. Start again with `POST /signup`.
- `403`: The account for this address is suspended. We left it unchanged.
- `409`: The account for this address cannot get a new key here. We left it unchanged. `KEY_EXPIRED`: its key has expired. `ACCOUNT_WITHOUT_PLACECALL`: we cannot set its key up to place calls here. Both need support.
- `422`: The code is not 6 digits, or the `verification_id` is malformed.
- `500`: We could not replace the existing account's key.
- `503`: Try again with the same code: after any 503 it still works until it expires. `SIGNUP_CAPPED`: we are not opening new accounts right now. `SIGNUP_VERIFY_UNAVAILABLE`: we could not issue the key. `account_status_unavailable`: we could not check the account's status.

## Changes

- **2026-10-26** `6c644f08642e`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/voygr/apis/voygr-calls-api/changes/signup/verify/post.md)

---

[API](https://skmtc.dev/voygr/apis/voygr-calls-api.md) - [All operations](https://skmtc.dev/voygr/apis/voygr-calls-api/llms.txt) - [OpenAPI document](https://skmtc.dev/voygr/apis/voygr-calls-api/revisions/7199881ed19e?raw)
