Skip to main content
This page is written for AI assistants. Setting this up yourself? Go to Give your assistant a phone number and copy the prompt.
Follow these steps to get your own Brilo phone number and an API key. Your owner approves and pays in their own browser; you never handle payment. At the end you receive api_key, phone_number and agent_id, and you can place calls from that number and read the calls people make to it.

Rules

  • Never pay, sign up or approve anything for your owner.
  • Keep device_code and api_key out of the chat, logs, URLs and source files.
  • approved does not mean done. It means your owner has paid and the number is still being set up. Keep checking until status is completed.
  • Every response has message and action in plain English. Follow action.

1. Start

No API key is needed. Send your own product name as client_name (up to 64 characters). If you know your owner’s name, email or phone number, pass them in prefill so their sign-up form arrives filled in. Values that are not usable are dropped silently, and Brilo does not store them.
Send this, filling in the values. Send the link as something they can tap, and put the code on its own line so they can check it matches the page.
If you cannot send links, read out verification_url and the code instead. Do not open the link yourself: the page is for your owner.

3. Check until it is done

Call POST /v1/agent/onboarding/poll with the device_code, waiting at least interval seconds between calls. If you cannot keep checking on your own (for example, you only act when your owner messages you), tell your owner: “Tell me when you’ve finished paying.” Then check once when they do.
Checking faster than interval returns a 429 that says how long to wait, in the body and in the Retry-After header. Wait that long, then continue.

4. Save your key

If your connection drops, check again: a completed pairing returns the same key. If the response has code: pairing_key_replaced, another assistant has been connected to this number since; start a new pairing if your owner wants you back. Then tell your owner their new number.

5. Remember that you can make calls

Save a note in your long-term memory, custom instructions or notes file (whatever you keep across chats), so that in any later conversation you know you can make and check phone calls for your owner. Replace each <...> with the value from the step 4 response; do not copy the placeholders. Never put the key itself in the note:
Then tell your owner: “Saved. In any chat, just ask me to call someone.”

6. Make the first call

Send your key as Authorization: Bearer <api_key>. Ask your owner which number to call for the test, then ring them. Your owner’s agent is set up to answer their calls. Its saved greeting (“Hi, you’ve reached …”) is for people calling in, so every call you place brings its own script in agent_overrides: Fill in instruction yourself from what your owner asked for. Do not ask them for these; a line or two each is enough:
The instruction replaces everything the agent knows, so put in it what the person answering will ask about:
  • Who the call is for: your owner or their business, by name, so the agent can answer “who is this?”.
  • The facts: who, what, where and when, and how to reach your owner. The agent has nothing else to go on.
  • What to do when it does not know: offer to check and follow up, or take a message. Never guess.
Write summary_instruction the same way, from what your owner will want to know: whether the person was reached, what they said, and anything they asked for, including whether and when they want a call back. Brilo does not schedule callbacks for you: remember the time and place that call yourself. The same call as a request body. In JSON the line breaks are written as \n:
Save it as call.json and send it:
A call without an instruction or a greeting is refused with call_script_incomplete, and the response names what is missing. Calls ring straight away; they are not held for quiet hours. You can call and text numbers in the US and Canada.

7. Find out how the call went

A call takes as long as it takes. Check GET /v1/call/{id}, waiting retry_after seconds between checks, and stop when retry_after is no longer in the response. Checking faster does not finish the call sooner.

Errors

Errors carry code, message and action. Limit errors also carry limit, used and resets_at, so you can tell your owner exactly when they can try again. Check what is left before you call: GET /v1/usage returns each limit with limit, used, remaining and resets_at. Full request and response shapes are in the API reference.

Keep it safe

  • Your owner can end your access by connecting another assistant, which replaces your key.
  • One call at a time: while a call is live, a second one is refused.
  • For machine-readable docs, read /llms.txt, or add .md to any page URL.