---
title: "Start a card or bank-transfer purchase (portal session only)."
method: POST
path: "/v1/billing/checkout"
tags: ["account"]
---

# Start a card or bank-transfer purchase (portal session only).

`POST /v1/billing/checkout`

## Request

- Base URL: `https://api.50heads.com`
- URL: `https://api.50heads.com/v1/billing/checkout`
- Auth: HTTP bearer

Not available to API keys: buying credits needs a signed-in person.

## Request body

- CheckoutInput
  - `pack` string, required
  - `currency` 'GBP' | 'USD' | 'EUR' | 'CAD', required
  - `method` 'card' | 'bank_transfer', required
  - `returnPath` string

## Response `200`

OK

## Other responses

- `400`: The request is not valid; `error.details.validation` lists the fixes.
- `401`: No key or token, or it expired or was revoked.
- `403`: The key or token lacks the scope (`insufficient_scope`), or the action is not allowed.
- `429`: Too many requests; wait for Retry-After.

---

[API](https://skmtc.dev/50heads/apis/50heads-api.md) · [All operations](https://skmtc.dev/50heads/apis/50heads-api/llms.txt) · [OpenAPI document](https://skmtc.dev/50heads/apis/50heads-api/revisions/20175e8b00e3?raw)
