Skip to main content
The Bridge + Stripe Issuing integration uses two separate sandbox environments: the Stripe Sandbox for card creation and transaction simulation, and the Bridge sandbox for customer and KYC testing.
Bridge only supports testing against the Stripe Sandbox. Stripe’s Test Mode is not supported for this integration.

Stripe Sandbox

All card operations—creating cards, simulating authorizations, and testing Stripe Issuing features—are done using the Stripe Sandbox with your Stripe Sandbox API keys.

Set up

  1. Make sure your Stripe account is connected to Bridge in the Stripe Sandbox (Bridge will provide a Sandbox App Install Link during onboarding).
  2. Use your Stripe Sandbox secret key for all Stripe API calls.
  3. Use the Bridge sandbox API (https://api.sandbox.bridge.xyz) for customer and KYC operations.

Create a test card

Once you have a sandbox customer with an approved cards endorsement (see Customer eligibility), use your stripe_cardholder_id to create a card in the Stripe Sandbox:
curl -X POST https://api.stripe.com/v1/issuing/cards \
  -u sk_sandbox_…: \
  -d cardholder=ich_test_1234 \
  -d currency=usd \
  -d type=virtual \
  -d status=active \
  -d "crypto_wallet[chain]=solana" \
  -d "crypto_wallet[currency]=usdc" \
  -d "crypto_wallet[type]=standard" \
  -d "crypto_wallet[address]=6rXzF4UzvU9qxkRxUP3sTrPJ3YudA8eutFHVz7zcmV6q"

Simulate card transactions

Use Stripe’s test infrastructure to simulate card authorizations and transactions. Refer to the Stripe Issuing testing documentation for:
  • Simulating approvals and declines
  • Testing incremental authorizations
  • Triggering specific decline codes
  • Simulating disputes
For noncustodial wallet testing, the Stripe Sandbox also simulates the onchain transaction submission against Solana devnet.

Test webhooks

Use the Stripe CLI to forward Stripe Sandbox webhooks to your local server:
stripe listen --forward-to localhost:3000/webhooks/stripe
This lets you test your issuing_authorization.created, issuing_authorization.updated, and issuing_transaction.created webhook handlers locally.

Bridge sandbox

The Bridge sandbox (https://api.sandbox.bridge.xyz) is used for all customer and KYC operations. It’s identical to production but uses test data and doesn’t require bank partner or card network approval.
All Bridge sandbox requests should go to https://api.sandbox.bridge.xyz

Create a sandbox customer

Follow the standard customer creation and KYC flow using the Bridge sandbox API. The sandbox supports the full KYC endorsement flow, including the cards endorsement.

Noncustodial wallet testing on devnet

For noncustodial wallets, the Bridge sandbox supports testing onchain approvals against Solana devnet. You can set up a delegate approval against the devnet contract to test the full end-to-end flow.

Simulate card transactions via Bridge API

The Bridge sandbox also includes simulation endpoints for testing card transaction scenarios if needed: Simulate an authorization:
curl -X POST 'https://api.sandbox.bridge.xyz/v0/customers/<CustomerId>/card_accounts/<CardAccountId>/simulate_authorization' \
  --header 'Content-Type: application/json' \
  --header 'Api-Key: <ApiKey>' \
  --header 'Idempotency-Key: <IdempotencyKey>' \
  -d '{"amount": "100.0", "merchant_name": "Test Merchant"}'
Simulate settlement:
curl -X POST 'https://api.sandbox.bridge.xyz/v0/customers/<CustomerId>/card_accounts/<CardAccountId>/simulate_settlement' \
  --header 'Content-Type: application/json' \
  --header 'Api-Key: <ApiKey>' \
  --header 'Idempotency-Key: <IdempotencyKey>' \
  -d '{"amount": "100.0", "merchant_name": "Test Merchant", "authorization_id": "<AuthorizationIdFromPreviousStep>"}'
Simulate an authorization reversal:
curl -X POST 'https://api.sandbox.bridge.xyz/v0/customers/<CustomerId>/card_accounts/<CardAccountId>/simulate_incremental_authorization' \
  --header 'Content-Type: application/json' \
  --header 'Api-Key: <ApiKey>' \
  --header 'Idempotency-Key: <IdempotencyKey>' \
  -d '{"amount": "100.0", "merchant_name": "Test Merchant", "transaction_type": "reversal", "original_authorization_id": "<AuthorizationId>"}'