Cards
Issue cards with limits through our card issuing partner. Cards run with test money today. With the card issuing partner connected, every card is issued under an active cardholder.
POST /api/cards
Bearer apk_ · write:cards · Idempotent · Live: KYB approved
{
"holderKind": "agent", // "agent" | "human"
"holderLabel": "claude-runtime-prod",
"cardholderId": "ch_…", // optional; without it, the first active cardholder is used
"monthlyLimitUsdCents": 500000,
"perTxnLimitUsdCents": 50000,
"allowedMccs": ["5734", "7372"], // null = all
"allowedMerchants": ["openai", "anthropic"]
}Returns { card, fixture }. card includes last4; fixture: true means a
test stand-in, not a card from the issuing partner.
GET /api/cards
Bearer apk_ · read:cards
Lists cards in the workspace, newest first.
GET /api/cards/[id]
Bearer apk_ · read:cards
One card.
PATCH /api/cards/[id]
Bearer apk_ · write:cards
Change state, limits, merchant categories or merchant names:
{
"state": "frozen", // or "active", "terminated"
"monthlyLimitUsdCents": 100000,
"perTxnLimitUsdCents": 10000,
"allowedMccs": ["5734"],
"allowedMerchants": null
}Terminating can't be undone.
Cardholders
POST /api/cardholders
Bearer apk_ · write:cards · Idempotent · Live: KYB approved
{
"displayName": "Jane Doe",
"kind": "employee", // "control_person" | "agent" | "employee"
"firstName": "Jane",
"lastName": "Doe",
"email": "jane@acme.com",
"phoneNumber": "+15555550123",
"shippingAddress": {
"line1": "1 Main St",
"city": "Austin",
"region": "TX",
"postalCode": "78701",
"country": "US"
}
}firstName, lastName, email, phoneNumber and shippingAddress are
required to enrol the person with the card issuing partner. In sandbox the
cardholder is saved but not enrolled, and stays pending. dateOfBirth and
ssnLast4 are optional; they're stored and never returned.
GET /api/cardholders
Bearer apk_ · read:cards
Physical cards
POST /api/physical-cards
Bearer apk_ · write:cards · Idempotent · Live: KYB approved
{
"holderLabel": "Jane Doe",
"finish": "metal", // "standard" | "metal"
"unlockMethod": "premium_99", // "premium_99" | "balance_commit_5000"
"monthlyLimitUsdCents": 500000,
"perTxnLimitUsdCents": 50000,
"shipping": {
"line1": "1 Main St",
"city": "Austin",
"region": "TX",
"postalCode": "78701",
"country": "US"
}
}premium_99 takes $99 from your balance; balance_commit_5000 needs a
balance of at least $5,000. Needs the issuing partner's physical card product
to be configured. Shipping updates aren't built yet.
GET /api/physical-cards
Bearer apk_ · read:cards