Test mode
A full sandbox behind your sk_test_ key: every endpoint, the real fee engine, real webhooks — zero real money.
What's identical to live
- Every endpoint, request shape, response shape, and error code.
- The fee engine — including any negotiated pricing on your account.
- Idempotency semantics, rate limits, and webhook signing.
What's different
- Money is pretend. Fund with the faucet instead of deposits:
POST /test/credit(max $100,000/call, 60/hour). Deposit addresses are live-only. - Cards are synthetic. Issuance always succeeds instantly; card numbers are deterministic
4242…PANs that pass checksum validation but exist on no network. - Spend is simulated. No merchant can charge a test card — you drive transactions yourself:
simulate a purchase or a decline
curl -X POST https://www.primcard.io/api/partner/v1/test/cards/CARD_ID/simulate-transaction \
-H "Authorization: Bearer sk_test_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{ "type": "purchase", "amount": 1250 }' # or "decline"A simulation runs the real settlement pipeline: transaction fees post, the card balance moves, GET /cards/{id}/transactions shows it, and the card.transaction.created webhook fires — so your integration sees exactly what production will send.
Test and live are hermetically separate: separate balances, separate cards, separate idempotency keyspace. A test card id used with a live key is simply
404. Webhook payloads carry "mode": "test" so one endpoint can serve both.