Sandbox

Every AltFiScore tenant comes with a fully isolated sandbox environment. Three pre-seeded consumers cover every KYC tier and decision outcome. Sandbox traffic is free, runs against the same engine as production, and returns identical response shapes.

Getting set up

Your sandbox tenant is provisioned automatically when you sign up. To generate a sandbox API key:

  • Log in to lenders.altfiscore.com
  • Go to Settings → API Keys
  • Click Generate new key and choose sandbox
  • Copy the key (shown once) — it'll look like altfi_test_*

Sandbox is free, forever

No billing, no rate limits worth mentioning, no expiration. Use it freely for development, CI, staging, and demos.

Pre-seeded test consumers

Three consumers are seeded into every sandbox tenant. Each represents a different KYC tier path — designed to exercise the orchestration without requiring you to build a synthetic identity pipeline.

Sarah Park — soft KYC (low-value, returning customer)

consumer details

{
  "consumer_id": "11111111-1111-1111-1111-111111111001",
  "first_name": "Sarah",
  "last_name": "Park",
  "email": "sarah.park.demo@altfiscore.com",
  "identity_status": "verified"
}

Sarah is a returning customer with verified identity. Use her for testing low-value transactions where you expect a fast soft-KYC path. Try her with $25-$200 baskets:

Sarah · $25 coffee

curl -X POST 'https://api.altfiscore.com/v1/decisions/bnpl' \
  -H 'Authorization: Bearer altfi_test_YOUR_KEY' \
  -H 'Content-Type: application/json' \
  -H 'Idempotency-Key: $(uuidgen)' \
  -d '{
    "consumer": { "consumer_id": "11111111-1111-1111-1111-111111111001" },
    "transaction": {
      "amount": 25.00, "currency": "USD",
      "merchant_name": "Bluebird Cafe",
      "merchant_category": "food_beverage",
      "product_description": "Coffee subscription"
    },
    "plan_preference": "pay_in_4"
  }'

Marcus Chen — enhanced KYC (mid-value)

consumer details

{
  "consumer_id": "11111111-1111-1111-1111-111111111002",
  "first_name": "Marcus",
  "last_name": "Chen",
  "email": "marcus.chen.demo@altfiscore.com",
  "identity_status": "verified"
}

Marcus has a verified identity but is set up to demonstrate enhanced-KYC flows on mid-value transactions ($500–$5,000). Use him to test the consumer_complete_url + polling flow.

Marcus · $850 sofa

curl -X POST 'https://api.altfiscore.com/v1/decisions/bnpl' \
  -H 'Authorization: Bearer altfi_test_YOUR_KEY' \
  -H 'Content-Type: application/json' \
  -H 'Idempotency-Key: $(uuidgen)' \
  -d '{
    "consumer": { "consumer_id": "11111111-1111-1111-1111-111111111002" },
    "transaction": {
      "amount": 850.00, "currency": "USD",
      "merchant_name": "Sunset Furniture",
      "merchant_category": "furniture",
      "product_description": "Mid-century sofa"
    },
    "plan_preference": "pay_in_4"
  }'

David Thompson — hard KYC (high-value)

consumer details

{
  "consumer_id": "11111111-1111-1111-1111-111111111003",
  "first_name": "David",
  "last_name": "Thompson",
  "email": "david.thompson.demo@altfiscore.com",
  "identity_status": "verified"
}

David is set up to demonstrate hard-KYC flows on high-value transactions ($5,000+). The response will include a consumer_complete_url indicating that additional verification is required before the decision finalizes.

David · $5,500 e-bike

curl -X POST 'https://api.altfiscore.com/v1/decisions/bnpl' \
  -H 'Authorization: Bearer altfi_test_YOUR_KEY' \
  -H 'Content-Type: application/json' \
  -H 'Idempotency-Key: $(uuidgen)' \
  -d '{
    "consumer": { "consumer_id": "11111111-1111-1111-1111-111111111003" },
    "transaction": {
      "amount": 5500.00, "currency": "USD",
      "merchant_name": "Velo Workshop",
      "merchant_category": "sporting_goods",
      "product_description": "Designer e-bike"
    },
    "plan_preference": "monthly"
  }'

Polling pending decisions

For consumers in the enhanced or hard tier, the initial response status is needs_consumer_action. You can poll the decision using the returned polling_url until status becomes complete:

GET /v1/decisions/bnpl/{decision_id}

curl 'https://api.altfiscore.com/v1/decisions/bnpl/8496f4b6-...' \
  -H 'Authorization: Bearer altfi_test_YOUR_KEY'

Webhooks are coming

Webhook-based completion notifications are on the roadmap for Q3 2026 so you won't have to poll. Until then, idempotent polling every 2–3 seconds is the recommended pattern.

Resetting state

Sandbox consumers are durable — their identity status, linked accounts, and historical applications persist across sessions. If you need to test a fresh flow (e.g., a first-time consumer experience), use the lender portal's Reset consumer state action.

Resets are scoped to your sandbox tenant

Resetting Sarah, Marcus, or David in your sandbox does NOT affect any other tenant's sandbox. Each sandbox tenant has its own isolated copy of the test consumers.

Next steps