Skip to content

Use cases

Find what you’re building. Each recipe lists the objects, calls and events it uses. New to the objects? Read Core concepts first.

You’re buildingRecipe
A SaaS that sells something onceOne-off checkout
A SaaS on monthly plansSubscriptions
A shop with no code at allPayment links
A marketplace or vertical softwareConnect
An API agents pay for, per requestHTTP 402
An agent that buys thingsAgent cards
A bookings siteDeposits and no-shows
UK collections from bank accountsDirect Debit (UK businesses only; US bank debits come later) (SEPA Direct Debit in Europe, by application)

When: a customer buys one thing (a plan upgrade, a report, credits) and you fulfil it.

  1. CreatePOST /v1/payments
  2. Payapproval_url or client_secret
  3. Hearpayment.succeeded
  4. Fulfilyour code
Hosted pageEmbedded checkout
PayerLeaves for our page (approval_url)Stays on yours
You buildA redirectCard fields with @tuppence/js and your pk_… key
3-D SecureThe page runs itsheet.confirm() runs it
Eventspayment.succeeded, payment.failedSame

Use: Take a payment · Webhooks · Testing

When: customers pay the same amount every month or year.

  1. PlanPOST /v1/plans
  2. Subscribelink with mode: "subscription", or POST /v1/subscriptions
  3. Renewssubscription.renewed, invoice.paid
  4. Self-servePOST /v1/portal_sessions
ObjectsCallsEvents
Plan, customer, saved card, subscription, invoicePOST /v1/plans, /v1/payment_links (mode: "subscription"), /v1/subscriptions, …/preview + …/change, /v1/portal_sessionssubscription.started, .renewed, .payment_failed, .recovered, .canceled, invoice.paid

Failed renewals retry automatically after 1, 3, 7 and 14 days. Use: Subscriptions

When: you sell from a chat, an email, an Instagram bio or a QR code on a market stall.

  1. Createdashboard, or POST /v1/payment_links
  2. Shareurl or …/qr
  3. Paidpayment.succeeded
ObjectsCallsEvents
Payment link, paymentPOST /v1/payment_links, GET /v1/payment_links/{id}/qrpayment.succeeded, payment_link.completed

Fixed or payer-chosen amounts, single-use or reusable. Use: Quickstart · Payment links

When: businesses sell through your software, and you take a cut.

BusinessYour platformTuppencePOST /v1/accountsPOST /v1/account_linkshosted onboardingaccount.updatedTuppence-Account + application_feepayment.succeededPOST /v1/transfers
ObjectsCallsEvents
Connected account, account link, application fee, transferPOST /v1/accounts, /v1/account_links, any call with Tuppence-Account: acct_…, application_fee_amount, POST /v1/transfersOn a connect: true endpoint: account.updated, application_fee.created, transfer.created, and the account’s own events with account set

Each connected account is a whole Tuppence account in your platform’s region. You bear its losses. Use: Connect · Onboarding · Money for platforms

When: your API is worth paying for per request, by people or by their agents.

Caller or agentYour APITuppenceGET /v1/report402 + accepts[].urlpays, fetches receiptTuppence-Receipt …verify offline (JWKS)200
PiecesHow
Your routehttp402({ tuppence, price, currency, account }) in Node; Http402Middleware / PayWall in Python
A receiptA JWT bound to the route and amount, used once, verified against /.well-known/jwks.json with no call to us
Agents with prepaid creditGive the route a meter (credits: { meter }); mint a capped token with POST /v1/credits/{customer}/tokens; the agent sends Authorization: Tuppence-Credits <token>

Use: HTTP 402 · Agent frameworks

When: an agent buys on someone’s behalf: SaaS, API credits, a booking, a flight.

PersonAgentTuppenceMerchantcreate_agent_cardrequest_approvalapprove?yespays with the cardauthorisationlimits + spend rules
PiecesHow
ToolsThe MCP server at https://api.tuppence.ai/mcp, with a restricted key (rk_…) scoped to what the agent may do, each request signed as the agent
Its rulesA person gives the agent a default spending policy first: its limits and approval threshold. The agent’s key can’t change them
Ask firstrequest_approval, then get_approval
The cardcreate_agent_card: single-use, one purchase at one merchant, for the agent itself only, on its default policy; freeze_card stops it. Within the account’s card limits. What a restricted key can do
A web checkoutget_card_details, only with a card_details:read key where the owner allowed it (card details). A 3-D Secure code goes to the cardholder: the agent stops and asks
Who did itAgent identity: the agent signs each request, and a mandate records what a person agreed it may buy
Eventsapproval.decided, card.created, card_transaction.created, card.details_retrieved

When: clients book appointments, and missed slots cost you money.

  1. Policydeposit, card_required
  2. Publishbooking page or embed
  3. Client booksbooking.deposit_paid
  4. No-show?POST /v1/bookings/{id}/charge_fee
ObjectsCallsEvents
Service, staff, booking policy, booking page, bookingPOST /v1/services, /v1/booking_policy, /v1/booking_page/publish, /v1/bookings/{id}/no_show, …/charge_feebooking.created, booking.confirmed, booking.deposit_paid, booking.no_show, booking.fee_charged

On the booking page, a booking exists only once the deposit is paid. Use: Set up bookings · Deposits and no-shows · Embed

When: a UK business takes regular pounds from bank accounts: memberships, invoices, instalments.

  1. ApplyPOST /v1/direct_debit/application
  2. Payer sets it uppay page, link or subscription
  3. ~3 working daysprocessing → succeeded
  4. AgainPOST /v1/payments/charge_saved
ObjectsCallsEvents
Application, payment, saved bank account and mandatePOST /v1/direct_debit/application, GET /v1/direct_debit, POST /v1/payments (save_card), /v1/payments/charge_saveddirect_debit_application.approved, payment.processing, payment.succeeded, payment.failed, payment_method.mandate_cancelled

Not on booking deposits, the till or credit top-ups. Use: Direct Debit · Subscriptions by Direct Debit

Ask the docs assistant. Describe what you’re building and it answers from these docs and, if you’re signed in, your account.

Docs assistant

Open as a page
Loading the assistant…