{ "action": "<string>", "device_code": "<string>", "expires_in": 900, "interval": 5, "message": "Pairing started. Your owner signs up, pays and approves on the link.", "owner_message": "Here's your link: https://dashboard.brilo.ai/agent-setup?code=<user_code>\nYour code: <user_code>\nSign up and pay on that page. The code should match. It lasts 15 minutes.", "user_code": "<user_code>", "verification_url": "<string>", "verification_url_complete": "<string>"}
Agent pairing
Start pairing this assistant with a Brilo phone number
Returns a short code to show the user and a link they can open. They sign up, pay and approve on that page; you call /poll until it says completed, and that response carries your API key.
Send your owner owner_message as written: it has the link with the code built in and the code on its own line. If you can only speak, read out verification_url and user_code instead. Codes last 15 minutes. Nothing is charged until the user approves it themselves.
Pass prefill with your owner’s name, email and phone if you know them, so their sign-up form arrives filled in.
POST
/
agent
/
onboarding
/
start
Start pairing this assistant with a Brilo phone number
{ "action": "<string>", "device_code": "<string>", "expires_in": 900, "interval": 5, "message": "Pairing started. Your owner signs up, pays and approves on the link.", "owner_message": "Here's your link: https://dashboard.brilo.ai/agent-setup?code=<user_code>\nYour code: <user_code>\nSign up and pay on that page. The code should match. It lasts 15 minutes.", "user_code": "<user_code>", "verification_url": "<string>", "verification_url_complete": "<string>"}
What to call your assistant on the approval screen, e.g. "Grok". Shown to the owner as an UNVERIFIED claim, because anyone can send anything here — it helps a person recognise the request they just made, and it is not a credential. Omit it and the screen says "your assistant" instead, which is the honest fallback.
Your owner's details, if you know them, so the sign-up form arrives filled in. Every field is optional; invalid values are dropped silently and never fail the request. Brilo does not store or log these: they travel only in the #fragment of verification_url_complete, which the owner's browser keeps to itself.
Ready-to-send text for your owner, built from this pairing. It has the link with the code already in it, and the code on its own line. Send it as is, with the link tappable. Do not rebuild it from verification_url, which has no code in it. In the example, <user_code> stands for your real code; the response always carries the real one.
Example:
"Here's your link: https://dashboard.brilo.ai/agent-setup?code=<user_code>\nYour code: <user_code>\nSign up and pay on that page. The code should match. It lasts 15 minutes."
The short code to read out or show the user. They type it at verification_url. Eight characters in two groups of four joined by a hyphen, from an alphabet with no confusable characters, so it never contains O, I, L, U, 0 or 1. Always use the value in your own response; never make one up.
The page without the code. Only for assistants that can only speak: read this out with user_code. If you can send a link, send verification_url_complete instead.
The same page with the code already filled in. This is the link to send (owner_message already contains it). Use verification_url only when you can only speak. Show the code either way: matching it against what you displayed is the check that stops someone being walked through this flow by an attacker.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Brilo","colors":{"primary":"#8C7AE6","light":"#ADB5BD","dark":"#343A40"},"logo":{"light":"https://mintcdn.com/brilo/MxABbmjUyMnseUhC/logo/light.png?fit=max\u0026auto=format\u0026n=MxABbmjUyMnseUhC\u0026q=85\u0026s=d4d6fb2d6eb070743955e91ad4de3991","dark":"https://mintcdn.com/brilo/pWKPO3fYjsyPFmaW/logo/dark.svg?fit=max\u0026auto=format\u0026n=pWKPO3fYjsyPFmaW\u0026q=85\u0026s=bdc949595db36f3fd5eb662601ca3208"},"favicon":"https://mintcdn.com/brilo/QQo147ZHWnpiYhnW/favicon.svg?fit=max\u0026auto=format\u0026n=QQo147ZHWnpiYhnW\u0026q=85\u0026s=2aada838f7a27240e42ba75002f91501","appearance":{"default":"dark"},"navbar":{"links":[{"href":"mailto:support@brilo.ai","label":"Support"}],"primary":{"type":"button","label":"Get Keys","href":"https://dashboard.brilo.ai/settings/developer/api-keys"}},"footer":{"socials":{"x":"https://x.com/hellobrilo","linkedin":"https://www.linkedin.com/company/brilo"}},"seo":{"metatags":{"og:locale":"en_US","twitter:site":"@hellobrilo"},"indexing":"navigable"},"icons":{"library":"lucide"},"contextual":{"options":["copy","chatgpt","claude","add-mcp","cursor","vscode"],"display":"header"},"styling":{"latex":true},"navigation":{"global":{"anchors":[{"anchor":"Blog","icon":"newspaper","href":"https://brilo.ai/resources"},{"anchor":"Community","icon":{"style":"brands","name":"discord","library":"fontawesome"},"href":"https://discord.gg/4rjVc2Zt6P"}]},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"brilo","hasAudioNarration":false,"actualSubdomain":"brilo","customDomains":["docs.brilo.ai"],"gitSource":{"type":"github","owner":"briloai","repo":"brilo-api","deployBranch":"main","contentDirectory":"docs","isPrivate":true,"mountPath":"","label":""},"entitlements":{},"buildId":"6af31a7339d0955f17815efe","clientVersion":"0.0.4094","searchFilterCounts":[{"language":"default","tag":"Guides","count":124},{"language":"default","tag":"API Reference","count":52},{"language":"default","tag":"Configure","count":41},{"language":"default","tag":"Agents","count":34},{"language":"default","tag":"Campaigns","count":17},{"language":"default","tag":"Agents and versions","count":16},{"language":"default","tag":"Deploy","count":15},{"language":"default","tag":"Phone numbers","count":14},{"language":"default","tag":"Fix a problem","count":10},{"language":"default","tag":"Actions","count":10}]},"assistantConfig":{},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-rbac-roles","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}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"api-reference/agent-pairing/start-pairing-this-assistant-with-a-brilo-phone-number","slug":"/api-reference/agent-pairing/start-pairing-this-assistant-with-a-brilo-phone-number","pageMetadata":{"title":"Start pairing this assistant with a Brilo phone number","description":"Returns a short code to show the user and a link they can open. They sign up, pay and approve on that page; you call /poll until it says `completed`, and that response carries your API key.\n\nSend your owner `owner_message` as written: it has the link with the code built in and the code on its own line. If you can only speak, read out `verification_url` and `user_code` instead. Codes last 15 minutes. Nothing is charged until the user approves it themselves.\n\nPass `prefill` with your owner's name, email and phone if you know them, so their sign-up form arrives filled in.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /agent/onboarding/start","href":"/api-reference/agent-pairing/start-pairing-this-assistant-with-a-brilo-phone-number","autogeneratedByOpenApi":true},"description":{"compiledSource":"\"use strict\";\nconst {Fragment: _Fragment, jsx: _jsx, jsxs: _jsxs} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n code: \"code\",\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_Fragment, {\n children: [_jsxs(_components.p, {\n children: [\"Returns a short code to show the user and a link they can open. They sign up, pay and approve on that page; you call /poll until it says \", _jsx(_components.code, {\n children: \"completed\"\n }), \", and that response carries your API key.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Send your owner \", _jsx(_components.code, {\n children: \"owner_message\"\n }), \" as written: it has the link with the code built in and the code on its own line. If you can only speak, read out \", _jsx(_components.code, {\n children: \"verification_url\"\n }), \" and \", _jsx(_components.code, {\n children: \"user_code\"\n }), \" instead. Codes last 15 minutes. Nothing is charged until the user approves it themselves.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Pass \", _jsx(_components.code, {\n children: \"prefill\"\n }), \" with your owner’s name, email and phone if you know them, so their sign-up form arrives filled in.\"]\n })]\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":"Start pairing this assistant with a Brilo phone number","description":"Returns a short code to show the user and a link they can open. They sign up, pay and approve on that page; you call /poll until it says `completed`, and that response carries your API key.\n\nSend your owner `owner_message` as written: it has the link with the code built in and the code on its own line. If you can only speak, read out `verification_url` and `user_code` instead. Codes last 15 minutes. Nothing is charged until the user approves it themselves.\n\nPass `prefill` with your owner's name, email and phone if you know them, so their sign-up form arrives filled in.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /agent/onboarding/start","href":"/api-reference/agent-pairing/start-pairing-this-assistant-with-a-brilo-phone-number","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"description":"Returns a short code to show the user and a link they can open. They sign up, pay and approve on that page; you call /poll until it says `completed`, and that response carries your API key.\n\nSend your owner `owner_message` as written: it has the link with the code built in and the code on its own line. If you can only speak, read out `verification_url` and `user_code` instead. Codes last 15 minutes. Nothing is charged until the user approves it themselves.\n\nPass `prefill` with your owner's name, email and phone if you know them, so their sign-up form arrives filled in.","operationId":"AgentPairingController_start","parameters":[],"requestBody":"1437e87c-014b-441c-b740-68f67f5a53cf","responses":{"201":"453f2f8f-7aec-4f75-a294-c178a79d7d3a"},"security":[],"summary":"Start pairing this assistant with a Brilo phone number","tags":["Agent pairing"],"method":"post","type":"path","servers":["01e4ba38-9a87-4e89-992c-ca2f8969e557"],"path":"/agent/onboarding/start","baseUrlOptions":["https://api.brilo.ai/v1"],"title":"Start pairing this assistant with a Brilo phone number","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{},"requestBody":{"content":{"application/json":{"schema":{"properties":{"client_name":{"description":"What to call your assistant on the approval screen, e.g. \"Grok\". Shown to the owner as an UNVERIFIED claim, because anyone can send anything here — it helps a person recognise the request they just made, and it is not a credential. Omit it and the screen says \"your assistant\" instead, which is the honest fallback.","example":"Grok","maxLength":64,"type":"string","uniqueKey":"client_name","typeLabel":"string"},"prefill":{"type":"object","description":"Your owner's details, if you know them, so the sign-up form arrives filled in. Every field is optional; invalid values are dropped silently and never fail the request. Brilo does not store or log these: they travel only in the #fragment of verification_url_complete, which the owner's browser keeps to itself.","properties":{"email":{"example":"maya@example.com","maxLength":128,"type":"string","uniqueKey":"prefill.email","typeLabel":"string"},"first_name":{"example":"Maya","maxLength":128,"type":"string","uniqueKey":"prefill.first_name","typeLabel":"string"},"last_name":{"example":"Chen","maxLength":128,"type":"string","uniqueKey":"prefill.last_name","typeLabel":"string"},"name":{"description":"Used only when first_name and last_name are both absent; split on the first space.","example":"Maya Chen","maxLength":128,"type":"string","uniqueKey":"prefill.name","typeLabel":"string"},"phone":{"description":"Normalised to E.164, with the US as the default region.","example":"+14155550123","maxLength":128,"type":"string","uniqueKey":"prefill.phone","typeLabel":"string"}},"uniqueKey":"prefill","typeLabel":"object"}},"type":"object","uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"client_name":"Grok","prefill":{"email":"maya@example.com","first_name":"Maya","last_name":"Chen","name":"Maya Chen","phone":"+14155550123"}}}},"exampleType":"generated"}},"required":true,"exampleType":"generated"},"responses":{"453f2f8f-7aec-4f75-a294-c178a79d7d3a":{"content":{"application/json":{"schema":{"properties":{"action":{"description":"What to do next, in plain English. Follow it: send owner_message as written, then poll.","type":"string","isRequired":true,"uniqueKey":"action","typeLabel":"string"},"device_code":{"description":"Your half of the pairing. Returned ONCE and never again — only its hash is stored — so keep it until the pairing finishes or fails.","type":"string","isRequired":true,"uniqueKey":"device_code","typeLabel":"string"},"expires_in":{"description":"Seconds until the code stops working.","example":900,"type":"number","isRequired":true,"uniqueKey":"expires_in","typeLabel":"number"},"interval":{"description":"Seconds to wait between polls. Polling faster is throttled.","example":5,"type":"number","isRequired":true,"uniqueKey":"interval","typeLabel":"number"},"message":{"description":"What just happened, in plain English.","example":"Pairing started. Your owner signs up, pays and approves on the link.","type":"string","isRequired":true,"uniqueKey":"message","typeLabel":"string"},"owner_message":{"description":"Ready-to-send text for your owner, built from this pairing. It has the link with the code already in it, and the code on its own line. Send it as is, with the link tappable. Do not rebuild it from verification_url, which has no code in it. In the example, \u003cuser_code> stands for your real code; the response always carries the real one.","example":"Here's your link: https://dashboard.brilo.ai/agent-setup?code=\u003cuser_code>\nYour code: \u003cuser_code>\nSign up and pay on that page. The code should match. It lasts 15 minutes.","type":"string","isRequired":true,"uniqueKey":"owner_message","typeLabel":"string"},"user_code":{"description":"The short code to read out or show the user. They type it at verification_url. Eight characters in two groups of four joined by a hyphen, from an alphabet with no confusable characters, so it never contains O, I, L, U, 0 or 1. Always use the value in your own response; never make one up.","example":"\u003cuser_code>","type":"string","isRequired":true,"uniqueKey":"user_code","typeLabel":"string"},"verification_url":{"description":"The page without the code. Only for assistants that can only speak: read this out with user_code. If you can send a link, send verification_url_complete instead.","type":"string","isRequired":true,"uniqueKey":"verification_url","typeLabel":"string"},"verification_url_complete":{"description":"The same page with the code already filled in. This is the link to send (owner_message already contains it). Use verification_url only when you can only speak. Show the code either way: matching it against what you displayed is the check that stops someone being walked through this flow by an attacker.","type":"string","isRequired":true,"uniqueKey":"verification_url_complete","typeLabel":"string"}},"required":["device_code","user_code","verification_url","verification_url_complete","expires_in","interval","message","action","owner_message"],"type":"object","uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"action":"\u003cstring>","device_code":"\u003cstring>","expires_in":900,"interval":5,"message":"Pairing started. Your owner signs up, pays and approves on the link.","owner_message":"Here's your link: https://dashboard.brilo.ai/agent-setup?code=\u003cuser_code>\nYour code: \u003cuser_code>\nSign up and pay on that page. The code should match. It lasts 15 minutes.","user_code":"\u003cuser_code>","verification_url":"\u003cstring>","verification_url_complete":"\u003cstring>"}}},"exampleType":"generated"}},"description":"","exampleType":"generated"}},"security":{},"servers":{"01e4ba38-9a87-4e89-992c-ca2f8969e557":{"description":"Production","url":"https://api.brilo.ai/v1"}}},"originalFileLocation":"api-reference/openapi.json"},"subdomain":"brilo","siteName":"Brilo","title":"Start pairing this assistant with a Brilo phone number - Brilo","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-11-06T13:34:48.181Z","originalFileLocation":"api-reference/agent-pairing/start-pairing-this-assistant-with-a-brilo-phone-number.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=\"dark\"}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=\"Returns a short code to show the user and a link they can open. They sign up, pay and approve on that page; you call /poll until it says completed, and that response carries your API key. Send your owner owner_message as written: it has the link with the code built in and the code on its own line. If you can only speak, read out verification_url and user_code instead. Codes last 15 minutes. Nothing is charged until the user approves it themselves. Pass prefill with your owner\u0026#x27;s name, email and phone if you know them, so their sign-up form arrives filled in.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Brilo\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/brilo/ASd0F1aN8luMwk5v/_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/brilo/ASd0F1aN8luMwk5v/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/brilo/ASd0F1aN8luMwk5v/_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/brilo/ASd0F1aN8luMwk5v/_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/brilo/ASd0F1aN8luMwk5v/_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/brilo/ASd0F1aN8luMwk5v/_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/brilo/ASd0F1aN8luMwk5v/_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/brilo/ASd0F1aN8luMwk5v/_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/brilo/ASd0F1aN8luMwk5v/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Start pairing this assistant with a Brilo phone number - Brilo\">\u003cmeta data-mint-head property=\"og:description\" content=\"Returns a short code to show the user and a link they can open. They sign up, pay and approve on that page; you call /poll until it says completed, and that response carries your API key. Send your owner owner_message as written: it has the link with the code built in and the code on its own line. If you can only speak, read out verification_url and user_code instead. Codes last 15 minutes. Nothing is charged until the user approves it themselves. Pass prefill with your owner\u0026#x27;s name, email and phone if you know them, so their sign-up form arrives filled in.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Brilo\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.brilo.ai/api-reference/agent-pairing/start-pairing-this-assistant-with-a-brilo-phone-number\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://brilo.mintlify.site/_mintlify/api/og/v2?division=Agent+pairing\u0026amp;title=Start+pairing+this+assistant+with+a+Brilo+phone+number\u0026amp;description=Returns+a+short+code+to+show+the+user+and+a+link+they+can+open.+They+sign+up%2C+pay+and+approve+on+that+page%3B+you+call+%2Fpoll+until+it+says+%60completed%60%2C+and+that+r\u0026amp;theme=a8d9604170048b9b1e5f08e4\u0026amp;signature=cdc25a9c1f501954f52176479c0c9d283c3475b42b6786c5c04254236f545651\">\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=\"Start pairing this assistant with a Brilo phone number - Brilo\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Returns a short code to show the user and a link they can open. They sign up, pay and approve on that page; you call /poll until it says completed, and that response carries your API key. Send your owner owner_message as written: it has the link with the code built in and the code on its own line. If you can only speak, read out verification_url and user_code instead. Codes last 15 minutes. Nothing is charged until the user approves it themselves. Pass prefill with your owner\u0026#x27;s name, email and phone if you know them, so their sign-up form arrives filled in.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://brilo.mintlify.site/_mintlify/api/og/v2?division=Agent+pairing\u0026amp;title=Start+pairing+this+assistant+with+a+Brilo+phone+number\u0026amp;description=Returns+a+short+code+to+show+the+user+and+a+link+they+can+open.+They+sign+up%2C+pay+and+approve+on+that+page%3B+you+call+%2Fpoll+until+it+says+%60completed%60%2C+and+that+r\u0026amp;theme=a8d9604170048b9b1e5f08e4\u0026amp;signature=cdc25a9c1f501954f52176479c0c9d283c3475b42b6786c5c04254236f545651\">\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/brilo/ASd0F1aN8luMwk5v/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Brilo\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#8C7AE6\">\u003cmeta data-mint-head name=\"og:locale\" content=\"en_US\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.brilo.ai/api-reference/agent-pairing/start-pairing-this-assistant-with-a-brilo-phone-number\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/agent-pairing/start-pairing-this-assistant-with-a-brilo-phone-number.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.brilo.ai/#organization\",\"name\":\"Brilo\",\"url\":\"https://docs.brilo.ai\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/brilo/MxABbmjUyMnseUhC/logo/light.png?fit=max\u0026auto=format\u0026n=MxABbmjUyMnseUhC\u0026q=85\u0026s=d4d6fb2d6eb070743955e91ad4de3991\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.brilo.ai#website\",\"name\":\"Brilo\",\"url\":\"https://docs.brilo.ai\",\"publisher\":{\"@id\":\"https://docs.brilo.ai/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.brilo.ai/api-reference/agent-pairing/start-pairing-this-assistant-with-a-brilo-phone-number#webpage\",\"url\":\"https://docs.brilo.ai/api-reference/agent-pairing/start-pairing-this-assistant-with-a-brilo-phone-number\",\"name\":\"Start pairing this assistant with a Brilo phone number\",\"description\":\"Returns a short code to show the user and a link they can open. They sign up, pay and approve on that page; you call /poll until it says completed, and that response carries your API key. Send your owner owner_message as written: it has the link with the code built in and the code on its own line. If you can only speak, read out verification_url and user_code instead. Codes last 15 minutes. Nothing is charged until the user approves it themselves. Pass prefill with your owner's name, email and phone if you know them, so their sign-up form arrives filled in.\",\"dateModified\":\"2026-11-06T13:34:48.181Z\",\"isPartOf\":{\"@id\":\"https://docs.brilo.ai#website\"},\"breadcrumb\":{\"@id\":\"https://docs.brilo.ai/api-reference/agent-pairing/start-pairing-this-assistant-with-a-brilo-phone-number#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.brilo.ai/api-reference/agent-pairing/start-pairing-this-assistant-with-a-brilo-phone-number#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Brilo\",\"item\":\"https://docs.brilo.ai\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Start pairing this assistant with a Brilo phone number\",\"item\":\"https://docs.brilo.ai/api-reference/agent-pairing/start-pairing-this-assistant-with-a-brilo-phone-number\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.brilo.ai/api-reference/agent-pairing/start-pairing-this-assistant-with-a-brilo-phone-number#apireference\",\"headline\":\"Start pairing this assistant with a Brilo phone number\",\"name\":\"Start pairing this assistant with a Brilo phone number\",\"description\":\"Returns a short code to show the user and a link they can open. They sign up, pay and approve on that page; you call /poll until it says completed, and that response carries your API key. Send your owner owner_message as written: it has the link with the code built in and the code on its own line. If you can only speak, read out verification_url and user_code instead. Codes last 15 minutes. Nothing is charged until the user approves it themselves. Pass prefill with your owner's name, email and phone if you know them, so their sign-up form arrives filled in.\",\"url\":\"https://docs.brilo.ai/api-reference/agent-pairing/start-pairing-this-assistant-with-a-brilo-phone-number\",\"mainEntityOfPage\":{\"@id\":\"https://docs.brilo.ai/api-reference/agent-pairing/start-pairing-this-assistant-with-a-brilo-phone-number#webpage\"},\"dateModified\":\"2026-11-06T13:34:48.181Z\",\"publisher\":{\"@id\":\"https://docs.brilo.ai/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.brilo.ai#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Brilo\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Brilo","nav":{"global":{"anchors":[{"anchor":"Blog","icon":"newspaper","href":"https://brilo.ai/resources"},{"anchor":"Community","icon":{"style":"brands","name":"discord","library":"fontawesome"},"href":"https://discord.gg/4rjVc2Zt6P"}]},"tabs":[{"tab":"Guides","icon":"book","pages":[{"title":"Guides","href":"/introduction"}]},{"tab":"API Reference","icon":"code-xml","groups":[{"group":"Endpoints","icon":"code-xml","pages":[{"title":"Introduction","href":"/api-reference/introduction"},{"title":null,"href":"/api-reference/endpoint/agent-builder"},{"title":"Call","href":"/api-reference/endpoint/call"},{"title":null,"href":"/api-reference/endpoint/call-tag"},{"title":null,"href":"/api-reference/endpoint/campaign"},{"title":null,"href":"/api-reference/endpoint/contact"},{"title":null,"href":"/api-reference/endpoint/custom-field"},{"title":null,"href":"/api-reference/endpoint/memory"},{"title":null,"href":"/api-reference/endpoint/list"},{"title":null,"href":"/api-reference/endpoint/voice"}]},{"group":"Agents","icon":"bot","pages":[{"title":"Change an agent through the API","href":"/api-reference/agents/quickstart"},{"title":"Versions are branches","href":"/api-reference/agents/versions"},{"title":"Buy and release phone numbers through the API","href":"/api-reference/agents/phone-numbers"},{"group":"Agents and versions","icon":"bot","pages":[{"title":"List agents","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /agents","href":"/api-reference/agents-public/list-agents"},{"title":"Create an agent","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /agents","href":"/api-reference/agents-public/create-an-agent"},{"title":"Get an agent","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /agents/{id}","href":"/api-reference/agents-public/get-an-agent"},{"title":"Update an agent","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json patch /agents/{id}","href":"/api-reference/agents-public/update-an-agent"},{"title":"Publish an agent","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /agents/{id}/publish","href":"/api-reference/agents-public/publish-an-agent"},{"title":"Delete an agent","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json delete /agents/{id}","href":"/api-reference/agents-public/delete-an-agent"},{"title":"List versions","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /agents/{id}/versions","href":"/api-reference/agents-public/list-versions"},{"title":"Create a version","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /agents/{id}/versions","href":"/api-reference/agents-public/create-a-version"},{"title":"Get a version","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /agents/{id}/versions/{vid}","href":"/api-reference/agents-public/get-a-version"},{"title":"Update a version","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json patch /agents/{id}/versions/{vid}","href":"/api-reference/agents-public/update-a-version"},{"title":"Discard a draft","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json delete /agents/{id}/versions/{vid}/draft","href":"/api-reference/agents-public/discard-a-draft"},{"title":"Publish a version","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /agents/{id}/versions/{vid}/publish","href":"/api-reference/agents-public/publish-a-version"},{"title":"Make a version live","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /agents/{id}/versions/{vid}/go_live","href":"/api-reference/agents-public/make-a-version-live"},{"title":"List commits","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /agents/{id}/versions/{vid}/history","href":"/api-reference/agents-public/list-commits"},{"title":"Restore a commit","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /agents/{id}/versions/{vid}/restore","href":"/api-reference/agents-public/restore-a-commit"},{"title":"Delete a version","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json delete /agents/{id}/versions/{vid}","href":"/api-reference/agents-public/delete-a-version"}]},{"group":"Phone numbers","icon":"phone","pages":[{"title":"Search numbers to buy","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /phone_numbers/available","href":"/api-reference/agents-public/search-numbers-to-buy"},{"title":"Buy a phone number","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /phone_numbers","href":"/api-reference/agents-public/buy-a-phone-number"},{"title":"List phone numbers","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /phone_numbers","href":"/api-reference/agents-public/list-phone-numbers"},{"title":"Get a phone number","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /phone_numbers/{id}","href":"/api-reference/agents-public/get-a-phone-number"},{"title":"Keep a number set to be released","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json patch /phone_numbers/{id}","href":"/api-reference/agents-public/keep-a-number-set-to-be-released"},{"title":"Release a phone number","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json delete /phone_numbers/{id}","href":"/api-reference/agents-public/release-a-phone-number"},{"title":"List an agent's phone numbers","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /agents/{id}/phone_numbers","href":"/api-reference/agents-public/list-an-agents-phone-numbers"},{"title":"Attach phone numbers to an agent","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /agents/{id}/phone_numbers/attach","href":"/api-reference/agents-public/attach-phone-numbers-to-an-agent"},{"title":"Detach phone numbers from an agent","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /agents/{id}/phone_numbers/detach","href":"/api-reference/agents-public/detach-phone-numbers-from-an-agent"}]},{"group":"Share links","icon":"link","pages":[{"title":"Share Links","href":"/api-reference/endpoint/share-link"},{"title":"Create a share link","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /agent/{agent_id}/share-link","href":"/api-reference/share-links/create-a-share-link"},{"title":"Get an agent's share link","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /agent/{agent_id}/share-link","href":"/api-reference/share-links/get-an-agents-share-link"},{"title":"Update a share link","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json patch /agent/{agent_id}/share-link/{link_id}","href":"/api-reference/share-links/update-a-share-link"},{"title":"Replace a share link","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /agent/{agent_id}/share-link/{link_id}/regenerate","href":"/api-reference/share-links/replace-a-share-link"},{"title":"Turn off a share link","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json delete /agent/{agent_id}/share-link/{link_id}","href":"/api-reference/share-links/turn-off-a-share-link"}]}]},{"group":"MCP server","icon":"unplug","pages":[{"title":"Brilo MCP server","href":"/api-reference/mcp/overview"},{"title":"Connect an MCP client","href":"/api-reference/mcp/connect"},{"title":"Connect Claude or ChatGPT","href":"/api-reference/mcp/claude-and-chatgpt"},{"title":"MCP tools","description":"Every tool the Brilo MCP server offers to clients signed in with an API key, with its parameters and an example request.","href":"/api-reference/mcp/tools"}]},{"group":"Agent pairing","icon":"smartphone","pages":[{"title":"Start pairing this assistant with a Brilo phone number","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /agent/onboarding/start","href":"/api-reference/agent-pairing/start-pairing-this-assistant-with-a-brilo-phone-number"},{"title":"Check whether the user has finished, and collect the API key","description":"Call this every `interval` seconds with the `device_code` from /start.\n\n`status` is one of: `pending` (they have not finished yet), `payment_failed` (card declined, the same code still works), `approved` or `provisioning` (paid, the number is being set up), `completed` (done: this response carries `api_key`, `phone_number` and `agent_id`), `denied`, `expired` or `failed` (stop polling). `ended` (the plan is over), `revoked` (the owner disconnected this assistant) and `replaced` (the owner connected this assistant again from a newer install, and that one holds the live key) also mean stop polling; none of them is fixed by pairing again.\n\nEvery response says what it means and what to do next, in `message` and `action`. The API key is only ever returned on `completed`: before then there is no phone number behind it.\n\nPolling faster than `interval` returns 429 with `code: slow_down` and `retry_after` (also sent as a `Retry-After` header). Wait that long, then poll again.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json post /agent/onboarding/poll","href":"/api-reference/agent-pairing/check-whether-the-user-has-finished-and-collect-the-api-key"},{"title":"How much of the plan is left right now","deprecated":null,"version":null,"openapi":"/api-reference/openapi.json get /usage","href":"/api-reference/usage/how-much-of-the-plan-is-left-right-now"}]},{"group":"Webhooks","icon":"webhook","pages":[{"title":"Post-Call Webhook","href":"/api-reference/webhooks/post-call"}]}]},{"tab":"Integrations","icon":"unplug","pages":[{"title":"Integrations","href":"/integrations"}]},{"tab":"Changelog","icon":"history","pages":[{"title":"Changelog","href":"/changelog"}]}]},"basePath":"","title":"Start pairing this assistant with a Brilo phone number - Brilo","buildId":"dpl_42LwxxU1kGN114H4XzwGYXa9ZDah","deploymentId":"dpl_42LwxxU1kGN114H4XzwGYXa9ZDah","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-C-hEh3I2.js","utils-CnF4QiUD.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-C7PVNbel.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-8ytevL2A.js","snippetPresets-BT1alx3v.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","conditional-requirements-CFM0id0Q.js","ApiExamples-BLXC0i_W.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-CyLIGI9_.js","shallow-DC0lGVIW.js","getApiPlaygroundDisplay-CgDQ85tN.js","CodeSnippet-6-I-Gpv9.js","CodeSnippets-BAk1kDdu.js","Page-C945cI-W.js","getPastedJson-B276RuWN.js","icon-BqP8etTm.js","MethodPill-DM6sbxG1.js","DuplicateIcon-PyJglOaE.js","createIcon-CMeOMAc_.js","DynamicMarkdown-BoyYAA8K.js","SectionHeading-DAYv3gvZ.js","axios-vUo_bRtp.js","Markdown-BhTTmazV.js","clsx-CR-RHrVC.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-CBUH0-zX.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-BmARFYNC.js"]}