Skip to main content
Ringup adds identity and payments to a voice agent: a returning caller is recognized by phone number and pays with a saved card, settling on the merchant’s own processor, with no card number spoken. This quickstart runs that whole arc in test mode with your own phone number: no real money, and nothing faked.

Before you start

1

Get a test key

Sign in to the dashboard and create a key under API Keys. It starts with rk_test_ and works against the real API with no real money.
2

Add a test merchant

Under Merchants, add one. In test mode it is backed by Ringup’s test processor account automatically: no merchant signup, no OAuth. Copy its merchant_id (mch_…).

The arc

1

Recognize a caller

Ringup recognizes a caller from their phone number, which arrives the instant the call connects. Try it with your own number:
Response
known: false is the ordinary first call, not an error. By the end of this page the same request returns your name. See Caller Identity.
2

Open a Checkout Session

When the order is ready to pay, create a Checkout Session for the caller at your test merchant. It resolves the amount, applies the merchant’s payment policy, and returns the caller’s chargeable cards:
Response
cards is empty: this caller has nothing saved yet. That is exactly what send_link is for.
3

Save a card the way callers do

Text the pay link to the caller (you):
Your phone gets an SMS. Open it, enter a name and email, and pay with the test card 4111 1111 1111 1111, any future expiry, any CVC. The page saves the card and settles the payment against the test processor, and your server (once you register a webhook) receives checkout.succeeded.
4

Now you are a regular: charge the saved card

Run identify again with the same number:
Response
Open a fresh Checkout Session and cards now carries the Visa you just saved. After the caller agrees out loud, charge it:
Response
That is the whole in-agent payment path: identify at the greeting, create_checkout when the order is ready, charge when the caller says yes. Only succeeded moved money. Open the session with the merchant’s order_id and it comes back on the charge, the number the agent reads out as the confirmation. See Charge.
5

Add it to your agent

You integrate one of two ways, and every platform guide documents both:
  • In your agent (API). Keep the caller in your own agent and add the endpoints you just called. Nothing transfers, and no card data touches your agent. The flexible path.
  • Hosted call transfer. Your agent transfers the live call to Ringup’s payment line (transfer_to, or transfer_to_number for platforms that only dial numbers), so you write no payment logic. The easiest path.
Pick your platform in Developer integrations: Vapi, Custom (REST), Retell, ElevenLabs, Deepgram, LiveKit, OpenAI Realtime, Pipecat, and Twilio ConversationRelay.
There is no per-merchant setup in your code: you pass merchant_id (resolved from the number the caller dialed) on every call, and each merchant activates for payments the moment its processor connects. Until then its sessions come back payment_required: "none" and the call runs normally.