Card-issuing capabilities
All 16 primary features of our Visa issuing partner's card-issuing product, how to use them through Soren Pay, and sandbox tricks for testing.
1. Real-time authorization (sub-200ms)
Every swipe hits /api/webhooks/reap-authorization. Our evaluateAndSettle()
runs the full policy check (state, limits, MCC, merchant, balance) in a
single Postgres CTE with pg_advisory_xact_lock per card — sub-200ms p99.
See the live demo at sorenpay.com (Authorization engine section).
2. Real-time settlement
Settlement is real-time too — no T+1 holds. The moment the issuing partner confirms the
swipe, your workspace ledger reflects the debit. The card_settlement ledger
source distinguishes it from card_authorization_hold (used for variable-amount
auths like fuel pumps).
3. Multi-currency card denomination
Cards can be denominated in USD, HKD, EUR, GBP, SGD. Pass denomination
on mint (live mode only — sandbox defaults to USD).
curl -X POST https://api.sorenpay.com/api/cards \
-H "Authorization: Bearer apk_…" \
-d '{
"holderKind": "agent",
"holderLabel": "hk-ops-agent",
"denomination": "HKD",
"monthlyLimitUsdCents": 100000,
"perTxnLimitUsdCents": 10000
}'4. Apple Pay + Google Pay
In-App Provisioning works on every issued card. Provisioning is client-side (PassKit / Google Wallet SDK); we pass the encrypted card data through after a card-on-file token request.
5. Stablecoin-funded cards
Cards swipe directly from a USDC or USDT balance. Soren Pay's auth engine
already sums column_fiat + reap_stablecoin balances in the decision CTE,
so no special opt-in.
6. MCC + merchant + velocity + geo scope
The bread and butter. Combine to your taste:
curl -X POST https://api.sorenpay.com/api/cards \
-H "Authorization: Bearer apk_…" \
-d '{
"holderKind": "agent",
"holderLabel": "research-bot",
"allowedMccs": ["5734", "7372"],
"allowedMerchants": ["openai", "anthropic", "pinecone"],
"monthlyLimitUsdCents": 500000,
"perTxnLimitUsdCents": 50000
}'7. Agentic Payments (Visa Intelligent Commerce)
Cards minted with holderKind: "agent" can be bound to Ed25519-signed
intents via the Agents API. The signed intent flows through
Visa's Intelligent Commerce network for an extra cryptographic attestation
layer at swipe time.
8. Branded card artwork
Six visual templates today (obsidian, aurora, cyber, magenta, chrome, gold).
Custom artwork (logo, brand color) is supported via our issuing partner's design tool in
live mode — pass artwork_id on mint.
9. Card lifecycle (freeze / unfreeze / terminate / reissue)
curl -X PATCH https://api.sorenpay.com/api/cards/<id> \
-H "Authorization: Bearer apk_…" \
-d '{"state": "frozen"}'Termination is irreversible.
10. Real-time webhooks
Subscribe to:
| Event | When |
|---|---|
| card.minted | After successful mint |
| card.frozen / card.terminated | State changes |
| card.shipped / card.delivered | Physical card lifecycle |
| card.authorization.approved / .declined | Every swipe |
| card.settlement | Settlement confirmed |
| card.dispute.opened | Cardholder disputes a charge |
11. PCI-DSS compliance
Our issuing partner holds the PCI scope. PAN reveal happens via a secure iframe — your servers (and ours) never touch raw card numbers.
12. 3D Secure
Auto-enabled for card-not-present transactions in live mode. Reduces chargebacks, shifts liability appropriately.
13. Disputes + chargebacks
Visa-native dispute flow handled by our issuing partner. We surface dispute state in the
dashboard; you provide evidence (receipt, communication log) via the
POST /api/cards/[id]/disputes/[id]/evidence endpoint. See
Disputes use-case.
14. Global Visa acceptance
Accepted at 100M+ merchants worldwide. Same card works for SaaS subscriptions, travel, agent purchases, in-person retail.
15. Card-on-file tokenization
Agents can store cards-on-file with merchants for recurring AI workloads (OpenAI Pay-as-you-go, Anthropic, Pinecone, AWS, etc.). The merchant gets a network token, not a raw PAN — tokens are scoped to that merchant and revocable.
16. Virtual + physical
Already covered above. Worth repeating: virtual mints instantly; physical ships in 5-7 business days via Idemia or Thales (our issuing partner manages the partner relationship).
Sandbox testing tricks
| What | How |
|---|---|
| Trigger manual_review on KYB | Set business_name = "Review" |
| Trigger denied on KYB | Set business_name = "Denied" |
| Skip KYB entirely | Workspace mode = "sandbox" bypasses the KYB gate |
| Simulate a swipe | POST to /api/webhooks/reap-authorization (sandbox skips HMAC) |