---
title: "Purchase Single Design"
method: POST
path: "/billing/purchase-single"
tags: ["billing", "billing-checkout"]
---

# Purchase Single Design

`POST /billing/purchase-single`

## Request

- Base URL: `https://api.threadchain.pro` (the document declares no server; this is the origin it was published from)
- URL: `https://api.threadchain.pro/billing/purchase-single`
- Auth: OAuth 2
  - Password
  - Token URL: `auth/token`

PAYG: one or more tech packs, priced from the ``payg`` ``PaymentPlan`` row
(the same catalog ``GET /billing/plans`` reads from) rather than a
hard-coded Stripe Price ID, plus optional add-on line items
(``STRIPE_PAYG_ADDON_*``, still price-ID based).

``quantity`` is the number of packs. Stripe is charged unit price ×
quantity and the webhook grants ``quota × quantity`` credits.

Add-ons are stored in session metadata (``payg_addons``) for auditing.

## Request body

- SingleDesignRequest
  - `success_url` string, nullable
  - `cancel_url` string, nullable
  - `quantity` integer: Number of PAYG tech packs to purchase
  - `payg_addons` string[]: Optional PAYG add-ons (one-time), each must be one of: 'colourway', 'edits', 'factory_collab'

## Response `200`

Successful Response

- CheckoutResponse
  - `checkout_url` string, required
  - `session_id` string, required

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/threadchain/apis/threadchain-backend.md) - [All operations](https://skmtc.dev/threadchain/apis/threadchain-backend/llms.txt) - [OpenAPI document](https://skmtc.dev/threadchain/apis/threadchain-backend/revisions/8ee288a7e6bd?raw)
