---
title: "Issue a six-digit door code"
method: POST
path: "/v1/otp/issue"
---

# Issue a six-digit door code

`POST /v1/otp/issue`

## Request

- Base URL: `https://api.affix-io.com`
- URL: `https://api.affix-io.com/v1/otp/issue`
- Auth: one of:
  - API key in header `X-API-Key`
  - HTTP bearer

Issue a short-lived six-digit code bound to a proof, for staffed doors. The response includes code and expires_at.

## Request body

- CarrierIssueRequest: Every presentment carrier must be bound to a proof you created with this API key. Send proof_digest (64 hex) or proof_ref (the proof_id from prove). Empty, unknown, someone else's or already spent proofs are refused.
  - `proof_digest` string: proof_digest returned by prove.
  - `proof_ref` string: proof_id returned by prove (e.g. pf_...). Used when proof_digest is omitted.
  - `circuit_id` string
  - `gate_id` string
  - `label` string: Your label. Not shown on the public status page.
  - `ttl_seconds` integer
  - `meta` object

## Response `201`

Carrier issued.

## Other responses

- `400`: proof_required (no proof_digest or proof_ref), unknown_proof, or invalid_request.
- `401`: API key missing or not accepted.
- `403`: proof_not_owned: the proof was created with a different API key.
- `409`: already_used: the proof has already been consumed.
- `429`: Rate limited; see Retry-After.

---

[API](https://skmtc.dev/affix-io/apis/affixio-verification-api.md) · [All operations](https://skmtc.dev/affix-io/apis/affixio-verification-api/llms.txt) · [OpenAPI document](https://skmtc.dev/affix-io/apis/affixio-verification-api/revisions/9a5f8ff2582d?raw)
