Prerequisites
- A Vapi agent (or squad) you already run
- Your Vapi API key (private key)
- A Ringup account. Test mode works out of the box on a shared sandbox, so there is nothing to connect. See Testing.
Step 0 (optional): Talk to a demo first
test --clean. Nothing about the demo touches anything you own.
Step 1: Provision
- Your Vapi private key (hidden input; used for these API calls, never stored).
- What to add payments to:
- (a)ssistant: pick your agent from a list. Ringup assembles the squad around it.
- (s)quad: pick the squad, then pick which member confirms the order. Ringup builds a new squad with your members referenced live, plus the payment and wrap-up steps; your original squad keeps running untouched.
- (m)anual: Ringup provisions only the pieces and prints the wiring steps, for platforms that manage their own squads and templates (see Manual wiring below).
| Object | What it does |
|---|---|
| Payment step | Silently checks whether payment is needed for THIS purchase, then takes it, offers it, or says nothing at all. Inherits your agent’s voice, model, and transcriber. |
| Wrap-up step | Your own agent in wrap-up mode: its prompt verbatim with only the task replaced. It announces success, reads back the payment confirmation number, thanks the caller, and ends the call. |
Five ringup_* tools | payment_policy, identify, charge, payment_status, send_link: static tools against Ringup’s API, resolved server-side per call. The model never types a phone number or merchant id. |
| A new squad | Your agent (referenced live) -> payment step -> wrap-up step. |
Step 2: Rehearse on a private line
- A staging twin: a byte-copy of your order-confirming member with the two go-live changes baked in. Your real assistant is untouched.
- A rehearsal squad: twin -> payment step -> wrap-up step. Only the part go-live changes is rehearsed; the rest of your squad runs identically before and after, so it is not copied.
- A free canary number pointed at that squad, ready to call the moment the command prints it.
stage after
any fix (it replaces the rig).
Step 3: Go live
- Points your phone number at the squad. Number first on purpose: a caller landing in the seconds mid-switch simply gets your current payment-free flow. (The reverse order strands callers with an agent reaching for a payment step that is not there yet.)
- Makes exactly two changes to your assistant: appends the
handoff_to_Paymenttool to its toolIds, and appends one line to its prompt (hand off once the order and name are confirmed).
~/.ringup/vapi.json, so these commands need no flags;
flags override for scripting.)
Step 4: Verify
check verifies the entire wiring from the API: squad structure, payment and wrap-up
configuration, the handoff tool shape, live/not-live state, and that every transcriber
model name is a known-good value (Vapi accepts typos silently and they only fail at
runtime).
Vapi’s dashboard does not render squad-scoped wiring or apiRequest tool names; the squad
canvas may show “No handoff tools configured” for working wiring.
check reads the API and
is the source of truth.The call flow, on every call, for every merchant
not_required state above).
Manual wiring (platforms with their own squad templates)
Pick (m)anual in the CLI. Ringup provisions the payment step, wrap-up step, tools, and a saved handoff tool, creates no squad, and prints the ids plus the wiring rules:- Add the payment and wrap-up members to your squad’s
membersarray (plain references). - Attach the printed handoff tool id to the member that confirms the order, by appending it
to that assistant’s
model.toolIdsin your own template. Keep your existing toolIds: a PATCH replaces the wholemodelobject. Note: memberassistantOverridescannot deliver tools on voice calls (toolIds are ignored; inline tools reach chat only); the saved assistant is the only wiring that works on voice. - Append the printed handoff line to that member’s prompt.
- Never hand back to your greeter after payment; the payment step exits to wrap-up on its own, and the wrap-up ends the call.
RINGUP_INIT_RESULT JSON line at the end is machine-readable, so your own provisioning
scripts can consume it and template the ids across many squads.
FAQ
Do I write a payment prompt?
Do I write a payment prompt?
No. The payment step ships pre-validated and inherits your agent’s voice and model. You
change nothing about how it works.
How does Ringup know the caller and the business?
How does Ringup know the caller and the business?
Server-side: the caller number and the dialed number arrive on trusted headers set by
the platform, never typed by the model, so neither can be spoofed or hallucinated. See
Caller and merchant identity.
What if Ringup is unreachable mid-call?
What if Ringup is unreachable mid-call?
The handoff fails neutrally (“Give me one second.”) and your agent continues. The
scripted line never asserts an outcome, so a caller is never told payment happened (or
was not needed) when Ringup could not be reached.
What does a merchant have to do?
What does a merchant have to do?
Connect their payment processor to Ringup once. Until they do, their calls behave
exactly as they do today; the moment they connect, payment starts happening on their
calls with no agent changes.
Why does the squad canvas say no handoff tools are configured?
Why does the squad canvas say no handoff tools are configured?
Vapi’s dashboard does not render squad-scoped wiring or apiRequest tool names. The
wiring is real;
ringup-vapi-init check reads the API and is the source of truth.