Take phone payments in Vapi

Ringup ships a pre-built payment step your Vapi agent hands the call to, natively, when it is time to pay. It recognizes returning callers by phone number, takes payment on the merchant’s own payment processor, and your own agent wraps up the call. Three steps, fully reversible.

The problem

Taking payment on a Vapi call

Your Vapi agent can take an order. Collecting payment is the hard part. Reading a card number aloud is clumsy and drags you into PCI scope, and telling the caller to "pay online later" loses the sale.

Ringup adds payment to the call itself, like a checkout that remembers the customer. A returning caller is recognized by phone number and pays with their saved card in one sentence; a first-time caller is texted a secure link and is remembered next time. Charges settle on the merchant's own payment processor, and no card number is ever spoken.

Two ways to integrate on Vapi

Native handoff, or call transfer

Native handoff

Vapi's squads let assistants hand the same call to each other silently. Ringup's payment step is one more specialist in your squad. When the order is confirmed, your agent hands off natively, in the same voice, with no transfer: the payment step creates a Checkout Session, recognizes the caller, and charges the saved card, then a wrap-up built from your own agent's prompt announces the confirmation. This is the most seamless option on Vapi, and it is one CLI command to wire.

ONE CALL · YOUR AGENT’S VOICE THROUGHOUT1Your agentRecognizes the caller,takes the order.“one moment”2Ringup payment stepCharges the saved card,no card read aloud.3Wrap-upYour agent announcesthe confirmation.

Call transfer

Prefer one integration you can reuse across platforms? Your agent creates a Checkout Session and transfers the live call to a Ringup payment line, exactly as a hosted web checkout redirects the browser. Ringup takes payment, then optionally transfers the caller back to your agent to finish in your own voice. Same Checkout Session, same webhook; only the front door differs.

LIKE A HOSTED WEB CHECKOUT, OVER THE PHONE1Your agentRecognizes the caller,confirms the order.2Checkout SessionRingup returns whereto send the call.3Ringup payment lineThe call transfers here;charges the saved card.optional4Back to your agentcheckout.completed;order marked paid.

Ready to build? The developer docs have the exact setup for each mode, the step-by-step, and the API reference.

Read the developer docs →
FAQ

Questions

Which should I use, native or call transfer?
Native handoff on Vapi, unless you are standardizing one integration across several platforms. Native keeps the caller in your agent's own voice the whole time and is a single CLI command. Call transfer is the universal path and reuses the same Checkout Session, at the cost of a brief handoff to a Ringup payment line.
Do I have to write a payment prompt?
No. In native mode the pre-built payment step handles it; you add one handoff line. In call transfer mode you make one tool call to create a Checkout Session and transfer the call. Either way, you never build a payment flow.
How does Ringup know the caller and the business?
Server-side, from trusted headers the platform sets. The caller number and the dialed number never pass through the model, so neither can be spoofed or hallucinated.
Where does the decision to take payment live?
With Ringup. When you create a Checkout Session, it returns payment_required as required, optional, or none, resolved per purchase from the merchant's own rule. A merchant changes that rule with no redeploy, and a merchant who has not connected a processor yet simply gets a payment-free call (the none state).
Who confirms the order to the caller?
Your own agent. In native mode the wrap-up step is built from your agent's prompt; in call transfer mode the caller is transferred back to your agent to close. Ringup confirms only that money moved, grounded in the charge result.
What happens after payment?
Ringup texts the caller an SMS receipt and sends your server a checkout.completed webhook with the payment id and confirmation, so you mark the order paid. See the developer docs for the webhook shape.
Can the agent recognize a caller before payment?
Yes. Call identify at the start of the call; it needs only the caller's phone number. For a returning caller it returns their name and saved card, so your agent greets them by name and skips re-asking for what it already knows, like the name for the order. Recognition happens at the greeting, separate from and earlier than taking payment. On Vapi this is wired for you.

Put payments in your Vapi agent

One CLI command. Three steps. Your returning callers never touch their card again.

Request demo
npx ringup-vapi-init