Skip to main content

Overview

Use the sandbox to test the complete IBAN onboarding flow. The sandbox uses Monerium on the Chiado testnet (Gnosis testnet) — no real IBAN is provisioned, and no real bank transfers can be sent to sandbox IBANs. Sandbox base URL: https://crypto-sandbox.yativo.com/api/
In the sandbox, IBAN operations run on Chiado testnet. No real IBANs are assigned and no real bank transfers can be received. Use the sandbox to verify your integration logic and status-handling code.

Step 1 — Get IBAN Options

Retrieve available options and requirements for standalone IBAN onboarding.
GET https://crypto-sandbox.yativo.com/api/iban/options
cURL
curl -X GET 'https://crypto-sandbox.yativo.com/api/iban/options' \
  -H 'Authorization: Bearer YOUR_SANDBOX_TOKEN'
Response
{
  "status": "success",
  "data": {
    "supported_currencies": ["EUR"],
    "supported_networks": ["SEPA", "SEPA_INSTANT"],
    "kyc_required": true,
    "supported_payout_tokens": ["USDC", "USDT"],
    "supported_payout_chains": ["ethereum", "polygon", "solana"],
    "sandbox_note": "IBAN options in sandbox mirror production. Uses Chiado testnet (Gnosis). No real IBANs provisioned."
  }
}

Step 2 — Initialize Onboarding

POST https://crypto-sandbox.yativo.com/api/iban/onboarding/init
email
string
required
The applicant’s email address.
customer_id
string
Your internal customer identifier. Links the IBAN to an existing customer record.
cURL
curl -X POST 'https://crypto-sandbox.yativo.com/api/iban/onboarding/init' \
  -H 'Authorization: Bearer YOUR_SANDBOX_TOKEN' \
  -H 'Content-Type: application/json' \
  -d '{
    "email": "sandbox-iban-test@example.com",
    "customer_id": "cus_sandbox_iban_001"
  }'
Response
{
  "status": "success",
  "message": "IBAN onboarding initialized",
  "data": {
    "onboarding_id": "onb_01HX9KZMB3F7VNQP8R2WDGTAAA",
    "customer_id": "cus_sandbox_iban_001",
    "email": "sandbox-iban-test@example.com",
    "status": "pending_kyc",
    "next_step": "kyc",
    "created_at": "2026-03-28T21:00:00Z"
  }
}

Step 3 — Submit KYC

POST https://crypto-sandbox.yativo.com/api/iban/onboarding/kyc
customer_id
string
required
Your internal customer identifier.
kyc
object
required
KYC data for the applicant.
cURL
curl -X POST 'https://crypto-sandbox.yativo.com/api/iban/onboarding/kyc' \
  -H 'Authorization: Bearer YOUR_SANDBOX_TOKEN' \
  -H 'Content-Type: application/json' \
  -d '{
    "customer_id": "cus_sandbox_iban_001",
    "kyc": {
      "method": "direct_docs",
      "first_name": "Sandbox",
      "last_name": "User",
      "date_of_birth": "1990-01-01",
      "nationality": "DE"
    }
  }'
Response
{
  "status": "success",
  "data": {
    "customer_id": "cus_sandbox_iban_001",
    "kyc_status": "pending",
    "submitted_at": "2026-03-28T21:05:00Z"
  }
}

Step 4 — Request IBAN

Once KYC is approved, request IBAN provisioning.
POST https://crypto-sandbox.yativo.com/api/iban/iban/request
customer_id
string
required
Your internal customer identifier.
payout_token
string
required
Token to receive converted funds in: "USDC".
payout_chain
string
required
Chain for payouts: "solana", "ethereum", "polygon".
payout_address
string
required
Testnet wallet address for payouts.
cURL
curl -X POST 'https://crypto-sandbox.yativo.com/api/iban/iban/request' \
  -H 'Authorization: Bearer YOUR_SANDBOX_TOKEN' \
  -H 'Content-Type: application/json' \
  -d '{
    "customer_id": "cus_sandbox_iban_001",
    "payout_token": "USDC",
    "payout_chain": "solana",
    "payout_address": "GY1EZGdpiJNyx2BSKq8rfTDRe5K8Bb6Cf2Bn1pdmE2o1"
  }'
{
  "status": "success",
  "data": {
    "customer_id": "cus_sandbox_iban_001",
    "iban_request_id": "ibanreq_01HX9KZMB3F7VNQP8R2WDGTBBB",
    "status": "provisioning"
  }
}

Step 5 — Check Status

Poll the status endpoint to track the flow.
GET https://crypto-sandbox.yativo.com/api/iban/status
customer_id
string
required
Your internal customer identifier.
cURL
curl -X GET 'https://crypto-sandbox.yativo.com/api/iban/status?customer_id=cus_sandbox_iban_001' \
  -H 'Authorization: Bearer YOUR_SANDBOX_TOKEN'
{
  "status": "success",
  "data": {
    "customer_id": "cus_sandbox_iban_001",
    "overall_status": "active",
    "kyc_status": "approved",
    "iban_status": "active",
    "iban": "DE89370400440532013099",
    "bic": "SSKMDEMMXXX",
    "account_holder_name": "Sandbox User",
    "currency": "EUR",
    "payout_token": "USDC",
    "payout_chain": "solana",
    "payout_address": "GY1EZGdpiJNyx2BSKq8rfTDRe5K8Bb6Cf2Bn1pdmE2o1",
    "activated_at": "2026-03-28T21:07:00Z",
    "sandbox_note": "Chiado testnet IBAN. Cannot receive real bank transfers."
  }
}

Sandbox Limitations

  • IBANs run on Chiado testnet (Gnosis testnet) via Monerium
  • Cannot receive transfers from real banks — testnet Monerium only
  • The IBAN number returned is a testnet IBAN with no real banking connectivity

End-to-End Test Script

Shell script
#!/bin/bash

BASE_URL="https://crypto-sandbox.yativo.com/api"
TOKEN="YOUR_SANDBOX_TOKEN"
CUSTOMER_ID="sandbox_iban_$(date +%s)"

echo "=== Step 1: Init onboarding ==="
curl -s -X POST "$BASE_URL/iban/onboarding/init" \
  -H "Authorization: Bearer $TOKEN" \
  -H 'Content-Type: application/json' \
  -d "{\"email\":\"test+$CUSTOMER_ID@example.com\",\"customer_id\":\"$CUSTOMER_ID\"}" | jq .

echo "=== Step 2: Submit KYC ==="
curl -s -X POST "$BASE_URL/iban/onboarding/kyc" \
  -H "Authorization: Bearer $TOKEN" \
  -H 'Content-Type: application/json' \
  -d "{\"customer_id\":\"$CUSTOMER_ID\",\"kyc\":{\"method\":\"direct_docs\",\"first_name\":\"Sandbox\",\"last_name\":\"User\",\"date_of_birth\":\"1990-01-01\",\"nationality\":\"DE\"}}" | jq .

echo "=== Step 3: Check status ==="
curl -s -X GET "$BASE_URL/iban/status?customer_id=$CUSTOMER_ID" \
  -H "Authorization: Bearer $TOKEN" | jq .

echo "=== Step 4: Request IBAN ==="
curl -s -X POST "$BASE_URL/iban/iban/request" \
  -H "Authorization: Bearer $TOKEN" \
  -H 'Content-Type: application/json' \
  -d "{\"customer_id\":\"$CUSTOMER_ID\",\"payout_token\":\"USDC\",\"payout_chain\":\"solana\",\"payout_address\":\"GY1EZGdpiJNyx2BSKq8rfTDRe5K8Bb6Cf2Bn1pdmE2o1\"}" | jq .

Testing Error Scenarios

Submit a KYC request and immediately call the IBAN request endpoint before KYC is approved. You should receive a KYC_NOT_APPROVED error.
Submit two init calls with the same customer_id to test conflict handling in your application.
Use unique customer_id values for each test run (e.g., append a timestamp) to avoid state conflicts between test runs.