Biklo for developersTESTsandbox-api.biklo.comchange

Setting up your sandbox payout account

This is the one step you cannot do through the API. It takes about five minutes, once, and everything after it is API work.

Why there is a browser step#

Payouts run on Stripe Connect. Before Stripe will send money to a bank account it verifies who owns it — legal identity, company registration, sometimes a document photo. Stripe collects that directly, in a hosted flow, and Biklo is deliberately not in that path: we would rather not handle identity documents at all, and you would rather not be the system that transmits them.

So there is no POST /v1/wallet/onboarding and there never will be. A human signs in once, finishes verification, and the account is live from then on.

The sandbox uses real Stripe test mode, not a simulation. Test-mode onboarding is the same flow as production with test data, so what you build against is what production does.

Before you start#

Your sandbox seller account must exist — normally because someone asked us to import your company into the sandbox. Check with:

curl https://sandbox-api.biklo.com/v1/wallet/account \
  -H "Authorization: Bearer $BIKLO_TEST_KEY"

"onboarding_status": "not_started" and "has_account": false means you are in the right place.

Step by step#

1. Sign in to the sandbox seller dashboard at https://sandbox.biklo.ro with the credentials you were given. This is the sandbox, not the live site — check the address bar.

2. Open the wallet section and start payout setup. You will be sent to Stripe.

3. Fill the form with Stripe's test data. Real details are not needed and should not be used. Stripe accepts these in test mode:

Field Test value
Phone 000 000 0000
Email anything, e.g. [email protected]
Date of birth 01 / 01 / 1901
Address line 1 address_full_match
City / postcode any valid values for the country
ID number (RO: CNP) 000000000
Last 4 of SSN (US only) 0000
Bank account (RO, RON) RO49AAAA1B31007593840000
Bank account (test IBAN, EUR) DE89370400440532013000

The address value address_full_match is Stripe's magic string that passes verification instantly. Using a real-looking address instead usually lands the account in pending for a while, which is a slower way to reach the same place.

4. If you are asked to upload a document, use Stripe's test file: any image works in test mode, or use the "successful verification" test document Stripe offers.

5. Come back. Stripe returns you to the dashboard.

Check it worked#

curl https://sandbox-api.biklo.com/v1/wallet/account \
  -H "Authorization: Bearer $BIKLO_TEST_KEY"

You want:

{
  "data": {
    "has_account": true,
    "can_withdraw": true,
    "onboarding_status": "complete",
    "payouts_enabled": true,
    "requirements": { "currently_due": [], "past_due": [] },
    "next_step": { "action": "none", "message": "This account can receive payouts." }
  }
}

If can_withdraw is still false, read requirements.currently_due — those are Stripe's own field names for what is still missing, and they are the exact list Stripe is waiting on. onboarding_status: "in_review" means everything was submitted and Stripe is checking; that clears on its own, usually in seconds in test mode.

Match the bank account to the currency#

The single most common way a working setup still fails to pay out. Stripe pays a balance to a bank account in that balance's currency. A RON balance and a EUR-only bank account produces a payout that is accepted and then silently never arrives.

If your sandbox seller trades in RON, add a RON bank account. If they trade in several currencies, add one per currency. GET /v1/wallet/account lists the bank accounts Stripe holds, so you can check this without leaving your own tooling.

Then everything else is API#

# Give yourself an order, walk it to delivered, and close the return window
curl -X POST https://sandbox-api.biklo.com/v1/sandbox/orders \
  -H "Authorization: Bearer $KEY" -H "Content-Type: application/json" \
  -d '{"product_id": 237233}'

curl -X POST https://sandbox-api.biklo.com/v1/sandbox/orders/716/advance \
  -H "Authorization: Bearer $KEY" -H "Content-Type: application/json" \
  -d '{"status": "delivered"}'

curl -X POST https://sandbox-api.biklo.com/v1/sandbox/orders/716/advance \
  -H "Authorization: Bearer $KEY" -H "Content-Type: application/json" \
  -d '{"status": "settled"}'

settled closes the buyer's return window, which in production is a fourteen-day wait for a company seller. The money then moves through the real states — and if onboarding is not finished, it lands in blocked instead of available, which is exactly what production does.

See Wallet and payouts for the rest.