---
title: "Verify agent email OTP"
method: POST
path: "/v1/agent/verify"
tags: ["Agent Auth"]
---

# Verify agent email OTP

`POST /v1/agent/verify`

## Request

- Base URL: `https://api.chronary.ai`
- URL: `https://api.chronary.ai/v1/agent/verify`
- Auth: HTTP bearer

Promote a restricted agent key to full access by submitting the 6-digit OTP received via email.

On success the org transitions `status: unverified → verified`, the plan upgrades from `free-agent-unverified` to `free-agent`, and the key immediately gains full write access.

On any failure (wrong OTP / expired / already burned after 10 attempts / unknown org) the response is a generic 400 validation_error — no information is leaked about which precondition failed.

## Request body

- AgentVerifyBody
  - `otp` string, required

## Response `200`

OTP verified; full access unlocked.

- AgentVerifyResponse
  - `verified` true, required
  - `message` string, required

## Other responses

- `400`: Validation error — invalid request body or query parameters
- `401`: Unauthorized — missing or invalid API key
- `429`: Rate limited — 10 requests per second per key exceeded
- `500`: Internal server error

---

[API](https://skmtc.dev/chronary/apis/chronary-api.md) · [All operations](https://skmtc.dev/chronary/apis/chronary-api/llms.txt) · [OpenAPI document](https://skmtc.dev/chronary/apis/chronary-api/revisions/0d1a330294ae?raw)
