Test your integration

The sandbox does not call our payment partners or our identity partners. A built-in test partner answers instead. You select the answer with the values that you send, and you get the same result each time.

AreaSandboxProduction
PartnersA built-in test partner answers. No money moves. No document is read.The real payment and identity partners answer.
OutcomesYou select the outcome with the values on this page.The partner decides the outcome.
TimingSeconds.Minutes to days.

Every other behaviour is real. The sandbox validates a request exactly as production validates it, so a payload the sandbox accepts is a payload production accepts. The sandbox delivers your webhooks in the normal way.

Set up before you test

  1. Send your sandbox key in the api-key header, to https://sandboxapi.fincra.com.
  2. Create a sender with currencyClassification set to CURRENCY_CLASSIFICATION_FCY. The sandbox verifies an FCY sender and an ALL sender only.
  3. Upload each document the sender needs. Verification starts by itself after the last document arrives.
  4. Create the counterparty.
  5. Send the payout.

Use a JPEG, a PNG or a PDF. The sandbox does not read the file content, so any valid file of the right type is enough.

Choose the sender outcome

The last character of idNumber selects the verification result. Use any value for the other characters.

An individual sender

idNumber ends withFinal verificationStatusWhat it exercises
1rejectedA declined check. The warning codes are ID_DATA_MISMATCH and NAME_VERIFICATION_FAILED.
2in_reviewA manual review. The warning code is ADDRESS_MISMATCH.
3approvedAn approval where the sanctions screen returns a politically-exposed-person hit. The internal risk rating becomes high, and you still receive approved.
Any other characterapprovedA clean approval. Use this for your success path.

A business sender

idNumber ends withFinal verificationStatusWhat it exercises
1rejectedThe company check is declined.
2in_reviewThe company check needs a manual review.
4in_reviewThe company passes, but a document is not readable. Use this if you show feedback for each document.
Any other characterapprovedA clean approval.
🚧

The last character must be a digit

An identification number that ends with a letter is always approved. RC1234567A approves. Put the digit last: RC1234A7 ends with 7 and approves, RC1234A1 ends with 1 and is rejected.

To run a sender test again. You can upload a document only while the sender is pending, and replace one only while the sender is rejected. A replacement returns the sender to pending and starts the verification again, so a rejected sender is the one to reuse. A sender at in_review waits for the compliance team and accepts no upload and no replacement. Create a new sender to carry on.

Choose the payout outcome

The last two decimal places of the destination amount select the payout result. Use any value for the whole-number part.

Amount ends withFinal statusWhere it fails, and what you receive
.01failedThe partner accepts the payout, which then fails at settlement. You receive the acceptance webhook first, then the failure.
.02cancelledThe partner accepts the payout, which is then cancelled at settlement.
.03processingThe payout never settles. The status stays processing for about five minutes, then polling stops. Use this to test a payout that reaches no final status.
.04failedThe partner rejects the payout at submission. You receive no acceptance webhook, only the failure.
.05failedSubmission succeeds, then the partner rejects the payout at the acceptance step.
.06failedThe China declaration is rejected. CNY and CNH only. See below.
Any other valuesuccessfulThe payout settles normally. Use this for your success path.
{
  "amount": 250.01,
  "destinationCurrency": "CNY"
}
{
  "amount": 250.00,
  "destinationCurrency": "CNY"
}
🚧

Two decimal places, on the destination amount

The sandbox rounds to the nearest minor unit before it reads the scenario, so 250.015 becomes 250.02 and the payout is cancelled instead of settled.

The scenario comes from the destination amount, the amount the beneficiary receives. On a cross-currency payout the rate decides the destination amount, so you cannot control the decimal places and you get the default successful. Set the destination amount when you need a specific outcome.

The China declaration step

Fincra declares a CNY payout to the regulator before the payment. No other corridor has this step, and the sandbox reproduces it so you can see every state your integration meets.

  1. You send the payout. The status becomes processing.
  2. Fincra submits the declaration and waits for the outcome.
  3. The partner accepts the payout, which then settles as the amount above specifies.

Send an amount ending in .06 to have the declaration rejected. The payout fails, the partner never accepts it, and the declaration is the reason.

📘

The China beneficiary rules apply in the sandbox

A CNY beneficiary name needs Chinese characters, surname first, with no space. An individual beneficiary needs a phone number. The sandbox validates these exactly as production does, so get these values right here.

Counterparties in the sandbox

Status at creationMeaning
activeThe channel needs no registration. The counterparty is ready at once.
pendingThe registration is running. In the sandbox it becomes active in a few seconds, and you receive a counterparty.updated event.

A counterparty you block stays blocked, in the sandbox as in production, and every payout to it is rejected. Use a spare counterparty for that test.

How long each step takes

These times are approximate, and the sandbox is deliberately faster than production. Poll the record or wait for the event. Do not build around a fixed delay.

StepSandboxProduction
An individual verification, from the last document to a final statusA few secondsMinutes
A business verificationUnder 10 secondsMinutes to hours
A counterparty registrationSecondsMinutes to 48 hours
A payout settlementSecondsMinutes to days
A payout that never settles, .03About 5 minutes10 days

The webhooks you receive

The sandbox delivers a webhook to your registered callback URL exactly as production does. The event names and the payload shape are the same, so test your handler here.

EventSent when
sender.updatedA verification reaches approved, rejected or in_review.
counterparty.updatedA registration completes, with a success or a failure.

A payout event follows your existing payout webhook configuration, which the sandbox does not change. Set a callbackUrl on the sender or on the payout to replace your registered URL for one request, which helps when you test against a tunnel.

Ten cases to run for China

#CaseExpected result
1A business sender whose idNumber ends in any digit except 1, 2 or 4, with all four documents.sender.updated arrives with approved.
2A business sender whose idNumber ends in 1.rejected. Then replace a document and confirm the sender returns to pending.
3A business sender whose idNumber ends in 4.in_review. Confirm your code waits and does not treat it as a failure.
4A Chinese business counterparty with a valid 18-character code.counterparty.updated arrives with active.
5A Chinese individual counterparty with a resident identity card number and a +86 phone number.active.
6A counterparty name in Latin characters.Rejected at creation with a validation error.
7A goods_purchase payout with the invoice attached, destination amount ending .00.processing, then successful.
8A payroll_salary payout with one of the two documents.documents_required, then processing after you upload the second.
9A payout with a destination amount ending .06.failed, with the China declaration as the reason.
10A payout with a destination amount ending .03.Stays processing for about five minutes. Confirm your code does not treat it as settled.

Also run three request-level failures: a payout with paymentScheme absent, three orders whose CNY amounts do not add up to the payout amount, and a repeated customerReference.

What the sandbox cannot tell you

Test these against production, or ask us before you go live.

  • Whether a real document passes. The sandbox reads no file, and never checks image quality, an expiry date or a name match. Production can decline a document the sandbox approved.
  • Whether a real person or company passes screening. Every sanctions and adverse-media result here is simulated.
  • A partner-specific rejection. Each partner has its own rules for a name, an address and a payment reference. The sandbox applies our validation, not theirs.
  • A real settlement time. The sandbox times say nothing about the true speed of the corridor.
  • An exchange rate. You cannot trade a sandbox rate.

If something does not work

What you seeThe cause, and the correction
The sender stays pending.Verification starts only when every required document is present. Check the list for that sender's idType. An individual without a passport also needs the back of the document.
A message says you cannot upload a document.An upload is accepted only while the sender is pending. The message gives the current status. Use the replace endpoint for a rejected sender.
Your chosen outcome did not happen.For a sender, check the last character of idNumber is a digit. For a payout, check the destination amount has exactly two decimal places, and that you set the destination amount rather than the source amount.
The payout was rejected before submission.That combination of currency and payment scheme has no route. Production behaves the same way. Ask us which corridors your account has.
An LCY sender needs no document upload.The sender was created as LCY, and an LCY sender is never verified. Create it with CURRENCY_CLASSIFICATION_FCY.

Before you go live

  • Your sender is approved and your counterparty is active.
  • You send senderId, paymentScheme and paymentDestination on every payout.
  • You send additionalPayoutDetails in the shape the purpose selects, with order amounts in CNY.
  • Your customerReference is unique, and you reuse it on a retry.
  • You handle documents_required and upload the rest.
  • You handle a payout that stays processing, and one that fails after acceptance.
  • You match each webhook on the payout reference.
  • You ran the ten cases above.

Did this page help you?