Card capabilities

What's built for cards (in sandbox), what's coming soon, and what isn't built yet. Cards run with test money today.

Built (in sandbox)

Spending rules checked on every payment

Each card payment is checked on our servers against the card's state, per-payment limit, merchant categories, merchant names, monthly limit and the balance. With the card issuing partner connected, it sends each payment to us for a decision in real time.

curl -X POST https://sorenpay.com/api/cards \
-H "Authorization: Bearer apk_…" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{
  "holderKind": "agent",
  "holderLabel": "research-bot",
  "allowedMccs": ["5734", "7372"],
  "allowedMerchants": ["openai", "anthropic"],
  "monthlyLimitUsdCents": 50000,
  "perTxnLimitUsdCents": 5000
}'

Freeze, unfreeze and terminate

curl -X PATCH https://sorenpay.com/api/cards/<id> \
-H "Authorization: Bearer apk_…" \
-H "Content-Type: application/json" \
-d '{"state": "frozen"}'

Terminating can't be undone. The same call changes limits, merchant categories and merchant names.

Cards for AI agents

Cards with holderKind: "agent" are for software. An agent can also register an Ed25519 key and sign payment intents with the Agents API. Signed intents are checked and logged, but card payments don't check them yet: a card payment is decided by the card's rules only.

Physical cards

POST /api/physical-cards orders a card: $99 taken from your balance, or free with a $5,000 balance. Needs the card issuing partner's physical card product to be configured.

Settlement

When the card issuing partner confirms a payment, the amount is taken from your workspace ledger. Payments whose final amount isn't known up front (fuel pumps, hotels) hold the authorized amount first.

Simulate a payment

In sandbox, open a card in the dashboard and use the Try a test payment panel to see the decision and the reason.

Coming soon

  • Apple Pay and Google Pay
  • Card notifications: an alert to your systems (a webhook) or an email when a card is used or declined. The only webhook we send today is checkout.session.completed
  • A card that spends a stablecoin balance. Today cards spend from your USD account only
  • Personal accounts with their own card, and a card that spends from your own wallet (see Self-custody card)

Not built yet

  • Showing the full card number to the cardholder
  • Cards in currencies other than US dollars
  • Custom card artwork from your brand
  • Shipping updates for physical cards
  • A dispute API (see Disputes + chargebacks)

Sandbox tricks

WhatHow
Business verification "in review"Legal name Review (with the banking partner's test environment connected)
Business verification "denied"Legal name Denied (same)
Skip business verificationSandbox workspaces don't need it
Simulate a paymentThe Try a test payment panel on the card's dashboard page (sandbox only)