Add Ringup to a Vapi agent from the dashboard. No code: wire it in Test on a copy of your agent, then repeat in Live on your real agent.
Add pay-by-phone to a Vapi agent in a few clicks. Ringup attaches one payment tool and hands you one prompt line to paste. No payment code.You do this twice: in Test on a copy of your agent, then in Live on your real agent.
Make sure the dashboard is in Test mode (top-right toggle).
1
Duplicate your agent
In Vapi, duplicate your live agent and name the copy something like Agent (Ringup test). You wire this copy, not production.
Vapi: duplicate your agent and name the copy Agent (Ringup test).
2
Connect your platform
In the Ringup dashboard, open Voice integrations, choose Vapi, and paste your Private API key. Ringup lists your agents to check the key, then creates one payment tool on your account.Then pick what your agent sends at hand-off:
The order id it creates in the point of sale. Ringup reads the total from that order, so tax and modifiers are always right and the payment lands on the real ticket.
The total it works out itself. For agents with no point-of-sale order.
Both, for a mixed fleet. Each call sends whichever it has; when an order id is present it wins.
Voice integrations: choose Vapi, paste your key, pick what the agent sends.
3
Choose the agent
Pick your test copy and click Add payment. Ringup attaches one tool to it and changes nothing else.
Pick the test copy and click Add payment.
4
Add the prompt line
Paste the one system prompt line Ringup shows into the test copy’s system prompt in Vapi. That is the whole change on your side.
Copy the prompt line into your Vapi agent's system prompt.
Do not add the tool by hand in Vapi. Ringup attaches it with the right server URL and secret. A hand-made tool is not bound to your account and will fail at call time.
5
Connect a test merchant
A call can only take payment for a merchant, so create one in Test first. In the dashboard, open Merchant integrations and create a test merchant; in test mode it is automatically backed by Ringup’s test processor account, so there is no OAuth step and no real processor account to connect. Without one, the payment layer stays inaudible and the test call has nothing to charge. See Merchant integrations.
6
Place a test call
Call the test copy from your own phone and place an order. It charges the test merchant you just created. On your first call you are texted a link and pay with the test card 4111 1111 1111 1111; on your next call you are recognized and pay on the saved Visa ending 1111. No real money moves. Watch it land in Logs.
Switch the dashboard to Live and run Connect your platform, Choose the agent, Add the prompt line again, this time on your production agent, no copy.
Switch to Live and wire your production agent the same way.
2
Let your merchants connect
Real calls take payment only for merchants who have connected their own processor. Embed the one-line Connect button so each merchant self-connects Square or Clover. Until a merchant connects, the payment layer stays inaudible on their calls, so going live first is safe. See Merchant integrations.
The hand-off is never silent. Before the leg switches, Ringup speaks a heads-up in your agent’s turn (“Just a sec, connecting you to our secure payment line now”) and holds the transfer until the sentence finishes.
A dropped session reference cannot strand a payment. The Checkout Session rides the transfer two ways at once: in the transfer itself and in a short-lived server-side record keyed to the caller’s number. If either carrier fails, the other completes the payment.
The confirmation is pushed, not polled. The moment a payment settles, whether by saved card on the call or a texted link paid mid-call, the payment line announces it instantly.
How your merchants connect Square or Clover so calls can take payment.
Webhooks
Reconcile every payment from one signed event on your server.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Ringup","description":"Identity and payments for voice agents","colors":{"primary":"#2450C8","light":"#6E92EC","dark":"#1B3C9E"},"favicon":"https://mintcdn.com/ringup/WOsImafvm8SdtUi8/favicon.svg?fit=max\u0026auto=format\u0026n=WOsImafvm8SdtUi8\u0026q=85\u0026s=30292695f1bb042fd8c043a2645567ef","api":{"playground":{"display":"interactive"}},"navbar":{"links":[{"href":"https://ringup.dev","label":"ringup.dev"}],"primary":{"type":"button","label":"Log in","href":"https://ringup.dev/login/"}},"footer":{"socials":{"website":"https://ringup.dev"}},"fonts":{"heading":{"family":"Fraunces"},"body":{"family":"Hanken Grotesk"}},"integrations":{"posthog":{"apiKey":"phc_kWiG6vnFemWYbzs9MP6LauRgVVZznuijxYiEmijW2AjM"}},"contextual":{"options":["copy","view","chatgpt","claude"],"display":"header"},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"ringup","hasAudioNarration":false,"actualSubdomain":"ringup","customDomains":["docs.ringup.dev"],"gitSource":{"type":"github","owner":"atifnayeem-oss","repo":"docs","deployBranch":"main","contentDirectory":"","isPrivate":false,"mountPath":"","label":""},"entitlements":{"AI_CHAT":{"status":"DISABLED"}},"buildId":"6ad671f21a30caab2b7f616b","clientVersion":"0.0.4088","searchFilterCounts":[{"language":"default","tag":"Documentation","count":17},{"language":"default","tag":"API reference","count":13},{"language":"default","tag":"Concepts","count":8},{"language":"default","tag":"Tools","count":7},{"language":"default","tag":"API Reference","count":7},{"language":"default","tag":"Get started","count":4},{"language":"default","tag":"Errors","count":3},{"language":"default","tag":"Merchant integrations","count":3},{"language":"default","tag":"Changelog","count":2},{"language":"default","tag":"Developer integrations","count":2}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"comment-mode","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"integrations/vapi/dashboard-setup","slug":"/integrations/vapi/dashboard-setup","pageMetadata":{"title":"Dashboard setup","description":"Add Ringup to a Vapi agent from the dashboard. No code: wire it in Test on a copy of your agent, then repeat in Live on your real agent.","href":"/integrations/vapi/dashboard-setup"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Add Ringup to a Vapi agent from the dashboard. No code: wire it in Test on a copy of your agent, then repeat in Live on your real agent.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,li:`li`,p:`p`,strong:`strong`,ul:`ul`,..._provideComponents(),...props.components},{Card,CardGroup,Check,Frame,Heading,OptimizedImage,Step,Steps,Warning}=_components;if(!Card)_missingMdxReference(`Card`,true);if(!CardGroup)_missingMdxReference(`CardGroup`,true);if(!Check)_missingMdxReference(`Check`,true);if(!Frame)_missingMdxReference(`Frame`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!OptimizedImage)_missingMdxReference(`OptimizedImage`,true);if(!Step)_missingMdxReference(`Step`,true);if(!Steps)_missingMdxReference(`Steps`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsx(_components.p,{children:`Add pay-by-phone to a Vapi agent in a few clicks. Ringup attaches one payment tool and hands you one prompt line to paste. No payment code.`}),`\n`,_jsxs(_components.p,{children:[`You do this `,_jsx(_components.strong,{children:`twice`}),`: in `,_jsx(_components.strong,{children:`Test`}),` on a copy of your agent, then in `,_jsx(_components.strong,{children:`Live`}),` on your real agent.`]}),`\n`,_jsx(Heading,{level:`2`,id:`before-you-start`,children:`Before you start`}),`\n`,_jsxs(Steps,{children:[_jsx(Step,{title:`A Vapi agent with a SIP-capable number`,children:_jsx(_components.p,{children:`Vapi-native and SIP trunk (BYOC) numbers can transfer to the payment line. A number imported from a telephony provider cannot.`})}),_jsx(Step,{title:`Your Vapi API key`,children:_jsxs(_components.p,{children:[`Vapi dashboard, `,_jsx(_components.strong,{children:`Org settings, then API Keys`}),`.`]})}),_jsx(Step,{title:`Your Ringup account`,children:_jsxs(_components.p,{children:[`Sign in at `,_jsx(_components.a,{href:`https://ringup.dev/dashboard`,children:`ringup.dev/dashboard`}),`.`]})})]}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[`Test wires a `,_jsx(_components.strong,{children:`copy`}),` of your agent (you duplicate it in Step 1), so production stays untouched until you deliberately go live.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`set-it-up-in-test`,children:`Set it up in Test`}),`\n`,_jsxs(_components.p,{children:[`Make sure the dashboard is in `,_jsx(_components.strong,{children:`Test`}),` mode (top-right toggle).`]}),`\n`,_jsxs(Steps,{children:[_jsxs(Step,{title:`Duplicate your agent`,children:[_jsxs(_components.p,{children:[`In Vapi, duplicate your live agent and name the copy something like `,_jsx(_components.strong,{children:`Agent (Ringup test)`}),`. You wire this copy, not production.`]}),_jsx(Frame,{caption:`Vapi: duplicate your agent and name the copy Agent (Ringup test).`,children:_jsx(OptimizedImage,{src:`https://mintcdn.com/ringup/6rwpYNEIBAppz8jr/images/vapi/04-duplicate-agent.png?fit=max\u0026auto=format\u0026n=6rwpYNEIBAppz8jr\u0026q=85\u0026s=bd6214916901eb6893234f056a95a9ec`,alt:`Duplicate the Vapi agent for testing`,\"data-og-width\":`2000`,width:`2000`,\"data-og-height\":`313`,height:`313`,\"data-path\":`images/vapi/04-duplicate-agent.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/ringup/6rwpYNEIBAppz8jr/images/vapi/04-duplicate-agent.png?w=280\u0026fit=max\u0026auto=format\u0026n=6rwpYNEIBAppz8jr\u0026q=85\u0026s=2753258ad2fd7088e13b50af00778199 280w, https://mintcdn.com/ringup/6rwpYNEIBAppz8jr/images/vapi/04-duplicate-agent.png?w=560\u0026fit=max\u0026auto=format\u0026n=6rwpYNEIBAppz8jr\u0026q=85\u0026s=a58cc75f69bd2800c0aec405c92bc5f2 560w, https://mintcdn.com/ringup/6rwpYNEIBAppz8jr/images/vapi/04-duplicate-agent.png?w=840\u0026fit=max\u0026auto=format\u0026n=6rwpYNEIBAppz8jr\u0026q=85\u0026s=0efb7315dc2420f787964811b742c6b7 840w, https://mintcdn.com/ringup/6rwpYNEIBAppz8jr/images/vapi/04-duplicate-agent.png?w=1100\u0026fit=max\u0026auto=format\u0026n=6rwpYNEIBAppz8jr\u0026q=85\u0026s=9b96544de693e81c800456dfb8ae1f46 1100w, https://mintcdn.com/ringup/6rwpYNEIBAppz8jr/images/vapi/04-duplicate-agent.png?w=1650\u0026fit=max\u0026auto=format\u0026n=6rwpYNEIBAppz8jr\u0026q=85\u0026s=8ebf74d226c1f32f04d3b445f0d92cc8 1650w, https://mintcdn.com/ringup/6rwpYNEIBAppz8jr/images/vapi/04-duplicate-agent.png?w=2500\u0026fit=max\u0026auto=format\u0026n=6rwpYNEIBAppz8jr\u0026q=85\u0026s=eef98f22c2c845603abaff66c76f6244 2500w`})})]}),_jsxs(Step,{title:`Connect your platform`,children:[_jsxs(_components.p,{children:[`In the Ringup dashboard, open `,_jsx(_components.strong,{children:`Voice integrations`}),`, choose `,_jsx(_components.strong,{children:`Vapi`}),`, and paste your `,_jsx(_components.strong,{children:`Private API key`}),`. Ringup lists your agents to check the key, then creates one payment tool on your account.`]}),_jsx(_components.p,{children:`Then pick what your agent sends at hand-off:`}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`The order id`}),` it creates in the point of sale. Ringup reads the total from that order, so tax and modifiers are always right and the payment lands on the real ticket.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`The total`}),` it works out itself. For agents with no point-of-sale order.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Both`}),`, for a mixed fleet. Each call sends whichever it has; when an order id is present it wins.`]}),`\n`]}),_jsx(Frame,{caption:`Voice integrations: choose Vapi, paste your key, pick what the agent sends.`,children:_jsx(OptimizedImage,{src:`https://mintcdn.com/ringup/6rwpYNEIBAppz8jr/images/vapi/01-connect-vapi.png?fit=max\u0026auto=format\u0026n=6rwpYNEIBAppz8jr\u0026q=85\u0026s=f940b51c6e15d7b47f6f24f7b7dc5bd3`,alt:`Connect Vapi and choose the order model`,\"data-og-width\":`2000`,width:`2000`,\"data-og-height\":`1012`,height:`1012`,\"data-path\":`images/vapi/01-connect-vapi.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/ringup/6rwpYNEIBAppz8jr/images/vapi/01-connect-vapi.png?w=280\u0026fit=max\u0026auto=format\u0026n=6rwpYNEIBAppz8jr\u0026q=85\u0026s=8e8bbfd599e7ed545df5a010b9ebcb21 280w, https://mintcdn.com/ringup/6rwpYNEIBAppz8jr/images/vapi/01-connect-vapi.png?w=560\u0026fit=max\u0026auto=format\u0026n=6rwpYNEIBAppz8jr\u0026q=85\u0026s=fc67de6309fdd71ee10b7aff84b8381f 560w, https://mintcdn.com/ringup/6rwpYNEIBAppz8jr/images/vapi/01-connect-vapi.png?w=840\u0026fit=max\u0026auto=format\u0026n=6rwpYNEIBAppz8jr\u0026q=85\u0026s=3bff8231570280f9c760aa570eb20ed8 840w, https://mintcdn.com/ringup/6rwpYNEIBAppz8jr/images/vapi/01-connect-vapi.png?w=1100\u0026fit=max\u0026auto=format\u0026n=6rwpYNEIBAppz8jr\u0026q=85\u0026s=a7ee9961445311cb4af1e86ce067d981 1100w, https://mintcdn.com/ringup/6rwpYNEIBAppz8jr/images/vapi/01-connect-vapi.png?w=1650\u0026fit=max\u0026auto=format\u0026n=6rwpYNEIBAppz8jr\u0026q=85\u0026s=e0a2c1470e026b9f20f1f4d19dc59536 1650w, https://mintcdn.com/ringup/6rwpYNEIBAppz8jr/images/vapi/01-connect-vapi.png?w=2500\u0026fit=max\u0026auto=format\u0026n=6rwpYNEIBAppz8jr\u0026q=85\u0026s=15bf6986633e6358ff303d24ba0d0093 2500w`})})]}),_jsxs(Step,{title:`Choose the agent`,children:[_jsxs(_components.p,{children:[`Pick your `,_jsx(_components.strong,{children:`test copy`}),` and click `,_jsx(_components.strong,{children:`Add payment`}),`. Ringup attaches one tool to it and changes nothing else.`]}),_jsx(Frame,{caption:`Pick the test copy and click Add payment.`,children:_jsx(OptimizedImage,{src:`https://mintcdn.com/ringup/6rwpYNEIBAppz8jr/images/vapi/02-pick-agent.png?fit=max\u0026auto=format\u0026n=6rwpYNEIBAppz8jr\u0026q=85\u0026s=2f2620819b95443f00d59e913c36c971`,alt:`Choose the agent and add payment`,\"data-og-width\":`2000`,width:`2000`,\"data-og-height\":`995`,height:`995`,\"data-path\":`images/vapi/02-pick-agent.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/ringup/6rwpYNEIBAppz8jr/images/vapi/02-pick-agent.png?w=280\u0026fit=max\u0026auto=format\u0026n=6rwpYNEIBAppz8jr\u0026q=85\u0026s=482052d775cc756e612bcb94cea0e520 280w, https://mintcdn.com/ringup/6rwpYNEIBAppz8jr/images/vapi/02-pick-agent.png?w=560\u0026fit=max\u0026auto=format\u0026n=6rwpYNEIBAppz8jr\u0026q=85\u0026s=956e55a6edbe90df8bc2200e4e705a85 560w, https://mintcdn.com/ringup/6rwpYNEIBAppz8jr/images/vapi/02-pick-agent.png?w=840\u0026fit=max\u0026auto=format\u0026n=6rwpYNEIBAppz8jr\u0026q=85\u0026s=8d15743df2c9968f16f187af290af645 840w, https://mintcdn.com/ringup/6rwpYNEIBAppz8jr/images/vapi/02-pick-agent.png?w=1100\u0026fit=max\u0026auto=format\u0026n=6rwpYNEIBAppz8jr\u0026q=85\u0026s=8c4681d45c91dad4b4b26818c712661a 1100w, https://mintcdn.com/ringup/6rwpYNEIBAppz8jr/images/vapi/02-pick-agent.png?w=1650\u0026fit=max\u0026auto=format\u0026n=6rwpYNEIBAppz8jr\u0026q=85\u0026s=8b75a88322688f0f40b7418a747f00dd 1650w, https://mintcdn.com/ringup/6rwpYNEIBAppz8jr/images/vapi/02-pick-agent.png?w=2500\u0026fit=max\u0026auto=format\u0026n=6rwpYNEIBAppz8jr\u0026q=85\u0026s=b82f2bb16274fd320a24a3c9b7829c2b 2500w`})})]}),_jsxs(Step,{title:`Add the prompt line`,children:[_jsxs(_components.p,{children:[`Paste the one `,_jsx(_components.strong,{children:`system prompt`}),` line Ringup shows into the test copy’s system prompt in Vapi. That is the whole change on your side.`]}),_jsx(Frame,{caption:`Copy the prompt line into your Vapi agent's system prompt.`,children:_jsx(OptimizedImage,{src:`https://mintcdn.com/ringup/6rwpYNEIBAppz8jr/images/vapi/03-prompt-line.png?fit=max\u0026auto=format\u0026n=6rwpYNEIBAppz8jr\u0026q=85\u0026s=54fae310128aaef2373a2fb465fe7e3e`,alt:`Paste the Ringup prompt line into the Vapi agent`,\"data-og-width\":`2000`,width:`2000`,\"data-og-height\":`994`,height:`994`,\"data-path\":`images/vapi/03-prompt-line.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/ringup/6rwpYNEIBAppz8jr/images/vapi/03-prompt-line.png?w=280\u0026fit=max\u0026auto=format\u0026n=6rwpYNEIBAppz8jr\u0026q=85\u0026s=9a76cea024d6af791df3a05a0d80a8ee 280w, https://mintcdn.com/ringup/6rwpYNEIBAppz8jr/images/vapi/03-prompt-line.png?w=560\u0026fit=max\u0026auto=format\u0026n=6rwpYNEIBAppz8jr\u0026q=85\u0026s=5abb9652bee40ec978eb0dba560d2aec 560w, https://mintcdn.com/ringup/6rwpYNEIBAppz8jr/images/vapi/03-prompt-line.png?w=840\u0026fit=max\u0026auto=format\u0026n=6rwpYNEIBAppz8jr\u0026q=85\u0026s=f2f79c4f2ee6afae0532b3ab1701f4d7 840w, https://mintcdn.com/ringup/6rwpYNEIBAppz8jr/images/vapi/03-prompt-line.png?w=1100\u0026fit=max\u0026auto=format\u0026n=6rwpYNEIBAppz8jr\u0026q=85\u0026s=4d498d03712cff9551248a8a1ba3ba20 1100w, https://mintcdn.com/ringup/6rwpYNEIBAppz8jr/images/vapi/03-prompt-line.png?w=1650\u0026fit=max\u0026auto=format\u0026n=6rwpYNEIBAppz8jr\u0026q=85\u0026s=68795311392769a135353444686c31a4 1650w, https://mintcdn.com/ringup/6rwpYNEIBAppz8jr/images/vapi/03-prompt-line.png?w=2500\u0026fit=max\u0026auto=format\u0026n=6rwpYNEIBAppz8jr\u0026q=85\u0026s=54636ceb5709fa8ce2d843161a0efea3 2500w`})}),_jsx(Warning,{children:_jsx(_components.p,{children:`Do not add the tool by hand in Vapi. Ringup attaches it with the right server URL and secret. A hand-made tool is not bound to your account and will fail at call time.`})})]}),_jsx(Step,{title:`Connect a test merchant`,children:_jsxs(_components.p,{children:[`A call can only take payment for a merchant, so create one in `,_jsx(_components.strong,{children:`Test`}),` first. In the dashboard, open `,_jsx(_components.strong,{children:`Merchant integrations`}),` and create a test merchant; in test mode it is automatically backed by Ringup’s test processor account, so there is no OAuth step and no real processor account to connect. Without one, the payment layer stays inaudible and the test call has nothing to charge. See `,_jsx(_components.a,{href:`/payment-providers/overview`,children:`Merchant integrations`}),`.`]})}),_jsx(Step,{title:`Place a test call`,children:_jsxs(_components.p,{children:[`Call the test copy from your own phone and place an order. It charges the test merchant you just created. On your first call you are texted a link and pay with the test card `,_jsx(_components.code,{children:`4111 1111 1111 1111`}),`; on your next call you are recognized and pay on the saved Visa ending 1111. No real money moves. Watch it land in `,_jsx(_components.strong,{children:`Logs`}),`.`]})})]}),`\n`,_jsx(Heading,{level:`2`,id:`go-live`,children:`Go live`}),`\n`,_jsxs(Steps,{children:[_jsxs(Step,{title:`Wire your real agent`,children:[_jsxs(_components.p,{children:[`Switch the dashboard to `,_jsx(_components.strong,{children:`Live`}),` and run `,_jsx(_components.strong,{children:`Connect your platform, Choose the agent, Add the prompt line`}),` again, this time on your `,_jsx(_components.strong,{children:`production`}),` agent, no copy.`]}),_jsx(Frame,{caption:`Switch to Live and wire your production agent the same way.`,children:_jsx(OptimizedImage,{src:`https://mintcdn.com/ringup/6rwpYNEIBAppz8jr/images/vapi/05-go-live.png?fit=max\u0026auto=format\u0026n=6rwpYNEIBAppz8jr\u0026q=85\u0026s=e1a56022f80d9d0b6fc544dcb80e42a5`,alt:`Go live`,\"data-og-width\":`2000`,width:`2000`,\"data-og-height\":`999`,height:`999`,\"data-path\":`images/vapi/05-go-live.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/ringup/6rwpYNEIBAppz8jr/images/vapi/05-go-live.png?w=280\u0026fit=max\u0026auto=format\u0026n=6rwpYNEIBAppz8jr\u0026q=85\u0026s=4b81ab999d03393bf0ddde1858511f32 280w, https://mintcdn.com/ringup/6rwpYNEIBAppz8jr/images/vapi/05-go-live.png?w=560\u0026fit=max\u0026auto=format\u0026n=6rwpYNEIBAppz8jr\u0026q=85\u0026s=206fd9cf2a251e1d748f6f43f59d4d1d 560w, https://mintcdn.com/ringup/6rwpYNEIBAppz8jr/images/vapi/05-go-live.png?w=840\u0026fit=max\u0026auto=format\u0026n=6rwpYNEIBAppz8jr\u0026q=85\u0026s=9fdf43883f507c19f5eb567a8377a9ea 840w, https://mintcdn.com/ringup/6rwpYNEIBAppz8jr/images/vapi/05-go-live.png?w=1100\u0026fit=max\u0026auto=format\u0026n=6rwpYNEIBAppz8jr\u0026q=85\u0026s=1b621fcd9aaadcb8470009a45be054be 1100w, https://mintcdn.com/ringup/6rwpYNEIBAppz8jr/images/vapi/05-go-live.png?w=1650\u0026fit=max\u0026auto=format\u0026n=6rwpYNEIBAppz8jr\u0026q=85\u0026s=3d86c83171eef3afef614afed335badf 1650w, https://mintcdn.com/ringup/6rwpYNEIBAppz8jr/images/vapi/05-go-live.png?w=2500\u0026fit=max\u0026auto=format\u0026n=6rwpYNEIBAppz8jr\u0026q=85\u0026s=a4e30fa11be908cee2ed49a1780b2317 2500w`})})]}),_jsx(Step,{title:`Let your merchants connect`,children:_jsxs(_components.p,{children:[`Real calls take payment only for merchants who have connected their own processor. Embed the one-line Connect button so each merchant self-connects Square or Clover. Until a merchant connects, the payment layer stays inaudible on their calls, so going live first is safe. See `,_jsx(_components.a,{href:`/payment-providers/overview`,children:`Merchant integrations`}),`.`]})})]}),`\n`,_jsx(Heading,{level:`2`,id:`what-ringup-guarantees-during-the-transfer`,children:`What Ringup guarantees during the transfer`}),`\n`,_jsx(Check,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`The hand-off is never silent.`}),` Before the leg switches, Ringup speaks a heads-up in your agent’s turn (“Just a sec, connecting you to our secure payment line now”) and holds the transfer until the sentence finishes.`]})}),`\n`,_jsx(Check,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`A dropped session reference cannot strand a payment.`}),` The Checkout Session rides the transfer two ways at once: in the transfer itself and in a short-lived server-side record keyed to the caller’s number. If either carrier fails, the other completes the payment.`]})}),`\n`,_jsx(Check,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`The confirmation is pushed, not polled.`}),` The moment a payment settles, whether by saved card on the call or a texted link paid mid-call, the payment line announces it instantly.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`next-steps`,children:`Next steps`}),`\n`,_jsxs(CardGroup,{cols:2,children:[_jsx(Card,{title:`Merchant integrations`,icon:`store`,href:`/payment-providers/overview`,children:_jsx(_components.p,{children:`How your merchants connect Square or Clover so calls can take payment.`})}),_jsx(Card,{title:`Webhooks`,icon:`webhook`,href:`/concepts/webhooks`,children:_jsx(_components.p,{children:`Reconcile every payment from one signed event on your server.`})})]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Dashboard setup","description":"Add Ringup to a Vapi agent from the dashboard. No code: wire it in Test on a copy of your agent, then repeat in Live on your real agent.","href":"/integrations/vapi/dashboard-setup"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Before you start","slug":"before-you-start","depth":2,"children":[]},{"title":"Set it up in Test","slug":"set-it-up-in-test","depth":2,"children":[]},{"title":"Go live","slug":"go-live","depth":2,"children":[]},{"title":"What Ringup guarantees during the transfer","slug":"what-ringup-guarantees-during-the-transfer","depth":2,"children":[]},{"title":"Next steps","slug":"next-steps","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"ringup","siteName":"Ringup","title":"Dashboard setup - Ringup","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-07-25T04:23:08.670Z","originalFileLocation":"integrations/vapi/dashboard-setup.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Add Ringup to a Vapi agent from the dashboard. No code: wire it in Test on a copy of your agent, then repeat in Live on your real agent.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Ringup\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/ringup/T7qfQGwQEgu8hb1T/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/ringup/T7qfQGwQEgu8hb1T/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/ringup/T7qfQGwQEgu8hb1T/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/ringup/T7qfQGwQEgu8hb1T/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/ringup/T7qfQGwQEgu8hb1T/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/ringup/T7qfQGwQEgu8hb1T/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/ringup/T7qfQGwQEgu8hb1T/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/ringup/T7qfQGwQEgu8hb1T/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/ringup/T7qfQGwQEgu8hb1T/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Dashboard setup - Ringup\">\u003cmeta data-mint-head property=\"og:description\" content=\"Add Ringup to a Vapi agent from the dashboard. No code: wire it in Test on a copy of your agent, then repeat in Live on your real agent.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Ringup\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.ringup.dev/integrations/vapi/dashboard-setup\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://ringup.mintlify.site/_mintlify/api/og/v2?division=Vapi\u0026amp;title=Dashboard+setup\u0026amp;description=Add+Ringup+to+a+Vapi+agent+from+the+dashboard.+No+code%3A+wire+it+in+Test+on+a+copy+of+your+agent%2C+then+repeat+in+Live+on+your+real+agent.\u0026amp;theme=b118f4e35f9b7ec55672e6b7\u0026amp;signature=666112f06c14b2b23a2e38c4e003f5c82f243578d93a70079a3d6be0445e4cd9\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Dashboard setup - Ringup\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Add Ringup to a Vapi agent from the dashboard. No code: wire it in Test on a copy of your agent, then repeat in Live on your real agent.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://ringup.mintlify.site/_mintlify/api/og/v2?division=Vapi\u0026amp;title=Dashboard+setup\u0026amp;description=Add+Ringup+to+a+Vapi+agent+from+the+dashboard.+No+code%3A+wire+it+in+Test+on+a+copy+of+your+agent%2C+then+repeat+in+Live+on+your+real+agent.\u0026amp;theme=b118f4e35f9b7ec55672e6b7\u0026amp;signature=666112f06c14b2b23a2e38c4e003f5c82f243578d93a70079a3d6be0445e4cd9\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/ringup/T7qfQGwQEgu8hb1T/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Ringup\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#2450C8\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.ringup.dev/integrations/vapi/dashboard-setup\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/integrations/vapi/dashboard-setup.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.ringup.dev/#organization\",\"name\":\"Ringup\",\"url\":\"https://docs.ringup.dev\"},{\"@type\":\"WebSite\",\"@id\":\"https://docs.ringup.dev#website\",\"name\":\"Ringup\",\"url\":\"https://docs.ringup.dev\",\"publisher\":{\"@id\":\"https://docs.ringup.dev/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.ringup.dev/integrations/vapi/dashboard-setup#webpage\",\"url\":\"https://docs.ringup.dev/integrations/vapi/dashboard-setup\",\"name\":\"Dashboard setup\",\"description\":\"Add Ringup to a Vapi agent from the dashboard. No code: wire it in Test on a copy of your agent, then repeat in Live on your real agent.\",\"dateModified\":\"2026-07-25T04:23:08.670Z\",\"isPartOf\":{\"@id\":\"https://docs.ringup.dev#website\"},\"breadcrumb\":{\"@id\":\"https://docs.ringup.dev/integrations/vapi/dashboard-setup#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.ringup.dev/integrations/vapi/dashboard-setup#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Ringup\",\"item\":\"https://docs.ringup.dev\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Dashboard setup\",\"item\":\"https://docs.ringup.dev/integrations/vapi/dashboard-setup\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.ringup.dev/integrations/vapi/dashboard-setup#article\",\"headline\":\"Dashboard setup\",\"name\":\"Dashboard setup\",\"description\":\"Add Ringup to a Vapi agent from the dashboard. No code: wire it in Test on a copy of your agent, then repeat in Live on your real agent.\",\"url\":\"https://docs.ringup.dev/integrations/vapi/dashboard-setup\",\"mainEntityOfPage\":{\"@id\":\"https://docs.ringup.dev/integrations/vapi/dashboard-setup#webpage\"},\"dateModified\":\"2026-07-25T04:23:08.670Z\",\"publisher\":{\"@id\":\"https://docs.ringup.dev/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.ringup.dev#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Ringup\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Ringup","nav":{"global":null,"tabs":[{"tab":"Documentation","groups":[{"group":"Get started","pages":[{"title":"What is Ringup","href":""},{"title":"Quickstart","href":"/quickstart"},{"title":"Authentication","href":"/authentication"},{"title":"How it works","href":"/concepts/how-it-works"}]},{"group":"Concepts","pages":[{"title":"Caller Identity","href":"/concepts/identity"},{"title":"Merchant Identity","href":"/concepts/merchant-identity"},{"title":"Checkout Session","href":"/concepts/checkout-session"},{"title":"Call Transfer","href":"/concepts/complete-transfer"},{"title":"Payment policy","href":"/concepts/payment-policy"},{"title":"Send Link","href":"/concepts/send-link"},{"title":"Charge","href":"/concepts/charge"},{"title":"Webhooks","description":"Ringup posts a signed event to your server when a payment completes or fails, so your system can mark the order paid without waiting on the call.","href":"/concepts/webhooks"}]},{"group":"Developer integrations","pages":[{"group":"Vapi","pages":[{"title":"Dashboard setup","href":"/integrations/vapi/dashboard-setup"}]},{"group":"Custom Platform","pages":[{"title":"Custom (REST API)","description":"Take phone payments from any voice platform: two API calls and one call transfer.","href":"/integrations/custom/transfer"}]}]},{"group":"Merchant integrations","pages":[{"title":"Merchant integrations","href":"/payment-providers/overview"},{"title":"Square","href":"/payment-providers/square"},{"title":"Clover","href":"/payment-providers/clover"}]}]},{"tab":"API reference","pages":[{"title":"API reference","href":"/api-reference/introduction"}]},{"tab":"Changelog","pages":[{"title":"Changelog","href":"/changelog"}]}]},"basePath":"","title":"Dashboard setup - Ringup","buildId":"dpl_DTau1J5HqS9UTgVSDwGksstFWtPa","deploymentId":"dpl_DTau1J5HqS9UTgVSDwGksstFWtPa","dynamics":["07c022d89b","a74be98ba7"],"chunks":["Frame-DvzxQbD0.js","DynamicMarkdown-mQG_iQiE.js","zoom-image-lightbox-BFbLClTf.js","lightbox-handle-r17bVUz3.js"]}