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 |
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.
