Skip to content
PerionPayments

Sandbox scenarios

Test failures before your customers find them.

Use these test mobile numbers in your own Sandbox requests to reproduce approvals, declines, delays, and unknown outcomes without moving money. They work in either currency: send USD or ZWG. The dashboard drills run in US dollars.

Scenario catalog 23 Jul 2026

Test numbers for your own requests

13 test mobile numbers · use them with rail: "sandbox"
Mobile numberScenarioStatus sequenceStatusCode
+263 77 000 0001Instant approvalThe customer approves the prompt on their phone, and the payment is Paid within seconds.requires_action → succeededsucceeded—
+263 77 000 0002Insufficient fundsThe customer's wallet doesn't have enough money, so the payment fails and no money moves.requires_action → failedfailed—
+263 77 000 0011Provider declineThe provider declines the payment, so it fails and no money moves.requires_action → failedfailedprovider_declined
+263 77 000 0012Blocked by a risk checkA risk check blocks the payment, so it fails with its own failure code and no money moves.requires_action → failedfailedblocked_by_risk
+263 77 000 0007Slow providerThe provider doesn't answer in time. The payment shows Confirming until our status check finds it Paid.processing → succeededsucceeded—
+263 77 000 0013Long confirmationThe provider keeps saying the payment is still in progress. It stays Confirming through several status checks, then turns Paid.processing → processing → processing → succeededsucceeded—
+263 77 000 0004Late approvalThe customer takes a while to approve, so the payment shows Confirming before it turns Paid.requires_action → processing → succeededsucceeded—
+263 77 000 0005Duplicate confirmationThe provider confirms the same payment twice. We record it once: one Paid payment and one payment_intent.succeeded event.requires_action → succeededsucceeded—
+263 77 000 0006Amount mismatchThe provider reports taking a different amount from the one you asked for, so we hold the payment for review instead of marking it Paid.requires_action → processingprocessingmanual_review
+263 77 000 0009Customer declines the promptThe customer declines the prompt on their phone, so the payment is canceled and no money moves.requires_action → cancelledcancelled—
+263 77 000 0010Reconciliation mismatchThe payment is Paid, but it's missing from the provider's daily report, so reconciliation flags it for follow-up.requires_action → succeeded → exception_openedsucceededsucceeded_with_exception
+263 77 000 0003Customer doesn't respondThe customer ignores the prompt. After 2 minutes the provider confirms no money was taken, and the payment expires.requires_action → expiredexpired—
+263 77 000 0008Provider outageThe provider is down, so the API answers 503. Nothing reaches the customer's phone and no money moves.requires_confirmationrequires_confirmationrail_unavailable

Drills you start from the dashboard

These drills build on an instant approval, so a test number alone cannot start them. Run them from Developers → Sandbox scenarios.

2 dashboard drills
DrillStatus sequenceStatusCode
Refund lifecycleA few seconds after the test payment is Paid, we refund it in full. The provider accepts the refund, then confirms it, and the payment reads Refunded.succeeded → refund_processing → refundedsucceededrefunded
Webhook outageThe payment is Paid, but the first three deliveries of its event fail on our side, without calling your endpoint. You then replay the event, and it reaches your endpoint.succeeded → delivery_retrying → replay_deliveredsucceeded—Add an enabled Sandbox webhook endpoint that receives payment_intent.succeeded first.

Agents can run these scenarios too.

Our Model Context Protocol (MCP) endpoint, POST /mcp, runs in our staging sandbox only, with its own credential; its tools read this catalog, run a scenario, and read the resulting payment and events (see the tools). Invited merchants can ask Integration help for access.

A Sandbox pass doesn't approve Live.

For each run, record the scenario, the payment ID, and the statuses you observed. A passing sandbox run never approves live access on its own.

Next: Certification