Cards

Issue scoped Visa cards via our issuing partner. Live mode requires a registered cardholder first.

POST /api/cards

Bearer apk_ · write:cards · Idempotent · Live: KYB approved

{
"holderKind": "agent",               // "agent" | "human"
"holderLabel": "claude-runtime-prod",
"cardholderId": "ch_…",              // optional; required in live mode
"monthlyLimitUsdCents": 500000,
"perTxnLimitUsdCents": 50000,
"allowedMccs": ["5734", "7372"],     // null = all
"allowedMerchants": ["openai", "anthropic"]
}

Returns the card row including reapCardToken + last4.

GET /api/cards

Bearer apk_

Lists cards in the workspace, most-recent first.

GET /api/cards/[id]

Bearer apk_

Single card with full state + recent auth logs.

PATCH /api/cards/[id]

Bearer apk_ · write:cards

Update state, limits, scopes:

{
"state": "frozen",                    // or "active", "terminated"
"monthlyLimitUsdCents": 100000,
"allowedMccs": ["5734"]
}

Cardholders

POST /api/cardholders

Bearer apk_ · write:cards · Idempotent

{
"displayName": "Jane Doe",
"kind": "control_person",            // "control_person" | "agent" | "employee"
"email": "jane@acme.com",
"dateOfBirth": "1985-04-12",
"ssnLast4": "1234",
"countryCode": "US"
}

GET /api/cardholders

Bearer apk_

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 Hacker Way",
  "city": "Menlo Park",
  "region": "CA",
  "postalCode": "94025",
  "country": "US"
}
}

Ships in 5-7 business days (Idemia or Thales manufactured).