How the pieces map to Deepgram
| Ringup piece | On Deepgram |
|---|---|
create_checkout | An HTTP POST your bridge makes when the order is confirmed |
| The transfer target | The transfer_to SIP URI the Checkout Session returns |
| The transfer | A <Dial><Sip> on your bridge’s telephony (Twilio) to the Ringup SIP URI |
| The result | A checkout.completed webhook to your server |
Prerequisites
- A running Deepgram Voice Agent behind your own audio bridge (Twilio media streams or similar).
- Your bridge’s telephony account (the number the call comes in on).
- A Ringup account and API key. Test mode works out of the box on a shared sandbox. See Testing.
Step 1: Create a Checkout Session in your bridge
When the agent signals the order is confirmed (for example via a Deepgram function call your bridge handles),POST to Ringup’s create_checkout endpoint with your Ringup API key. There
is no platform tool to register; this is a plain HTTP call from your bridge.
payment_required is none, do not transfer: finish the call normally. Otherwise transfer.
Step 2: Transfer on your bridge
Have your agent speak one bridge line (anInjectAgentMessage such as “One moment, connecting
you to secure payment”), then transfer the caller on your telephony. On Twilio, redirect the
call to TwiML that dials the Ringup SIP URI, carrying the Checkout Session id:
Step 3: The return, and the result (the webhook)
Ringup answers the transferred call, recognizes the Caller, charges the saved Card, and texts a receipt. A first-time caller with no saved card is texted a secure pay link instead. Then the call ends one of three ways, from what you passed in Step 1:return_toset: Ringup<Dial>s the caller back to your bridge with the outcome in SIP headers (X-Payment-Status,X-Confirmation), so your agent resumes and closes the call.success_message/failure_messageset (noreturn_to): Ringup reads your line and ends.- Neither: Ringup reads a short default and ends. The receipt is the proof.
return_to that cannot connect falls back to reading your success_message (or the default),
so a failed return never strands the caller. Either way, your server reconciles from a webhook:
order_id you passed, store the payment_id, and flip your order to paid. See
Webhooks for the full catalog, statuses, signature verification, and
idempotency.
Validation status
Because your bridge owns the telephony, the transfer is standard<Dial><Sip> on your provider.
Ringup’s hosted transfer endpoint is rolling out; confirm access in your Ringup dashboard before
relying on this in production. The recognition, charge, receipt, and webhook behavior is the
same payment path Ringup runs everywhere.