---
title: "Claim a soft-launch invite"
method: POST
path: "/v1/invite/claim"
tags: ["Waitlist"]
---

# Claim a soft-launch invite

`POST /v1/invite/claim`

## Request

- Base URL: `https://api.chronary.ai`
- URL: `https://api.chronary.ai/v1/invite/claim`
- Auth: none required

Consumes a signed invite token and provisions an active org with `plan=pro`,
`plan_source=soft_launch_invite`, `plan_expires_at=ga_date`. Mints a live + test API key
and transitions the waitlist entry to `claimed`.

OTP is intentionally skipped — token possession (delivered to the email captured at
intake) is the email-ownership proof. Public, IP+token rate-limited.

## Request body

- InviteClaimRequest
  - `token` string, required

## Response `201`

Org created. Live + test API keys returned (only chance to see them).

- InviteClaimResponse
  - `org_id` string, required
  - `agent_id` string, required
  - `api_key` string, required
  - `plan` 'pro', required
  - `plan_expires_at` string, nullable, required

## Other responses

- `400`: Token is missing or malformed.
- `409`: Email already has an active account, or invite already claimed.
- `410`: Token has expired.
- `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)
