Virtual cards for your business and your agents, physical cards for your team, and cards for the businesses on your platform. Earn 1% back on eligible spend.
Physical cards free to order 1% cashback, paid monthly Freeze any card in one tap
Virtual
Software & tools•••• •••• •••• 4242Halcyon & Co
LimitsActive
Per purchase$50.00
This month$182.40 of $500.00
MerchantsSoftware only
A person approves$100 and over
Approve $240.00 at Halcyon & Co?An agent asks to spend it+$5.00 cashback1% of $500.00 · September
Two kinds of card
Virtual in one call. Physical for people.
Software & tools · 4242Standing · $500.00 a monthActive
Ads agent · 1881Standing · advertising onlyFrozen
Lumen Labs only · 0716Single use · up to $24.00Ready
Virtual cards, for your business or your agents
Use one for your team’s software and subscriptions, or give an agent cards of its own. Each card is ready to spend as soon as it’s issued.
Standing cards for everyday spending
Single-use cards for one purchase, up to an amount you set
Lock a card to one merchant
Your cardOn its way
OrderedStandard post
ShippedRoyal Mail · tracking number
DeliveredDue Thursday
ActivateWhen it arrives
Physical cards, for your team
One card per person, posted with tracking. They activate it when it arrives.
Standard, express or priority post, with tracking
Lost or stolen: the old card is blocked at once and a new one is posted
Damaged or expired: the old card works until the new one is activated
Spend limits and rules
Decide what every card can spend.
Set limits on each card, and apply a spend policy to one card or all of an agent’s cards at once. Every purchase is checked as the merchant charges.
Limits per purchase, per day, week or month, or all time. Every card has one, $500 a day unless you change it.
Allow kinds of merchant: software and cloud, advertising, travel, food and drink, office supplies, phone and internet, professional services, and postage and couriers.
Allow or block category codes, or restrict a card to certain countries or one merchant.
Every edit to a policy is a new version, and each purchase records the version that decided it.
Spending rulesResearch tools · version 3
Software and cloud only, up to $50 a purchase and $500 a month. A person approves from $100.
Software and cloudAdvertisingTravelOffice supplies
Per purchase$50.00
Monthly$500.00
CountriesAny
Unusual activityAsk a person
Used by 3 cards
Approvals
A person says yes to the big ones.
Purchases at or over your threshold wait for an owner or admin, as do purchases unusual for that agent: far more than it normally spends, a new merchant, or an hour it never buys in.
A push notification with Approve and Decline, plus email, the dashboard and a Slack message
Approve in the iPhone and iPad app with Face ID Beta
24 hours to decide. An API key can never approve.
Agents can ask before they buy, so the merchant never sees a decline
Approve $240.00 at Halcyon & Co?An agent asks to spend it: “Annual data license”.
$240.00
Research agent wants to pay Halcyon & Co
“Annual data license”
DeclineApprove
Only an owner or admin can decide.
Made for AI agents
Let agents buy, within what a person agreed.
Mandates
A person agrees once to what an agent may buy: the most per purchase, how many purchases and which merchants. Carts the agent signs within it go through without asking again.
Agent keys
Each agent signs with its own key. Its public keys are published, so anyone can check a signature, and revoking a key works at once.
Twelve tools: create_agent_card, get_card_details, freeze_card, get_card_balance, request_approval, get_approval, list_card_authorizations, list_card_transactions, and list_topup_options, create_topup, list_topups and get_topup to top up the cards.
Each attempt is kept, approved or declined, with the reason and the policy version that decided it.
A timeline
Asked, approved, authorized, captured and refunded, in order, for every purchase.
Disputes
Dispute a purchase for fraud, goods not received, a duplicate charge and more. If you win, you get the money back.
Freeze in one tap
Freeze a card in the app and unfreeze it with Face ID, or do both through the API.
Running a platform? Issue cards for your businesses.
With Tuppence Connect, each business on your platform gets cards through the same calls. You earn the 1% cashback on what they spend, and choose how much to pass on. Cards on Connect.
Nothing to top up: cards spend your earnings.
Cards spend your earnings directly once they have cleared, so there’s no balance to fund and no money to move. They can spend what you could pay out right now, and the API says when more clears. A purchase over that is declined.
Settled purchases earn 1%, calculated on the month’s total. The statement arrives on the 5th of the next month, and the cashback is paid into your Tuppence balance.
Refunds and disputes take back the cashback they earned
No cashback on cash and cash-like spend, money transfers, securities, stored value, gambling, government payments or gift cards
A card with limits, from the Node or Python SDK or plain HTTP. Add a spend policy or give a card to an agent when you need to. In test mode, make purchases without real money.
const tuppence = newTuppence(process.env.TUPPENCE_SECRET_KEY!);
// A virtual card, ready to spend.const card = await tuppence.cards.create({
limits: { per_authorization: 5000, monthly: 50000 },
});
// Optional: the rules it spends under.const policy = await tuppence.spendPolicies.create({
name: "Software only",
allowed_merchant_kinds: ["software"],
approval_threshold: 10000, // a person says yes from $100
});
await tuppence.cards.update(card.id, { spend_policy: policy.id });
// Optional: a card of its own for an AI agent.const agent = await tuppence.agents.create({ name: "Research agent" });
await tuppence.cards.create({ agent: agent.id });
import { Tuppence } from"@tuppence/node";
const tuppence = newTuppence(process.env.TUPPENCE_SECRET_KEY);
// What the cards can spend now.const balance = await tuppence.request("GET", "/v1/issuing/balance");
// { spendable: 25000, currency: "usd",// spends_from: "payments_balance", limited_by: "cleared", … }// No bank details: the cards spend your cleared earnings.const bank = await tuppence.request(
"GET",
"/v1/issuing/funding_instructions",
);
// { available: false, reason: "spends_earnings", … }// Test mode: pay with pm_card_bypassPending, then move the// test clock 7 days on. Once cleared, the cards can spend it.
import os
from tuppence import Tuppence
tuppence = Tuppence(os.environ["TUPPENCE_SECRET_KEY"])
# What the cards can spend now.
balance = tuppence.request("GET", "/v1/issuing/balance")
print(balance["spendable"], balance["spends_from"])
# No bank details: the cards spend your cleared earnings.
bank = tuppence.request("GET", "/v1/issuing/funding_instructions")
print(bank["available"], bank["reason"]) # False spends_earnings
# What the cards can spend now.
curl https://api.tuppence.ai/v1/issuing/balance \
-H "Authorization: Bearer $TUPPENCE_SECRET_KEY"# No bank details: available is false, reason spends_earnings.
curl https://api.tuppence.ai/v1/issuing/funding_instructions \
-H "Authorization: Bearer $TUPPENCE_SECRET_KEY"
// Pence, per purchase, day, week, month or all time.// null removes a limit; a card always keeps one.await tuppence.cards.setLimits(card.id, {
monthly: 100000, // $1,000 a month
per_authorization: null,
});
// One purchase, at one merchant, up to $24.const once = await tuppence.cards.create({
usage: "single_use",
amount: 2400,
merchant: { name: "Lumen Labs" },
});
// Stop it at once, and start it again.await tuppence.cards.freeze(card.id);
await tuppence.cards.unfreeze(card.id);
// The card pays wherever its policy allows,// and the policy decides the moment the merchant charges it.const { data } = await tuppence.cardAuthorizations.list({
card: card.id,
});
// [{ amount: 1800, merchant: { name: "Lumen Labs", … },// approved: true, decided_by: "policy", … }]// Over the threshold? Ask first, so the merchant never sees a decline.const approval = await tuppence.approvals.create({
card: card.id,
amount: 24000, // $240.00
merchant: { name: "Halcyon & Co" },
description: "Annual data license",
});
// A person says yes in the dashboard or the app. Then buy.
# Test mode: a purchase, decided as a real one would be.
curl https://api.tuppence.ai/v1/test_helpers/issuing/authorizations \
-H "Authorization: Bearer $TUPPENCE_SECRET_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{"card": "card_01K…", "amount": 1800,
"merchant": {"name": "Lumen Labs", "mcc": 5734}}'
{
"object": "card_authorization",
"amount": 1800,
"approved": true,
"decided_by": "policy",
"spend_policy": "pol_01K…",
…
}
# 1% on settled purchases, worked out on the month's total.
curl https://api.tuppence.ai/v1/cashback/statements \
-H "Authorization: Bearer $TUPPENCE_SECRET_KEY"
{
"object": "cashback_statement",
"period": "2026-09",
"currency": "gbp",
"eligible_spend": 50000,
"rate_bps": 89,
"gross": 445,
"status": "paid",
…
}
Webhooks
card.created
card.shipped
approval.requested
approval.decided
card_transaction.created
card_dispute.closed
cashback.statement_ready
cashback.paid
Test mode
Clear a test payment, so the cards can spend it
Make a purchase, then capture, reverse or refund it
US businesses, including sole proprietors, once they accept the card issuer's terms in the dashboard.
Do I need an AI agent to use cards?
No. A virtual card is your business's own unless you give it to an agent. Use it for your team's software, subscriptions and suppliers. Issue a card.
Can I see a card's number?
Yes. Owners and admins see any card's number, expiry and CVC in the dashboard or the app, after confirming it's them. A cardholder sees their own card and its PIN. The details show inside a secure frame and hide again after a minute.
Can my code or an agent read a card's number?
Yes, once an owner switches it on. A restricted key with card_details:read reads your virtual cards' numbers to pay at a checkout, and an agent that signs its requests sees only its own. Every read is logged and sent to your webhook. How it works.
Can an agent have a physical card?
No. Physical cards are for people, one each. Agents get virtual cards.
What currency do cards spend in?
Your account's own currency: pounds in the UK, dollars in the US, euros in the eurozone. They can still buy in other currencies.
What happens when someone approves a purchase?
The card can then be used at that merchant for 30 minutes, up to the approved amount plus 5% for tax or exchange rates.
Does a cardholder need a mobile number?
Yes. 3-D Secure codes for online purchases are texted to it.
What does it cost?
Physical cards are free to order. On purchases in another currency, the card network’s conversion is passed through. See pricing.
What doesn't earn cashback?
Cash and cash-like spend, money transfers, securities, stored value, gambling, government payments and gift cards. Refunded and disputed purchases lose the cashback they earned.
Not yet. Card issuing is new. Not yet available:
Adding cards to Apple Pay and Google Pay
Approving from Slack (Slack tells you about a request today)