Skip to content
Last updated

Set up a sandbox environment

Prerequisites

Step 1: Use the sandbox base URL

All sandbox requests use the development base URL.

EnvironmentBase URL
Sandboxhttps://api.dev.paradisegateway.net
Productionhttps://api.paradisegateway.net

Set the base URL in your application's configuration so you can switch between environments without changing code.

export PARADISE_API_URL="https://api.dev.paradisegateway.net"

Step 2: Store your sandbox API key

Retrieve your sandbox API key (see Obtain API credentials) and store it as an environment variable.

export PARADISE_API_KEY="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
Never commit credentials

Add environment variable files (.env, .env.local) to .gitignore. Do not hard-code API keys in source code.

Step 3: Use test card numbers

The sandbox accepts specific test card numbers that simulate various outcomes. Real card numbers are rejected in the sandbox.

Cards that approve

Card numberBrandCVVExpiry
4111111111111111VisaAny 3 digitsAny future date
4111111111111234VisaAny 3 digitsAny future date
5500000000005678MastercardAny 3 digitsAny future date

Cards that decline

Card numberBrandSimulated result
4000000000000002VisaDecline — insufficient funds
4000000000000069VisaDecline — expired card
4000000000000127VisaDecline — CVV mismatch

Test bank accounts

Routing numberAccount numberAccount typeResult
0210000219876543210checkingApproved
0210000210000000001checkingReturn — insufficient funds

Step 4: Send a test transaction

Verify your sandbox setup by processing a test sale.

curl -X POST \
  $PARADISE_API_URL/v1/transactions \
  -H "Content-Type: application/json" \
  -H "APIKEY: $PARADISE_API_KEY" \
  -d '{
    "type": "card_sale",
    "amount": 1999,
    "payment_method": {
      "type": "card",
      "pan": "4111111111111111",
      "expiry_month": "12",
      "expiry_year": "2028",
      "cardholder_name": "Test User",
      "cvv": "123",
      "address_line1": "123 Test St",
      "zip": "10001"
    }
  }'

A successful response returns transaction_state: authorized and response_code: "00".

{
  "id": "TRANSACTION-06OSTESTXYZ123456789ABCDE",
  "object": "transaction",
  "type": "card_sale",
  "transaction_state": "authorized",
  "response_status": "Approved",
  "response_code": "00",
  "response_message": "The API request is approved.",
  "amount": 1999,
  "correlation_id": "d4e5f6a7-b8c9-0123-def0-123456789abc"
}

Step 5: Test error scenarios

Exercise your error handling by testing common failure cases.

ScenarioHow to triggerExpected result
Declined transactionUse decline test card 4000000000000002response_status: Declined
Invalid cardSend an invalid PAN like 1234567890123456422 Validation failed
Missing required fieldOmit amount400 Bad Request
Invalid API keyUse APIKEY: invalid401 Unauthorized
Non-existent transactionGET /v1/transactions/TRANSACTION-DOESNOTEXIST404 Not Found

Sandbox vs. production differences

BehaviorSandboxProduction
Processor connectionsSimulatedLive TSYS / Vericheck
Real fundsNoYes
Test cards acceptedYesNo — real cards only
SettlementSimulated batch closureReal batch clearing
ACH returnsSimulated on scheduleReal ACH network timeline
Rate limitsSame as productionStandard limits

Switching to production

When your integration is tested and ready, switch to production.

  1. Obtain production credentials — create a production client account and API key using the production base URL.
  2. Update the base URL — change PARADISE_API_URL to https://api.paradisegateway.net.
  3. Update the API key — replace your sandbox key with the production key.
  4. Remove test card numbers — production rejects test cards.
  5. Verify processor integrations — ensure live TSYS and/or Vericheck integrations are configured.

For a complete checklist, see Sandbox vs. production.

Before going live

Run your full test suite against the sandbox. Confirm that your error handling, retry logic, and webhook processing all work as expected before switching to production.

Next steps