curl --request POST \ --url https://api.ringup.dev/v1/create_checkout \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --data @- <<EOF{ "merchant_number": "+14155550100", "caller_phone": "+14155550142", "order_id": "8QK4M2XJ", "platform_call_id": "call_7c2a91e4", "return_to": "https://example.com/calls/7c2a91e4", "success_message": "You're all set. Your order will be ready in about ten minutes.", "failure_message": "That card did not go through. I can text you a link instead.", "metadata": { "ticket": "4821" }}EOF
import requests
url = "https://api.ringup.dev/v1/create_checkout"
payload = {
"merchant_number": "+14155550100",
"caller_phone": "+14155550142",
"order_id": "8QK4M2XJ",
"platform_call_id": "call_7c2a91e4",
"return_to": "https://example.com/calls/7c2a91e4",
"success_message": "You're all set. Your order will be ready in about ten minutes.",
"failure_message": "That card did not go through. I can text you a link instead.",
"metadata": { "ticket": "4821" }
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)
const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
merchant_number: '+14155550100',
caller_phone: '+14155550142',
order_id: '8QK4M2XJ',
platform_call_id: 'call_7c2a91e4',
return_to: 'https://example.com/calls/7c2a91e4',
success_message: 'You\'re all set. Your order will be ready in about ten minutes.',
failure_message: 'That card did not go through. I can text you a link instead.',
metadata: {ticket: '4821'}
})
};
fetch('https://api.ringup.dev/v1/create_checkout', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));
<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.ringup.dev/v1/create_checkout",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'merchant_number' => '+14155550100',
'caller_phone' => '+14155550142',
'order_id' => '8QK4M2XJ',
'platform_call_id' => 'call_7c2a91e4',
'return_to' => 'https://example.com/calls/7c2a91e4',
'success_message' => 'You\'re all set. Your order will be ready in about ten minutes.',
'failure_message' => 'That card did not go through. I can text you a link instead.',
'metadata' => [
'ticket' => '4821'
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}
package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.ringup.dev/v1/create_checkout"
payload := strings.NewReader("{\n \"merchant_number\": \"+14155550100\",\n \"caller_phone\": \"+14155550142\",\n \"order_id\": \"8QK4M2XJ\",\n \"platform_call_id\": \"call_7c2a91e4\",\n \"return_to\": \"https://example.com/calls/7c2a91e4\",\n \"success_message\": \"You're all set. Your order will be ready in about ten minutes.\",\n \"failure_message\": \"That card did not go through. I can text you a link instead.\",\n \"metadata\": {\n \"ticket\": \"4821\"\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}
HttpResponse<String> response = Unirest.post("https://api.ringup.dev/v1/create_checkout")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"merchant_number\": \"+14155550100\",\n \"caller_phone\": \"+14155550142\",\n \"order_id\": \"8QK4M2XJ\",\n \"platform_call_id\": \"call_7c2a91e4\",\n \"return_to\": \"https://example.com/calls/7c2a91e4\",\n \"success_message\": \"You're all set. Your order will be ready in about ten minutes.\",\n \"failure_message\": \"That card did not go through. I can text you a link instead.\",\n \"metadata\": {\n \"ticket\": \"4821\"\n }\n}")
.asString();
require 'uri'
require 'net/http'
url = URI("https://api.ringup.dev/v1/create_checkout")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"merchant_number\": \"+14155550100\",\n \"caller_phone\": \"+14155550142\",\n \"order_id\": \"8QK4M2XJ\",\n \"platform_call_id\": \"call_7c2a91e4\",\n \"return_to\": \"https://example.com/calls/7c2a91e4\",\n \"success_message\": \"You're all set. Your order will be ready in about ten minutes.\",\n \"failure_message\": \"That card did not go through. I can text you a link instead.\",\n \"metadata\": {\n \"ticket\": \"4821\"\n }\n}"
response = http.request(request)
puts response.read_body
Resolve the amount, apply the merchant’s payment policy, and return the transfer target when payment is required.
POST
/
v1
/
create_checkout
Create a checkout session
curl --request POST \ --url https://api.ringup.dev/v1/create_checkout \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --data @- <<EOF{ "merchant_number": "+14155550100", "caller_phone": "+14155550142", "order_id": "8QK4M2XJ", "platform_call_id": "call_7c2a91e4", "return_to": "https://example.com/calls/7c2a91e4", "success_message": "You're all set. Your order will be ready in about ten minutes.", "failure_message": "That card did not go through. I can text you a link instead.", "metadata": { "ticket": "4821" }}EOF
import requests
url = "https://api.ringup.dev/v1/create_checkout"
payload = {
"merchant_number": "+14155550100",
"caller_phone": "+14155550142",
"order_id": "8QK4M2XJ",
"platform_call_id": "call_7c2a91e4",
"return_to": "https://example.com/calls/7c2a91e4",
"success_message": "You're all set. Your order will be ready in about ten minutes.",
"failure_message": "That card did not go through. I can text you a link instead.",
"metadata": { "ticket": "4821" }
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)
const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
merchant_number: '+14155550100',
caller_phone: '+14155550142',
order_id: '8QK4M2XJ',
platform_call_id: 'call_7c2a91e4',
return_to: 'https://example.com/calls/7c2a91e4',
success_message: 'You\'re all set. Your order will be ready in about ten minutes.',
failure_message: 'That card did not go through. I can text you a link instead.',
metadata: {ticket: '4821'}
})
};
fetch('https://api.ringup.dev/v1/create_checkout', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));
<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.ringup.dev/v1/create_checkout",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'merchant_number' => '+14155550100',
'caller_phone' => '+14155550142',
'order_id' => '8QK4M2XJ',
'platform_call_id' => 'call_7c2a91e4',
'return_to' => 'https://example.com/calls/7c2a91e4',
'success_message' => 'You\'re all set. Your order will be ready in about ten minutes.',
'failure_message' => 'That card did not go through. I can text you a link instead.',
'metadata' => [
'ticket' => '4821'
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}
package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.ringup.dev/v1/create_checkout"
payload := strings.NewReader("{\n \"merchant_number\": \"+14155550100\",\n \"caller_phone\": \"+14155550142\",\n \"order_id\": \"8QK4M2XJ\",\n \"platform_call_id\": \"call_7c2a91e4\",\n \"return_to\": \"https://example.com/calls/7c2a91e4\",\n \"success_message\": \"You're all set. Your order will be ready in about ten minutes.\",\n \"failure_message\": \"That card did not go through. I can text you a link instead.\",\n \"metadata\": {\n \"ticket\": \"4821\"\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}
HttpResponse<String> response = Unirest.post("https://api.ringup.dev/v1/create_checkout")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"merchant_number\": \"+14155550100\",\n \"caller_phone\": \"+14155550142\",\n \"order_id\": \"8QK4M2XJ\",\n \"platform_call_id\": \"call_7c2a91e4\",\n \"return_to\": \"https://example.com/calls/7c2a91e4\",\n \"success_message\": \"You're all set. Your order will be ready in about ten minutes.\",\n \"failure_message\": \"That card did not go through. I can text you a link instead.\",\n \"metadata\": {\n \"ticket\": \"4821\"\n }\n}")
.asString();
require 'uri'
require 'net/http'
url = URI("https://api.ringup.dev/v1/create_checkout")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"merchant_number\": \"+14155550100\",\n \"caller_phone\": \"+14155550142\",\n \"order_id\": \"8QK4M2XJ\",\n \"platform_call_id\": \"call_7c2a91e4\",\n \"return_to\": \"https://example.com/calls/7c2a91e4\",\n \"success_message\": \"You're all set. Your order will be ready in about ten minutes.\",\n \"failure_message\": \"That card did not go through. I can text you a link instead.\",\n \"metadata\": {\n \"ticket\": \"4821\"\n }\n}"
response = http.request(request)
puts response.read_body
The order total in cents. Pass order_id instead to read the total from the merchant's POS order (the order is the amount authority; an amount sent alongside it is only cross-checked).
The merchant's own dialed number, when the caller knows the CALL but not the merchant (the transfer tool). Resolved to a merchant within the authed vendor; an unregistered number is an inaudible none, not an error (R13c-ii).
The one line a voice agent should say for this outcome, so the transfer tool never invents copy: "no payment is needed", "transferring you now", or "payment is unavailable" all come from here (R13c-ii). Errors carry the same field under error.agent_message.
Cards chargeable AT THIS MERCHANT, newest first. Handle-aware, not merely silo-aware: a Clover card enrolled at merchant A has no charge handle at merchant B, and offering it would fail at charge after the caller had already agreed to it. Empty means text a link.
The merchant this resolved to, echoed back. Useful when the caller passed a merchant_number and wants to know which merchant it matched; empty string when no merchant resolved (an inaudible none, R13c-ii).
The same hand-off as a plain phone number, for platforms that can only transfer calls to a number. The call arrives without the token and the payment line resolves the session by the caller's number. Prefer transfer_to when the platform can dial a SIP URI.
{"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":"api-reference/create-a-checkout-session","slug":"/api-reference/create-a-checkout-session","pageMetadata":{"title":"Create a checkout session","description":"Resolve the amount, apply the merchant's payment policy, and return the transfer target when payment is required.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /v1/create_checkout","href":"/api-reference/create-a-checkout-session","autogeneratedByOpenApi":true},"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: \"Resolve the amount, apply the merchant’s payment policy, and return the transfer target when payment is required.\"\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}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){return _jsx(_Fragment,{})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Create a checkout session","description":"Resolve the amount, apply the merchant's payment policy, and return the transfer target when payment is required.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /v1/create_checkout","href":"/api-reference/create-a-checkout-session","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"operationId":"createCheckout","summary":"Create a checkout session","description":"Resolve the amount, apply the merchant's payment policy, and return the transfer target when payment is required.","security":["9e9794ac-2453-4e02-b6ba-45a31689c48f"],"requestBody":"aa9452c6-392b-4f82-863a-09601aec7510","responses":{"201":"10cf3a62-145b-4050-8514-7ac5ec2db82d","400":"1ba2781a-3914-4ca9-ad9d-d058e4a6e0ec","401":"9e613909-2f45-432a-9a81-86329606d9a6","404":"02455b59-a3dc-42d3-a11b-bf8a48df0326","422":"3640ae03-5eee-41ea-9901-ab6c172be3b3","424":"dcb93b91-a1a7-4369-967e-eaf6d6bce35c"},"method":"post","type":"path","servers":["27b78901-71f8-4c6b-9167-a7f12d7c34d6"],"path":"/v1/create_checkout","baseUrlOptions":["https://api.ringup.dev"],"title":"Create a checkout session","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{},"requestBody":{"required":true,"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"amount_cents":{"description":"The order total in cents. Pass order_id instead to read the total from the merchant's POS order (the order is the amount authority; an amount sent alongside it is only cross-checked).","type":"number","isRequired":true,"uniqueKey":"amount_cents","typeLabel":"number"},"caller_phone":{"type":"string","isRequired":true,"uniqueKey":"caller_phone","typeLabel":"string"},"merchant_id":{"description":"The merchant being paid (mch_…). Integrations that know only the call may pass merchant_number (the dialed number) instead.","type":"string","isRequired":true,"uniqueKey":"merchant_id","typeLabel":"string"},"currency":{"type":"string","uniqueKey":"currency","typeLabel":"string"},"failure_message":{"description":"Spoken after a failed one.","type":"string","uniqueKey":"failure_message","typeLabel":"string"},"merchant_number":{"description":"The merchant's own dialed number, when the caller knows the CALL but not the merchant (the transfer tool). Resolved to a merchant within the authed vendor; an unregistered number is an inaudible `none`, not an error (R13c-ii).","type":"string","uniqueKey":"merchant_number","typeLabel":"string"},"metadata":{"additionalProperties":{"type":"string","uniqueKey":"metadata.additionalProperties","typeLabel":"string"},"description":"Your own key/value pairs. Opaque to Ringup: stored, echoed, never interpreted.","type":"object","uniqueKey":"metadata","typeLabel":"object"},"order_id":{"description":"The merchant's POS order. THE amount authority when present.","type":"string","uniqueKey":"order_id","typeLabel":"string"},"platform_call_id":{"description":"The voice platform's id for this call. Functional, not metadata: we call the platform with it to verify caller attestation. Recommended.","type":"string","uniqueKey":"platform_call_id","typeLabel":"string"},"return_to":{"description":"Where to send the caller back after payment.","type":"string","uniqueKey":"return_to","typeLabel":"string"},"success_message":{"description":"Spoken after a successful payment.","type":"string","uniqueKey":"success_message","typeLabel":"string"}},"required":["caller_phone","merchant_id","amount_cents"],"type":"object","uniqueKey":"","typeLabel":"object"},"example":{"merchant_number":"+14155550100","caller_phone":"+14155550142","order_id":"8QK4M2XJ","platform_call_id":"call_7c2a91e4","return_to":"https://example.com/calls/7c2a91e4","success_message":"You're all set. Your order will be ready in about ten minutes.","failure_message":"That card did not go through. I can text you a link instead.","metadata":{"ticket":"4821"}},"examples":{"Example":{"title":"Example","value":{"merchant_number":"+14155550100","caller_phone":"+14155550142","order_id":"8QK4M2XJ","platform_call_id":"call_7c2a91e4","return_to":"https://example.com/calls/7c2a91e4","success_message":"You're all set. Your order will be ready in about ten minutes.","failure_message":"That card did not go through. I can text you a link instead.","metadata":{"ticket":"4821"}}}},"exampleType":"examples"}},"exampleType":"examples"},"responses":{"10cf3a62-145b-4050-8514-7ac5ec2db82d":{"description":"Success.","content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"agent_message":{"description":"The one line a voice agent should say for this outcome, so the transfer tool never invents copy: \"no payment is needed\", \"transferring you now\", or \"payment is unavailable\" all come from here (R13c-ii). Errors carry the same field under `error.agent_message`.","type":"string","uniqueKey":"agent_message","typeLabel":"string"},"amount_cents":{"description":"What we RESOLVED. Under the order model the total is derived, so we must return it.","type":"number","uniqueKey":"amount_cents","typeLabel":"number"},"amount_source":{"description":"Where the total came from, so a derived amount is visibly derived.","enum":["order","request"],"type":"string","uniqueKey":"amount_source","typeLabel":"enum\u003cstring>"},"cards":{"description":"Cards chargeable AT THIS MERCHANT, newest first. Handle-aware, not merely silo-aware: a Clover card enrolled at merchant A has no charge handle at merchant B, and offering it would fail at charge after the caller had already agreed to it. Empty means text a link.","items":{"additionalProperties":false,"properties":{"brand":{"type":"string","uniqueKey":"cards.items.[INDEX].brand","typeLabel":"string"},"expiry":{"type":"string","uniqueKey":"cards.items.[INDEX].expiry","typeLabel":"string"},"instrument_id":{"description":"The value `charge` requires.","type":"string","uniqueKey":"cards.items.[INDEX].instrument_id","typeLabel":"string"},"last_four":{"type":"string","uniqueKey":"cards.items.[INDEX].last_four","typeLabel":"string"}},"type":"object","uniqueKey":"cards.items.[INDEX]","typeLabel":"object"},"type":"array","uniqueKey":"cards","typeLabel":"object[]"},"checkout_session_id":{"type":"string","uniqueKey":"checkout_session_id","typeLabel":"string"},"currency":{"type":"string","uniqueKey":"currency","typeLabel":"string"},"default_card_id":{"oneOf":[{"type":"string","uniqueKey":"default_card_id.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"default_card_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"default_card_id","typeLabel":"string | null"},"expires_at":{"type":"string","uniqueKey":"expires_at","typeLabel":"string"},"merchant_id":{"description":"The merchant this resolved to, echoed back. Useful when the caller passed a `merchant_number` and wants to know which merchant it matched; empty string when no merchant resolved (an inaudible `none`, R13c-ii).","type":"string","uniqueKey":"merchant_id","typeLabel":"string"},"metadata":{"oneOf":[{"type":"object","additionalProperties":{"type":"string","uniqueKey":"metadata.oneOf.0.additionalProperties","typeLabel":"string"},"uniqueKey":"metadata.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"metadata.oneOf.1","typeLabel":"null"}],"uniqueKey":"metadata","typeLabel":"object | null"},"payment_required":{"enum":["required","optional","none"],"type":"string","uniqueKey":"payment_required","typeLabel":"enum\u003cstring>"},"transfer_to":{"oneOf":[{"description":"Null unless payment is required. Nothing to transfer to means do not transfer.","type":"string","uniqueKey":"transfer_to.oneOf.0","typeLabel":"string"},{"description":"Null unless payment is required. Nothing to transfer to means do not transfer.","type":"null","uniqueKey":"transfer_to.oneOf.1","typeLabel":"null"}],"uniqueKey":"transfer_to","typeLabel":"string | null"},"transfer_to_number":{"oneOf":[{"description":"The same hand-off as a plain phone number, for platforms that can only transfer calls to a number. The call arrives without the token and the payment line resolves the session by the caller's number. Prefer `transfer_to` when the platform can dial a SIP URI.","type":"string","uniqueKey":"transfer_to_number.oneOf.0","typeLabel":"string"},{"description":"The same hand-off as a plain phone number, for platforms that can only transfer calls to a number. The call arrives without the token and the payment line resolves the session by the caller's number. Prefer `transfer_to` when the platform can dial a SIP URI.","type":"null","uniqueKey":"transfer_to_number.oneOf.1","typeLabel":"null"}],"uniqueKey":"transfer_to_number","typeLabel":"string | null"}},"type":"object","uniqueKey":"","typeLabel":"object"},"example":{"checkout_session_id":"cs_test_453b5401286d0f80","merchant_id":"mch_4f2c9a1b7e3d","agent_message":"Payment is ready. Transferring the caller now.","payment_required":"required","amount_cents":1650,"currency":"USD","amount_source":"order","transfer_to":"sip:eyJjIjoiKzE0MTU1NTUwMTQyIiwiYSI6MTY1MCwibSI6Im1jaF80ZjJjOWExYjdlM2QifQ.Xr7QpN2vK9sLd4TfA1mYc8BhE3wZ@5p8edvav50y.sip.livekit.cloud","transfer_to_number":"+16283364058","expires_at":"2026-07-21T18:34:12.000Z","cards":[{"instrument_id":"ins_9d21c7","brand":"VISA","last_four":"5858","expiry":"07/2028"}],"default_card_id":"ins_9d21c7","metadata":{"ticket":"4821"}},"examples":{"Example":{"title":"Example","value":{"checkout_session_id":"cs_test_453b5401286d0f80","merchant_id":"mch_4f2c9a1b7e3d","agent_message":"Payment is ready. Transferring the caller now.","payment_required":"required","amount_cents":1650,"currency":"USD","amount_source":"order","transfer_to":"sip:eyJjIjoiKzE0MTU1NTUwMTQyIiwiYSI6MTY1MCwibSI6Im1jaF80ZjJjOWExYjdlM2QifQ.Xr7QpN2vK9sLd4TfA1mYc8BhE3wZ@5p8edvav50y.sip.livekit.cloud","transfer_to_number":"+16283364058","expires_at":"2026-07-21T18:34:12.000Z","cards":[{"instrument_id":"ins_9d21c7","brand":"VISA","last_four":"5858","expiry":"07/2028"}],"default_card_id":"ins_9d21c7","metadata":{"ticket":"4821"}}}},"exampleType":"examples"}},"exampleType":"examples"},"1ba2781a-3914-4ca9-ad9d-d058e4a6e0ec":{"description":"`invalid_json` The request body is not valid JSON.\n\n`missing_required_fields` A required parameter is missing.","content":{"application/json":{"schema":{"additionalProperties":false,"description":"THE error object. Identical on every endpoint: provisioning, identify, checkout, cards, charge. A failed charge (which arrives as a 200 with `status: \"failed\"`) carries the SAME fields under `failure`, so a developer writes one parser and it works everywhere.","properties":{"error":{"additionalProperties":false,"properties":{"advice_code":{"description":"try_again_later | confirm_card_data | do_not_try_again","enum":["try_again_later","do_not_try_again","confirm_card_data"],"type":"string","uniqueKey":"error.advice_code","typeLabel":"enum\u003cstring>"},"agent_action":{"oneOf":[{"type":"string","description":"Null on every `developer`-audience error: see agent_message.","enum":["retry_card","offer_different_card","send_link","end_call","escalate"],"uniqueKey":"error.agent_action.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","description":"Null on every `developer`-audience error: see agent_message.","uniqueKey":"error.agent_action.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.agent_action","typeLabel":"enum\u003cstring> | null"},"agent_message":{"oneOf":[{"description":"Speak verbatim WHEN NON-NULL. Null on every `developer`-audience error.","type":"string","uniqueKey":"error.agent_message.oneOf.0","typeLabel":"string"},{"description":"Speak verbatim WHEN NON-NULL. Null on every `developer`-audience error.","type":"null","uniqueKey":"error.agent_message.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.agent_message","typeLabel":"string | null"},"audience":{"description":"Who this error is for. Drives whether there is anything to speak at all.","enum":["developer","caller"],"type":"string","uniqueKey":"error.audience","typeLabel":"enum\u003cstring>"},"charge":{"description":"Present when the error concerns a specific charge.","type":"string","uniqueKey":"error.charge","typeLabel":"string"},"code":{"enum":["invalid_json","missing_required_fields","invalid_value","invalid_key","vendor_not_provisioned","merchant_not_found","merchant_not_connected","invalid_processor","invalid_credentials","invalid_payment_policy","invalid_payment_policy_amount_cents","session_not_found","session_expired","session_create_failed","session_missing_consumer","missing_checkout_session_id","order_lookup_failed","order_lookup_unsupported","instrument_not_found","instrument_not_authorized","card_not_on_file","missing_instrument_fields","processor_mismatch","needs_enrollment","charge_details_mismatch","card_save_failed","card_declined","processor_unavailable","merchant_credentials_invalid","invalid_vault","key_not_found","invalid_environment","invalid_url","invalid_events","invalid_ttl","invalid_state_key","not_found","not_configured","rate_limit","internal_error"],"type":"string","uniqueKey":"error.code","typeLabel":"enum\u003cstring>"},"decline_code":{"type":"string","uniqueKey":"error.decline_code","typeLabel":"string"},"display_message":{"oneOf":[{"description":"The same fact written for a screen. Null on `developer`-audience errors.","type":"string","uniqueKey":"error.display_message.oneOf.0","typeLabel":"string"},{"description":"The same fact written for a screen. Null on `developer`-audience errors.","type":"null","uniqueKey":"error.display_message.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.display_message","typeLabel":"string | null"},"doc_url":{"type":"string","uniqueKey":"error.doc_url","typeLabel":"string"},"message":{"type":"string","uniqueKey":"error.message","typeLabel":"string"},"param":{"type":"string","uniqueKey":"error.param","typeLabel":"string"},"processor_code":{"type":"string","uniqueKey":"error.processor_code","typeLabel":"string"},"request_id":{"type":"string","uniqueKey":"error.request_id","typeLabel":"string"},"request_log_url":{"description":"Deep link to this request in the dashboard. Present once the dashboard log view exists.","type":"string","uniqueKey":"error.request_log_url","typeLabel":"string"},"type":{"enum":["invalid_request_error","authentication_error","permission_error","card_error","processor_error","idempotency_error","rate_limit_error","api_error"],"type":"string","uniqueKey":"error.type","typeLabel":"enum\u003cstring>"}},"type":"object","uniqueKey":"error","typeLabel":"object"}},"type":"object","uniqueKey":"","typeLabel":"object"},"examples":{"invalid_json":{"title":"invalid_json","value":{"error":{"type":"invalid_request_error","code":"invalid_json","audience":"developer","message":"The request body is not valid JSON.","advice_code":"do_not_try_again","agent_message":null,"display_message":null,"agent_action":null,"doc_url":"https://docs.ringup.dev/api-reference/error-codes#invalid_json","request_id":"req_8f3c1d2ab4e9"}}},"missing_required_fields":{"title":"missing_required_fields","value":{"error":{"type":"invalid_request_error","code":"missing_required_fields","audience":"developer","message":"A required parameter is missing.","param":"caller_phone","advice_code":"do_not_try_again","agent_message":null,"display_message":null,"agent_action":null,"doc_url":"https://docs.ringup.dev/api-reference/error-codes#missing_required_fields","request_id":"req_8f3c1d2ab4e9"}}}},"exampleType":"examples"}},"exampleType":"examples"},"9e613909-2f45-432a-9a81-86329606d9a6":{"description":"`invalid_key` The API key is missing, malformed, revoked, or does not match the mode of the resource.","content":{"application/json":{"schema":{"additionalProperties":false,"description":"THE error object. Identical on every endpoint: provisioning, identify, checkout, cards, charge. A failed charge (which arrives as a 200 with `status: \"failed\"`) carries the SAME fields under `failure`, so a developer writes one parser and it works everywhere.","properties":{"error":{"additionalProperties":false,"properties":{"advice_code":{"description":"try_again_later | confirm_card_data | do_not_try_again","enum":["try_again_later","do_not_try_again","confirm_card_data"],"type":"string","uniqueKey":"error.advice_code","typeLabel":"enum\u003cstring>"},"agent_action":{"oneOf":[{"type":"string","description":"Null on every `developer`-audience error: see agent_message.","enum":["retry_card","offer_different_card","send_link","end_call","escalate"],"uniqueKey":"error.agent_action.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","description":"Null on every `developer`-audience error: see agent_message.","uniqueKey":"error.agent_action.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.agent_action","typeLabel":"enum\u003cstring> | null"},"agent_message":{"oneOf":[{"description":"Speak verbatim WHEN NON-NULL. Null on every `developer`-audience error.","type":"string","uniqueKey":"error.agent_message.oneOf.0","typeLabel":"string"},{"description":"Speak verbatim WHEN NON-NULL. Null on every `developer`-audience error.","type":"null","uniqueKey":"error.agent_message.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.agent_message","typeLabel":"string | null"},"audience":{"description":"Who this error is for. Drives whether there is anything to speak at all.","enum":["developer","caller"],"type":"string","uniqueKey":"error.audience","typeLabel":"enum\u003cstring>"},"charge":{"description":"Present when the error concerns a specific charge.","type":"string","uniqueKey":"error.charge","typeLabel":"string"},"code":{"enum":["invalid_json","missing_required_fields","invalid_value","invalid_key","vendor_not_provisioned","merchant_not_found","merchant_not_connected","invalid_processor","invalid_credentials","invalid_payment_policy","invalid_payment_policy_amount_cents","session_not_found","session_expired","session_create_failed","session_missing_consumer","missing_checkout_session_id","order_lookup_failed","order_lookup_unsupported","instrument_not_found","instrument_not_authorized","card_not_on_file","missing_instrument_fields","processor_mismatch","needs_enrollment","charge_details_mismatch","card_save_failed","card_declined","processor_unavailable","merchant_credentials_invalid","invalid_vault","key_not_found","invalid_environment","invalid_url","invalid_events","invalid_ttl","invalid_state_key","not_found","not_configured","rate_limit","internal_error"],"type":"string","uniqueKey":"error.code","typeLabel":"enum\u003cstring>"},"decline_code":{"type":"string","uniqueKey":"error.decline_code","typeLabel":"string"},"display_message":{"oneOf":[{"description":"The same fact written for a screen. Null on `developer`-audience errors.","type":"string","uniqueKey":"error.display_message.oneOf.0","typeLabel":"string"},{"description":"The same fact written for a screen. Null on `developer`-audience errors.","type":"null","uniqueKey":"error.display_message.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.display_message","typeLabel":"string | null"},"doc_url":{"type":"string","uniqueKey":"error.doc_url","typeLabel":"string"},"message":{"type":"string","uniqueKey":"error.message","typeLabel":"string"},"param":{"type":"string","uniqueKey":"error.param","typeLabel":"string"},"processor_code":{"type":"string","uniqueKey":"error.processor_code","typeLabel":"string"},"request_id":{"type":"string","uniqueKey":"error.request_id","typeLabel":"string"},"request_log_url":{"description":"Deep link to this request in the dashboard. Present once the dashboard log view exists.","type":"string","uniqueKey":"error.request_log_url","typeLabel":"string"},"type":{"enum":["invalid_request_error","authentication_error","permission_error","card_error","processor_error","idempotency_error","rate_limit_error","api_error"],"type":"string","uniqueKey":"error.type","typeLabel":"enum\u003cstring>"}},"type":"object","uniqueKey":"error","typeLabel":"object"}},"type":"object","uniqueKey":"","typeLabel":"object"},"examples":{"invalid_key":{"title":"invalid_key","value":{"error":{"type":"authentication_error","code":"invalid_key","audience":"developer","message":"The API key is missing, malformed, revoked, or does not match the mode of the resource.","advice_code":"do_not_try_again","agent_message":null,"display_message":null,"agent_action":null,"doc_url":"https://docs.ringup.dev/api-reference/error-codes#invalid_key","request_id":"req_8f3c1d2ab4e9"}}}},"exampleType":"examples"}},"exampleType":"examples"},"02455b59-a3dc-42d3-a11b-bf8a48df0326":{"description":"`merchant_not_found` No merchant with that id belongs to your account.","content":{"application/json":{"schema":{"additionalProperties":false,"description":"THE error object. Identical on every endpoint: provisioning, identify, checkout, cards, charge. A failed charge (which arrives as a 200 with `status: \"failed\"`) carries the SAME fields under `failure`, so a developer writes one parser and it works everywhere.","properties":{"error":{"additionalProperties":false,"properties":{"advice_code":{"description":"try_again_later | confirm_card_data | do_not_try_again","enum":["try_again_later","do_not_try_again","confirm_card_data"],"type":"string","uniqueKey":"error.advice_code","typeLabel":"enum\u003cstring>"},"agent_action":{"oneOf":[{"type":"string","description":"Null on every `developer`-audience error: see agent_message.","enum":["retry_card","offer_different_card","send_link","end_call","escalate"],"uniqueKey":"error.agent_action.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","description":"Null on every `developer`-audience error: see agent_message.","uniqueKey":"error.agent_action.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.agent_action","typeLabel":"enum\u003cstring> | null"},"agent_message":{"oneOf":[{"description":"Speak verbatim WHEN NON-NULL. Null on every `developer`-audience error.","type":"string","uniqueKey":"error.agent_message.oneOf.0","typeLabel":"string"},{"description":"Speak verbatim WHEN NON-NULL. Null on every `developer`-audience error.","type":"null","uniqueKey":"error.agent_message.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.agent_message","typeLabel":"string | null"},"audience":{"description":"Who this error is for. Drives whether there is anything to speak at all.","enum":["developer","caller"],"type":"string","uniqueKey":"error.audience","typeLabel":"enum\u003cstring>"},"charge":{"description":"Present when the error concerns a specific charge.","type":"string","uniqueKey":"error.charge","typeLabel":"string"},"code":{"enum":["invalid_json","missing_required_fields","invalid_value","invalid_key","vendor_not_provisioned","merchant_not_found","merchant_not_connected","invalid_processor","invalid_credentials","invalid_payment_policy","invalid_payment_policy_amount_cents","session_not_found","session_expired","session_create_failed","session_missing_consumer","missing_checkout_session_id","order_lookup_failed","order_lookup_unsupported","instrument_not_found","instrument_not_authorized","card_not_on_file","missing_instrument_fields","processor_mismatch","needs_enrollment","charge_details_mismatch","card_save_failed","card_declined","processor_unavailable","merchant_credentials_invalid","invalid_vault","key_not_found","invalid_environment","invalid_url","invalid_events","invalid_ttl","invalid_state_key","not_found","not_configured","rate_limit","internal_error"],"type":"string","uniqueKey":"error.code","typeLabel":"enum\u003cstring>"},"decline_code":{"type":"string","uniqueKey":"error.decline_code","typeLabel":"string"},"display_message":{"oneOf":[{"description":"The same fact written for a screen. Null on `developer`-audience errors.","type":"string","uniqueKey":"error.display_message.oneOf.0","typeLabel":"string"},{"description":"The same fact written for a screen. Null on `developer`-audience errors.","type":"null","uniqueKey":"error.display_message.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.display_message","typeLabel":"string | null"},"doc_url":{"type":"string","uniqueKey":"error.doc_url","typeLabel":"string"},"message":{"type":"string","uniqueKey":"error.message","typeLabel":"string"},"param":{"type":"string","uniqueKey":"error.param","typeLabel":"string"},"processor_code":{"type":"string","uniqueKey":"error.processor_code","typeLabel":"string"},"request_id":{"type":"string","uniqueKey":"error.request_id","typeLabel":"string"},"request_log_url":{"description":"Deep link to this request in the dashboard. Present once the dashboard log view exists.","type":"string","uniqueKey":"error.request_log_url","typeLabel":"string"},"type":{"enum":["invalid_request_error","authentication_error","permission_error","card_error","processor_error","idempotency_error","rate_limit_error","api_error"],"type":"string","uniqueKey":"error.type","typeLabel":"enum\u003cstring>"}},"type":"object","uniqueKey":"error","typeLabel":"object"}},"type":"object","uniqueKey":"","typeLabel":"object"},"examples":{"merchant_not_found":{"title":"merchant_not_found","value":{"error":{"type":"invalid_request_error","code":"merchant_not_found","audience":"developer","message":"No merchant with that id belongs to your account.","advice_code":"do_not_try_again","agent_message":null,"display_message":null,"agent_action":null,"doc_url":"https://docs.ringup.dev/api-reference/error-codes#merchant_not_found","request_id":"req_8f3c1d2ab4e9"}}}},"exampleType":"examples"}},"exampleType":"examples"},"3640ae03-5eee-41ea-9901-ab6c172be3b3":{"description":"`order_lookup_unsupported` This processor cannot resolve an order total by reference.","content":{"application/json":{"schema":{"additionalProperties":false,"description":"THE error object. Identical on every endpoint: provisioning, identify, checkout, cards, charge. A failed charge (which arrives as a 200 with `status: \"failed\"`) carries the SAME fields under `failure`, so a developer writes one parser and it works everywhere.","properties":{"error":{"additionalProperties":false,"properties":{"advice_code":{"description":"try_again_later | confirm_card_data | do_not_try_again","enum":["try_again_later","do_not_try_again","confirm_card_data"],"type":"string","uniqueKey":"error.advice_code","typeLabel":"enum\u003cstring>"},"agent_action":{"oneOf":[{"type":"string","description":"Null on every `developer`-audience error: see agent_message.","enum":["retry_card","offer_different_card","send_link","end_call","escalate"],"uniqueKey":"error.agent_action.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","description":"Null on every `developer`-audience error: see agent_message.","uniqueKey":"error.agent_action.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.agent_action","typeLabel":"enum\u003cstring> | null"},"agent_message":{"oneOf":[{"description":"Speak verbatim WHEN NON-NULL. Null on every `developer`-audience error.","type":"string","uniqueKey":"error.agent_message.oneOf.0","typeLabel":"string"},{"description":"Speak verbatim WHEN NON-NULL. Null on every `developer`-audience error.","type":"null","uniqueKey":"error.agent_message.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.agent_message","typeLabel":"string | null"},"audience":{"description":"Who this error is for. Drives whether there is anything to speak at all.","enum":["developer","caller"],"type":"string","uniqueKey":"error.audience","typeLabel":"enum\u003cstring>"},"charge":{"description":"Present when the error concerns a specific charge.","type":"string","uniqueKey":"error.charge","typeLabel":"string"},"code":{"enum":["invalid_json","missing_required_fields","invalid_value","invalid_key","vendor_not_provisioned","merchant_not_found","merchant_not_connected","invalid_processor","invalid_credentials","invalid_payment_policy","invalid_payment_policy_amount_cents","session_not_found","session_expired","session_create_failed","session_missing_consumer","missing_checkout_session_id","order_lookup_failed","order_lookup_unsupported","instrument_not_found","instrument_not_authorized","card_not_on_file","missing_instrument_fields","processor_mismatch","needs_enrollment","charge_details_mismatch","card_save_failed","card_declined","processor_unavailable","merchant_credentials_invalid","invalid_vault","key_not_found","invalid_environment","invalid_url","invalid_events","invalid_ttl","invalid_state_key","not_found","not_configured","rate_limit","internal_error"],"type":"string","uniqueKey":"error.code","typeLabel":"enum\u003cstring>"},"decline_code":{"type":"string","uniqueKey":"error.decline_code","typeLabel":"string"},"display_message":{"oneOf":[{"description":"The same fact written for a screen. Null on `developer`-audience errors.","type":"string","uniqueKey":"error.display_message.oneOf.0","typeLabel":"string"},{"description":"The same fact written for a screen. Null on `developer`-audience errors.","type":"null","uniqueKey":"error.display_message.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.display_message","typeLabel":"string | null"},"doc_url":{"type":"string","uniqueKey":"error.doc_url","typeLabel":"string"},"message":{"type":"string","uniqueKey":"error.message","typeLabel":"string"},"param":{"type":"string","uniqueKey":"error.param","typeLabel":"string"},"processor_code":{"type":"string","uniqueKey":"error.processor_code","typeLabel":"string"},"request_id":{"type":"string","uniqueKey":"error.request_id","typeLabel":"string"},"request_log_url":{"description":"Deep link to this request in the dashboard. Present once the dashboard log view exists.","type":"string","uniqueKey":"error.request_log_url","typeLabel":"string"},"type":{"enum":["invalid_request_error","authentication_error","permission_error","card_error","processor_error","idempotency_error","rate_limit_error","api_error"],"type":"string","uniqueKey":"error.type","typeLabel":"enum\u003cstring>"}},"type":"object","uniqueKey":"error","typeLabel":"object"}},"type":"object","uniqueKey":"","typeLabel":"object"},"examples":{"order_lookup_unsupported":{"title":"order_lookup_unsupported","value":{"error":{"type":"invalid_request_error","code":"order_lookup_unsupported","audience":"developer","message":"This processor cannot resolve an order total by reference.","advice_code":"do_not_try_again","agent_message":null,"display_message":null,"agent_action":null,"doc_url":"https://docs.ringup.dev/api-reference/error-codes#order_lookup_unsupported","request_id":"req_8f3c1d2ab4e9"}}}},"exampleType":"examples"}},"exampleType":"examples"},"dcb93b91-a1a7-4369-967e-eaf6d6bce35c":{"description":"`order_lookup_failed` The processor could not be reached to resolve the order total.","content":{"application/json":{"schema":{"additionalProperties":false,"description":"THE error object. Identical on every endpoint: provisioning, identify, checkout, cards, charge. A failed charge (which arrives as a 200 with `status: \"failed\"`) carries the SAME fields under `failure`, so a developer writes one parser and it works everywhere.","properties":{"error":{"additionalProperties":false,"properties":{"advice_code":{"description":"try_again_later | confirm_card_data | do_not_try_again","enum":["try_again_later","do_not_try_again","confirm_card_data"],"type":"string","uniqueKey":"error.advice_code","typeLabel":"enum\u003cstring>"},"agent_action":{"oneOf":[{"type":"string","description":"Null on every `developer`-audience error: see agent_message.","enum":["retry_card","offer_different_card","send_link","end_call","escalate"],"uniqueKey":"error.agent_action.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","description":"Null on every `developer`-audience error: see agent_message.","uniqueKey":"error.agent_action.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.agent_action","typeLabel":"enum\u003cstring> | null"},"agent_message":{"oneOf":[{"description":"Speak verbatim WHEN NON-NULL. Null on every `developer`-audience error.","type":"string","uniqueKey":"error.agent_message.oneOf.0","typeLabel":"string"},{"description":"Speak verbatim WHEN NON-NULL. Null on every `developer`-audience error.","type":"null","uniqueKey":"error.agent_message.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.agent_message","typeLabel":"string | null"},"audience":{"description":"Who this error is for. Drives whether there is anything to speak at all.","enum":["developer","caller"],"type":"string","uniqueKey":"error.audience","typeLabel":"enum\u003cstring>"},"charge":{"description":"Present when the error concerns a specific charge.","type":"string","uniqueKey":"error.charge","typeLabel":"string"},"code":{"enum":["invalid_json","missing_required_fields","invalid_value","invalid_key","vendor_not_provisioned","merchant_not_found","merchant_not_connected","invalid_processor","invalid_credentials","invalid_payment_policy","invalid_payment_policy_amount_cents","session_not_found","session_expired","session_create_failed","session_missing_consumer","missing_checkout_session_id","order_lookup_failed","order_lookup_unsupported","instrument_not_found","instrument_not_authorized","card_not_on_file","missing_instrument_fields","processor_mismatch","needs_enrollment","charge_details_mismatch","card_save_failed","card_declined","processor_unavailable","merchant_credentials_invalid","invalid_vault","key_not_found","invalid_environment","invalid_url","invalid_events","invalid_ttl","invalid_state_key","not_found","not_configured","rate_limit","internal_error"],"type":"string","uniqueKey":"error.code","typeLabel":"enum\u003cstring>"},"decline_code":{"type":"string","uniqueKey":"error.decline_code","typeLabel":"string"},"display_message":{"oneOf":[{"description":"The same fact written for a screen. Null on `developer`-audience errors.","type":"string","uniqueKey":"error.display_message.oneOf.0","typeLabel":"string"},{"description":"The same fact written for a screen. Null on `developer`-audience errors.","type":"null","uniqueKey":"error.display_message.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.display_message","typeLabel":"string | null"},"doc_url":{"type":"string","uniqueKey":"error.doc_url","typeLabel":"string"},"message":{"type":"string","uniqueKey":"error.message","typeLabel":"string"},"param":{"type":"string","uniqueKey":"error.param","typeLabel":"string"},"processor_code":{"type":"string","uniqueKey":"error.processor_code","typeLabel":"string"},"request_id":{"type":"string","uniqueKey":"error.request_id","typeLabel":"string"},"request_log_url":{"description":"Deep link to this request in the dashboard. Present once the dashboard log view exists.","type":"string","uniqueKey":"error.request_log_url","typeLabel":"string"},"type":{"enum":["invalid_request_error","authentication_error","permission_error","card_error","processor_error","idempotency_error","rate_limit_error","api_error"],"type":"string","uniqueKey":"error.type","typeLabel":"enum\u003cstring>"}},"type":"object","uniqueKey":"error","typeLabel":"object"}},"type":"object","uniqueKey":"","typeLabel":"object"},"examples":{"order_lookup_failed":{"title":"order_lookup_failed","value":{"error":{"type":"processor_error","code":"order_lookup_failed","audience":"caller","message":"The processor could not be reached to resolve the order total.","advice_code":"try_again_later","agent_message":"I'm having trouble taking payment right now. Let me get someone to help you.","display_message":"I'm having trouble taking payment right now. Let me get someone to help you.","agent_action":null,"doc_url":"https://docs.ringup.dev/api-reference/error-codes#order_lookup_failed","request_id":"req_8f3c1d2ab4e9"}}}},"exampleType":"examples"}},"exampleType":"examples"}},"security":{"9e9794ac-2453-4e02-b6ba-45a31689c48f":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"rk_live_…","scopes":[],"schemeName":"bearerAuth"}}},"servers":{"27b78901-71f8-4c6b-9167-a7f12d7c34d6":{"url":"https://api.ringup.dev"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"http","scheme":"bearer","bearerFormat":"rk_live_…","scopes":[],"schemeName":"bearerAuth"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"Bearer authentication header of the form `Bearer \u003ctoken>`, where `\u003ctoken>` is your auth token.","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"bearerAuth","name":"Authorization"}],"title":"bearerAuth"}]},"originalFileLocation":"api-reference/openapi.json"},"subdomain":"ringup","siteName":"Ringup","title":"Create a checkout session - Ringup","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-19T19:39:33.708Z","originalFileLocation":"api-reference/create-a-checkout-session.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=\"Resolve the amount, apply the merchant\u0026#x27;s payment policy, and return the transfer target when payment is required.\">\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=\"Create a checkout session - Ringup\">\u003cmeta data-mint-head property=\"og:description\" content=\"Resolve the amount, apply the merchant\u0026#x27;s payment policy, and return the transfer target when payment is required.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Ringup\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.ringup.dev/api-reference/create-a-checkout-session\">\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=API+Reference\u0026amp;title=Create+a+checkout+session\u0026amp;description=Resolve+the+amount%2C+apply+the+merchant%27s+payment+policy%2C+and+return+the+transfer+target+when+payment+is+required.\u0026amp;theme=b118f4e35f9b7ec55672e6b7\u0026amp;signature=a136a0e6fae87d1c7f70945da866254858deb87891e6f9e1cc74682888377154\">\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=\"Create a checkout session - Ringup\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Resolve the amount, apply the merchant\u0026#x27;s payment policy, and return the transfer target when payment is required.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://ringup.mintlify.site/_mintlify/api/og/v2?division=API+Reference\u0026amp;title=Create+a+checkout+session\u0026amp;description=Resolve+the+amount%2C+apply+the+merchant%27s+payment+policy%2C+and+return+the+transfer+target+when+payment+is+required.\u0026amp;theme=b118f4e35f9b7ec55672e6b7\u0026amp;signature=a136a0e6fae87d1c7f70945da866254858deb87891e6f9e1cc74682888377154\">\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/api-reference/create-a-checkout-session\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/create-a-checkout-session.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/api-reference/create-a-checkout-session#webpage\",\"url\":\"https://docs.ringup.dev/api-reference/create-a-checkout-session\",\"name\":\"Create a checkout session\",\"description\":\"Resolve the amount, apply the merchant's payment policy, and return the transfer target when payment is required.\",\"dateModified\":\"2026-10-19T19:39:33.708Z\",\"isPartOf\":{\"@id\":\"https://docs.ringup.dev#website\"},\"breadcrumb\":{\"@id\":\"https://docs.ringup.dev/api-reference/create-a-checkout-session#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.ringup.dev/api-reference/create-a-checkout-session#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Tools\",\"item\":\"https://docs.ringup.dev/api-reference/recognize-a-caller\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"API Reference\",\"item\":\"https://docs.ringup.dev/api-reference/recognize-a-caller\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Create a checkout session\",\"item\":\"https://docs.ringup.dev/api-reference/create-a-checkout-session\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.ringup.dev/api-reference/create-a-checkout-session#apireference\",\"headline\":\"Create a checkout session\",\"name\":\"Create a checkout session\",\"description\":\"Resolve the amount, apply the merchant's payment policy, and return the transfer target when payment is required.\",\"url\":\"https://docs.ringup.dev/api-reference/create-a-checkout-session\",\"mainEntityOfPage\":{\"@id\":\"https://docs.ringup.dev/api-reference/create-a-checkout-session#webpage\"},\"dateModified\":\"2026-10-19T19:39:33.708Z\",\"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","pages":[{"title":"Documentation","href":""}]},{"tab":"API reference","groups":[{"group":"API reference","pages":[{"title":"Introduction","href":"/api-reference/introduction"}]},{"group":"Tools","pages":[{"group":"API Reference","pages":[{"title":"Recognize a caller","description":"Look a caller up by phone number. Returns who they are, never what they can pay with: cards depend on a merchant this endpoint never sees.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /v1/identify","href":"/api-reference/recognize-a-caller"},{"title":"Create a checkout session","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /v1/create_checkout","href":"/api-reference/create-a-checkout-session"},{"title":"Retrieve a checkout session","description":"Read a session and its charge. A lookup, so a decline reads as 200 with a failed charge.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/checkout_sessions/{checkout_session_id}","href":"/api-reference/retrieve-a-checkout-session"},{"title":"Charge a saved card","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /v1/charge","href":"/api-reference/charge-a-saved-card"},{"title":"Send a pay link","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /v1/send_link","href":"/api-reference/send-a-pay-link"},{"title":"List webhook endpoints","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /v1/webhook_endpoints","href":"/api-reference/list-webhook-endpoints"},{"title":"Create a webhook endpoint","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /v1/webhook_endpoints","href":"/api-reference/create-a-webhook-endpoint"}]}]},{"group":"Events","pages":[{"title":"Events","href":"/api-reference/events"}]},{"group":"Errors","pages":[{"title":"Errors","href":"/api-reference/errors"},{"title":"Error codes","href":"/api-reference/error-codes"},{"title":"Handling errors","href":"/api-reference/handling-errors"}]}]},{"tab":"Changelog","pages":[{"title":"Changelog","href":"/changelog"}]}]},"basePath":"","title":"Create a checkout session - Ringup","buildId":"dpl_DTau1J5HqS9UTgVSDwGksstFWtPa","deploymentId":"dpl_DTau1J5HqS9UTgVSDwGksstFWtPa","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-5FCzAcfS.js","utils-SLtAG4EZ.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-2DZi8ZMu.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-D7J3nkzE.js","snippetPresets-D0Alv0AH.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","conditional-requirements-CFM0id0Q.js","ApiExamples-BI4qNJ2c.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-BD3uyr8j.js","shallow-D8iEBr5z.js","getApiPlaygroundDisplay-CgNP4lzR.js","CodeSnippet-CX-QHuMs.js","CodeSnippets-VlXE-ZUf.js","Page-D9ithiIZ.js","getPastedJson-DYNQkZ1M.js","icon-CzacdwOi.js","MethodPill-2JVqoYKi.js","DuplicateIcon-_xVXs-U8.js","createIcon-BRHrweLo.js","DynamicMarkdown-mQG_iQiE.js","SectionHeading-DMpJzv8f.js","axios-vUo_bRtp.js","Markdown-5FGIym-8.js","clsx-D-TRO5q5.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-CdrJecqK.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-CHlcWBLM.js"]}