Phone, SMS and voice agent API for developers
Call Bullet gives developers one scoped API key for UK phone numbers, call tracking, SMS with delivery receipts, AI voice agents and human click-to-call. Every guide below has copy-paste TypeScript against the documented endpoints and a ready-to-paste prompt for AI app builders, with honest steps from zero to a working result.
Last updated · Call Bullet
Developer guides
Add a UK phone number to an AI-built app
Add a real UK phone number to an AI-built app: buy and verify it in Call Bullet, then read it with one API call and show it with live call counts.
Send SMS from an AI-built app
Send UK SMS from an AI-built app: check readiness, send a free test, then send live texts with templates, idempotency and delivery proof via Call Bullet.
Add an AI voice agent to an AI-built app
Create an AI voice agent from your app: make a draft via the Call Bullet API, attach a UK number, finish testing, then show every call it handled.
Add call tracking to an AI-built site
Add call tracking to an AI-built site: paste one script tag, show swapped UK numbers per visitor, then read each call's source and keyword via the API.
Receive SMS delivery webhooks in an AI-built app
Receive signed SMS delivery webhooks in an AI-built app: register an endpoint, verify the signature and update each text the moment it is delivered.
Build a click-to-call button in an AI-built app
Build a click-to-call button: a customer asks for a callback, Call Bullet rings your staff first, then connects them from your business line.
Show call logs in an AI-built dashboard
Show call logs in an AI-built dashboard: list caller, time, answered or missed and source, sync with updated_since and play recordings via signed links.
What can I build with the Call Bullet API?
You can add real UK telephony to an app without running your own carrier account: show tracked numbers, list calls with their marketing source, send texts with proof of delivery, create AI voice agents and let customers request a call back from a person.
Everything sits behind one base URL, https://callbullet.com/api/public/v1, and one bearer key that starts with cb_live_. Each key is scoped to the workspaces it may touch, and each product has its own permission, so a reporting dashboard never gains the power to send texts or place calls.
| Product | Read | Write | Guide |
|---|---|---|---|
| UK numbers | numbers:read | Bought in the app (identity checks) | Add a UK phone number |
| Call tracking | calls:read, attribution:read | Swap script on your site | Add call tracking |
| Call logs | calls:read, recordings:read | — | Show call logs |
| SMS | sms:read | sms:send, sms:webhooks:write | Send SMS |
| Delivery webhooks | sms:read | sms:webhooks:write | Receive webhooks |
| AI voice agents | agents:read, agent_calls:read | agents:write (drafts) | Add an AI voice agent |
| Click-to-call | outbound_calls:read | calls:place | Build click-to-call |
How fast can I get a first result?
Most developers read their first API response within five minutes of creating a key. A simulated text with test: true takes another minute and costs nothing. Real-world steps take longer because UK rules require them, and the guides say so plainly:
- UK numbers need business verification before activation, usually the same working day once documents are in.
- SMS sender names are reviewed by Call Bullet, usually within one working day. Until then you can send free live tests to a verified mobile.
- AI voice agents created through the API start as drafts. Testing, certification and billing are finished in Call Bullet before an agent takes real calls.
- Click-to-call works as soon as you have an active outbound line with a staff phone set, inside UK calling hours.
How do I make my first API call?
Create a key under Integrations → Developer API in Call Bullet, save it as a server-side secret called CALL_BULLET_API_KEY, and add this helper. Every guide reuses it.
// lib/call-bullet.server.ts — server-only. Never import this in browser code.
const BASE = "https://callbullet.com/api/public/v1";
export async function cb<T>(path: string, init: RequestInit = {}): Promise<T> {
const key = process.env.CALL_BULLET_API_KEY; // cb_live_… stored as a secret
if (!key) throw new Error("CALL_BULLET_API_KEY is not set");
const res = await fetch(BASE + path, {
...init,
headers: { Authorization: `Bearer ${key}`, "Content-Type": "application/json", ...init.headers },
});
const body = await res.json();
if (!res.ok) throw new Error(`${res.status} ${body.error?.code}: ${body.error?.message}`);
return body as T;
}import { cb } from "./call-bullet.server";
const { data } = await cb<{ data: { id: string; name: string }[] }>("/workspaces");
console.log(data); // one entry per business the key can reachCall the API only from server code, such as a server function or API route. A key in browser code can be copied by anyone who opens the page.
How do permissions keep the key safe?
Each product has read and write levels that you switch on per key. A key built for a call dashboard needs only workspaces:read and calls:read. A booking app that texts customers adds sms:send. The two most powerful writes, agents:write and calls:place, stay off even in the Everything preset, so they are only ever switched on deliberately.
Keys are stored only as hashes, shown once, and every request rechecks the workspace scope. See the scopes reference for the full list.
Can I paste one prompt into an AI app builder?
Yes. Each guide ends with a prompt you can paste into an AI app builder. This one connects any app to Call Bullet and stops before doing anything that costs money.
Connect this app to the Call Bullet API.
- Docs: https://callbullet.com/developers/api.md and https://callbullet.com/openapi.json. Use only endpoints listed there.
- Ask me for my Call Bullet API key (starts cb_live_) and store it as the server secret CALL_BULLET_API_KEY. Never put it in browser code.
- Create one server helper that calls https://callbullet.com/api/public/v1 with Authorization: Bearer <key> and surfaces error.code and error.message.
- Call GET /workspaces and show me the result on a simple settings page.
- Do not send texts, create agents or place calls until I ask.Which guide should I start with?
Pick the outcome you want first; each guide stands on its own.
- Add a UK phone number to an AI-built app
- Send SMS from an AI-built app
- Add an AI voice agent to an AI-built app
- Add call tracking to an AI-built site
- Receive SMS delivery webhooks in an AI-built app
- Build a click-to-call button in an AI-built app
- Show call logs in an AI-built dashboard
The full reference lives at the Developer API docs, with an AI-readable copy at /developers/api.md and the OpenAPI file at /openapi.json.
Key takeaways
- One scoped key covers numbers, calls, SMS, AI agents and click-to-call.
- Call the API only from server code; keys are shown once.
- Test sends are free; real numbers and senders go through UK checks first.
- agents:write and calls:place are off unless switched on one by one.
Frequently asked questions
Is there a free way to try the API?
Yes. Read endpoints work as soon as you have a key, and SMS sends with test:true are simulated and free. Every workspace also starts with 25 SMS credits.
Can the API buy phone numbers?
No. Numbers are bought in Call Bullet because UK rules need business verification. The API then reads them.
Which languages are supported?
Any language that can make HTTPS requests. The guides use TypeScript with fetch.
Does it work with AI app builders?
Yes. Each guide includes a prompt you can paste into an AI app builder, pointing it at the documented endpoints.
What are the rate limits?
Call lists allow 600 requests a minute per key and other endpoints 120. A 429 response includes Retry-After.
Is it only for the UK?
Yes. Numbers, texts and calls are for UK businesses and UK phone numbers.
See which marketing makes your phone ring
Start with one UK tracking number or a full website pool. Every call is recorded, transcribed and traced back to its source.