Sandbox & Testing
Coinify provides a full sandbox environment where you can build and test your entire integration before going live. The sandbox mirrors production — same API, same flows, same Trade Widget — but no real money moves and no real identity verification has to be performed.
Always complete your full integration in sandbox before switching to production.
Skipping KYC in sandbox
Real KYC identity verification is not available in sandbox. Instead, you can approve an identification attempt instantly using one of the methods below.
This is only available for
individualaccount types. There is no equivalent skip forcorporateKYC (KYB). In case ofcorporateaccount testing in sandbox, reach out to your Coinify integration contact and ask to approve the sandbox account once you get to the step of receiving "Upload Documentation for KYB".
Via the Trade Widget
- Open the Trade Widget and sign up as a new
individualuser - Once on the Buy/Sell screen, open the burger menu and select My Account
- Click Verify Your Identity
- Click the Fake Identification button in the pop-up
Via the API
After signing up and authenticating a test trader, send the following request:
POST https://app-api.sandbox.coinify.com/kyc/identification-attempts
Authorization: Bearer <access_token>{
"returnUrl": null,
"state": "approved"
}A 200 response confirms the identification attempt is now approved.
Testing a Card Buy trade end-to-end
To test a full Credit Card Buy flow in the sandbox, use USDC on the Ethereum blockchain as the receiving cryptocurrency. You'll need to set up a custom USDC token in your wallet on Ethereum's Sepolia testnet — see Coinify's guide on setting this up.
Test credit cards
Use the following cards on the Sandbox Credit Card Payment Page to simulate different card payment outcomes:
| Card number | Name on card | Result |
|---|---|---|
4000000000001000 | Any name | Payment successful |
5200000000002151 | Any name | Challenge |
4000007818415900 | Any name | Do not honor |
4000005357086322 | Any name | Insufficient funds |
4000004452879855 | Any name | Stolen card |
4001888587298851 | Any name | Expired card |
For expiry date and CVV, any valid-format values are accepted in sandbox.
Fallback Credit Cards for testing if the above do not work:
| Card number | Name on card | Result |
|---|---|---|
4761344136141390 | FL-BRW1 | Payment successful (fallback if above doesn't work) |
4761344136141390 | CL-BRW1 | Challenge flow (3DS) |
4000164166749263 | FL-BRW1 | Do not honour |
5001638548736201 | FL-BRW1 | Declined |
4000128449498204 | ERR-BRW1 | Error |
Testing a Sell trade end-to-end
For a Sell trade, you'll need a bank account registered under the test trader's account. In sandbox you can use fake bank account details, as long as they follow real-world formatting rules for the country:
- The currency must be one supported by Coinify - check via the Payment Methods endpoint or directly on the Trade Widget UI, depending on your integration type.
- The SWIFT/BIC code must contain a valid 2-letter country code at positions 5–6 (e.g.
XXXXDKXX) and be 8 or 11 characters long. - The IBAN must start with a valid 2-letter country code that matches the BIC's country, be from a Coinify-supported country, and have the correct length for that country.
Tip: You can look up valid IBAN structures for any country at wise.com/gb/iban — scroll to the IBAN examples by country section.
Manually completing any trade
To test your webhook handling and trade completion flow for any type of trade (e.g. bank buy, card buy, crypto sell, etc.) without waiting for a real payment, you can force any trade in awaiting_transfer_in state to complete:
POST https://app-api.sandbox.coinify.com/trades/<trade_id>/test/complete-trade
Authorization: Bearer <access_token>//Optional body payload
{
"amount": 200.00,
"currency": "EUR",
"details": {
"account": "1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa"
}
}A 204 No Content response means the trade was completed successfully. The amount, currency, and details parameters are optional — if provided, they are validated against the trade.
If the trade is not in
awaiting_transfer_instate, or the amount doesn't match, the endpoint returns a500error.
Next steps
- Integration Options → — choose your integration path and start building
- KYC / Identity Verification → — understand the full KYC flow for production
