Skip to main content
Vapi tests against Ringup’s shared sandbox, the same one every integration uses. Read Testing first for what the sandbox is, the merchant and caller fixtures, and the test card. This page covers the Vapi-specific tooling: the ringup-vapi-init commands that wire demos and rehearsals for you.

The sandbox test card

Every sandbox payment runs on one card. When a sandbox call texts a pay link, enter this card:
FieldValue
Card number4111 1111 1111 1111
Expiryany future date (for example 12/34)
CVVany 3 digits (for example 111)
ZIP / postal codeany (for example 94103)
To test a declined payment, use 4000 0000 0000 0002. It always declines, so you can exercise your failure path and the checkout.failed webhook.
The recognized test caller +14155550142 already has this card on file, so a call from that number charges the saved card without a link.

Three tiers of testing

1

Canned demos

npx ringup-vapi-init test builds a complete demo squad in your org: sandbox merchant, demo caller, try-saying script covering the required and optional branches. Zero contact with anything you own; test --clean removes it.
2

Rehearsal on a private line

npx ringup-vapi-init stage wires a disposable copy of your own agent to a free test number. You hear your actual agent, your actual prompts, and the full payment flow on a real phone call, before anything you own changes.
3

Post-go-live verification

npx ringup-vapi-init check reads the wiring from the Vapi API (squad structure, tool shapes, live state, transcriber model names) and is the source of truth when the dashboard renders squad wiring incompletely.

Reading test results

The charge response is ground truth, not the assistant’s words. Only a succeeded charge result with a payment id and confirmation code proves a payment happened. An agent can narrate success it did not have; the API result cannot. Text-chat smoke tests cannot prove voice. Vapi chat pipelines assemble handoffs differently from voice pipelines. Validate squads with a voice call.