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
| What | How |
|---|---|
| Business verification "in review" | Legal name Review (with the banking partner's test environment connected) |
| Business verification "denied" | Legal name Denied (same) |
| Skip business verification | Sandbox workspaces don't need it |
| Simulate a payment | The Try a test payment panel on the card's dashboard page (sandbox only) |