Skip to main content
Add card-on-file payments to a Pipecat voice pipeline two ways. Hosted transfers the call to a Ringup payment line at payment time; Ringup runs the whole payment. In your agent keeps the caller in your pipeline; your code calls Ringup’s tools to recognize the caller and charge the saved card, with no transfer. Either way a recognized caller never reads a card aloud, so no card data touches your pipeline.

Prerequisites

  • A running Pipecat pipeline with telephony (a Twilio/Telnyx/Plivo/Exotel WebSocket serializer, or Daily PSTN/SIP dial-in).
  • The telephony account that owns the inbound call leg, and a Ringup API key.

Set up

Your pipeline creates a Checkout Session and transfers the live call to it, like redirecting to a hosted web checkout. Ringup takes payment on its own line and returns the caller if you ask it to.
The wiring is code in your pipeline; only your account side (API keys, the webhook endpoint, go-live) lives in the dashboard.
1

Recognize the caller at the greeting

Call identify from your pipeline at the greeting, not at payment (plain HTTP, like the checkout call below). The caller’s number arrives the instant the call connects; for a returning caller identify returns their name, so your agent greets them by name. Chargeable cards come later, from the Checkout Session. See Recognize at the start of the call.
2

Create a Checkout Session when the order is confirmed

Register a function on your LLM (FunctionSchema) that the model calls once the order is confirmed, and in its handler POST to Ringup with your API key. If payment_required is none, do not transfer: finish the call normally. Otherwise transfer to the returned transfer_to.
3

Transfer on your transport

Have the agent speak one short bridge line (“One moment, connecting you to secure payment”), then transfer the caller on your telephony. On a Twilio transport, redirect the call to TwiML that dials the Ringup SIP URI, carrying the checkout_session_id:
On Daily PSTN/SIP, use the equivalent SIP transfer to the same URI.
4

Register your webhook endpoint

In the Ringup dashboard, under Webhooks, add your HTTPS endpoint and copy the signing secret. Your code verifies the signature and handles checkout.succeeded. See Webhooks.
5

Test it, then go live

Use your rk_test_ key, call your agent from your own phone, and order: on your first call you are texted a link and pay with the test card 4111 1111 1111 1111 (any future expiry, any CVC); on the next call the payment line recognizes you and charges the saved Visa ending 1111. Expect the payment line to read a confirmation code and a test-mode checkout.succeeded at your endpoint. Swap in your rk_live_ key to go live.
Before you go live: add the Connect button to your dashboard. Wiring the payment tools into your agent does not, by itself, let any charge settle. Each merchant must first connect their own payment processor, from a button you embed on your merchant-facing dashboard:
That is your publishable key, not your secret one. Ship it alongside this integration so a merchant can connect the moment they are ready; until they do, the payment layer stays inaudible on their calls, so going live early is safe. Button options and the connect flow: Payment providers.

Next steps

Testing

Test mode, the test card, and the flow to run a full payment.

Webhooks

Reconcile every payment from one signed event on your server.