Checkout Page API

A predictable REST API over HTTPS. JSON in, JSON out, conventional status codes, and a typed SDK for TypeScript.

https://api.checkoutpage.example/v1v2026-08-01
create-checkout.ts

Authentication

Send your secret key as a bearer token on every request. Keys are scoped per environment — test keys never touch live money.

terminal

Endpoints

Every endpoint returns JSON and uses conventional HTTP status codes. IDs are prefixed by resource type, so they are safe to log.

POST/checkoutsCreate a checkout session and get a hosted URL back.
GET/checkouts/:idRetrieve a checkout session and its current status.
GET/ordersList orders, filtered by product, status or date range.
GET/orders/:idRetrieve one order with line items and custom field answers.
POST/orders/:id/refundsRefund an order in full or in part.
GET/subscriptionsList subscriptions with plan, status and next charge date.
POST/subscriptions/:id/pausePause billing without cancelling the subscription.
DELETE/subscriptions/:idCancel immediately or at the end of the period.
POST/webhooksRegister an endpoint and choose the events it receives.
GET/webhooks/:id/deliveriesInspect delivery attempts and replay any of them.

Webhook events

Deliveries are signed with HMAC-SHA256 and retried with exponential backoff for 24 hours. Handlers should be idempotent.

order.completed

A payment succeeded and the order is fulfilled.

order.refunded

A full or partial refund was issued.

checkout.abandoned

A buyer left before paying, after entering an email.

subscription.created

A new subscription started, including trials.

subscription.updated

Plan, quantity or billing date changed.

subscription.paused

Billing was paused by the customer or by you.

subscription.cancelled

The subscription ended or was cancelled.

payment.failed

A recurring charge failed and entered retry.

Errors

400invalid_requestA parameter is missing or malformed. The response names the field.
401unauthorisedThe API key is missing, revoked or from the wrong environment.
403forbiddenThe key is valid but the plan does not include this endpoint.
404not_foundNo resource with that ID exists on this account.
409conflictThe request collided with the current state, e.g. double refund.
429rate_limitedToo many requests. Back off using the Retry-After header.
500server_errorSomething broke on our side. These are alerted on and investigated.

Rate limits

Read endpoints1,000 req/min
Write endpoints200 req/min
Webhook deliveries24h retry window
Burst allowance2x for 10 seconds

Build it this afternoon

Test-mode keys are available the moment you sign up. No sales call, no waiting list.