---
title: "Collect the key a checkout paid for"
method: POST
path: "/v5/claim"
tags: ["Payment"]
---

# Collect the key a checkout paid for

`POST /v5/claim`

## Request

- Base URL: `https://headlessoracle.com`
- URL: `https://headlessoracle.com/v5/claim`
- Auth: none declared

POST the claim_token returned by /v5/checkout, in a JSON body (a token in the URL is ignored). Answers pending until Paddle confirms payment and the key is minted, then ready with the key and how to use it. A ready claim is served for 24 hours after payment. Every response is Cache-Control: no-store.

## Request body

- object
  - `claim_token` string, required

## Response `200`

pending (poll again after retry_after_seconds) or ready (the key, its plan and instructions)

- object
  - `state` 'pending' | 'ready', required
  - `retry_after_seconds` integer
  - `key` string: Present when state is ready. Save it; it is not shown after the claim expires.
  - `plan` 'builder' | 'pro' | 'protocol' | 'credits' | 'evidence_starter' | 'evidence'
  - `instructions` object

## Other responses

- `400`: claim_token missing or not 64 lowercase hex
- `404`: {"state":"unknown"}: no such claim, or it expired
- `405`: Method not allowed — use POST
- `410`: {"state":"expired","message":"..."}: the claim is past its 24-hour window and was never ready. Stop polling; write in with the transaction ID.
- `429`: Rate limited; retry after retry_after_seconds
- `503`: Claims unavailable; retry after retry_after_seconds

---

[API](https://skmtc.dev/headlessoracle/apis/headless-oracle.md) · [All operations](https://skmtc.dev/headlessoracle/apis/headless-oracle/llms.txt) · [OpenAPI document](https://skmtc.dev/headlessoracle/apis/headless-oracle/revisions/4e82fe332f29?raw)
