Skip to main content

Sandbox success & failure

Local fiat sandbox outcomes are deterministic. Use the values below so you can force order.settled or order.failed without real money movement. Sandbox forces outcomes with the test values in the tables below (1111111111 / 0000000000, and +{countryCode}1111111111 / +{countryCode}0000000000). Treat them as Element Pay sandbox identifiers only.
Sandbox-only — never send these on live. Do not put 1111111111, 0000000000, or fake +…1111111111 / +…0000000000 phones on production quotes. Live must use the real customer mobile money MSISDN or bank account. Sending sandbox test account numbers in production will fail or mis-route settlement.

Two different “account numbers” (don’t mix them up)

Sandbox “success/failure” tables below apply to the customer identity fields on the quote, not to inventing deposit destinations.

Rules that apply on every quote

Force success vs failure

Mobile money (payment_method.phone_number)

UG smoke (success-oriented): +256111111111 — confirm via catalog for your key. Copy the same MSISDN onto customer.phone when the corridor expects both fields.

Bank (payment_method.account_number)

Do not invent account numbers (e.g. 0123456789). On sandbox the order can sit in processing / pending forever with no terminal webhook.

OffRamp crypto deposit (skip sending on-chain)

Retail (customer_type omitted or retail) — sandbox auto-credit uses customer.name: Without Successful in retail customer.name, OffRamp stays in pending_settlement (awaiting crypto on the accept deposit address) rather than auto-settling. Do not try to settle sandbox OffRamp by sending testnet crypto to that wallet — use the Successful name trigger. Real on-chain deposits are for production only. Institution (customer_type: "institution" / customer.type: "institution") — sandbox auto-credit uses customer.business_name (institutions have no personal name): Without Successful in business_name, OffRamp stays in pending_settlement. Do not send testnet crypto to settle sandbox OffRamp.

QA profiles (suggested)

Field shape (not magic values)

Retail: always send valid-looking KYC even in sandbox: email, address, dob (mm/dd/yyyy), id_number, id_type. Missing required fields → 422 from order-requirements, not a settlement failure. Institution: same quote body shape; required customer fields are uid, business_name, business_id, and email (no DOB / national ID / personal name). business_id is the legal registration or tax id of the paying business, not an Element Pay console id. Bank payee is payment_method.account_name + account_number + network_id (payee may be a different company). See Sandbox test payloads and Kenya.

After accept

  1. Prefer webhooks (order.processingorder.settled / order.failed).
  2. Backup poll: GET /partner/orders/{order_id}.
  3. Keep quote_id, order_id, and webhook bodies for each scenario before asking for production.

Copy-paste payloads

See Sandbox test payloads and corridor pages (Kenya, Nigeria) for full curls using these values.