---
title: "Create Paddle Checkout Transaction"
method: POST
path: "/v5/checkout"
tags: ["Payment"]
---

# Create Paddle Checkout Transaction

`POST /v5/checkout`

## Request

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

Creates a Paddle transaction for any plan in valid_plans (builder, pro, protocol, credits, conformance_entry, regrade, dispute, dispute_note, custody_90d, custody_1y) and returns the hosted payment URL. No authentication required. Redirect the user to the returned url.

## Request body

- object
  - `plan` 'builder' | 'pro' | 'protocol' | 'credits' | 'conformance_entry' | 'regrade' | 'dispute' | 'dispute_note' | 'custody_90d' | 'custody_1y', required: The plan to buy. Required: an absent body or plan is 400 PLAN_REQUIRED and nothing is created. custody_90d (Evidence Starter) and custody_1y (Evidence) deliver a Chirindo Witness key.

## Response `200`

Checkout transaction created

- object
  - `url` string, uri, required
  - `overlay_url` string, uri, nullable
  - `transaction_id` string, required
  - `claim_token` string: Present only for plans that mint a key (builder, pro, protocol, credits, custody_90d, custody_1y). Keep it client-side and POST it to /v5/claim after payment to receive the key. Absent when the claim could not be set up; then write to mike@headlessoracle.com with the transaction ID from your Paddle receipt.

## Other responses

- `400`: PLAN_REQUIRED (no plan named), UNKNOWN_PLAN or INVALID_BODY. Nothing is created. The body carries valid_plans and plans: each plan with amount_usd, currency and billing (monthly or one_time).
- `405`: Method not allowed — use POST
- `502`: Paddle API error
- `503`: Billing not configured

---

[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)
