Base URL
Every endpoint lives underhttps://api.withallo.com. The version is part of the path, not a header.
There is no
POST /v2/api/sms. Sending an SMS is a v1 call. Full path and body: Send SMS.
Start here
CallGET /v2/api/me first. It returns your key’s scopes, the exact endpoints that key can reach, your team, and your rate limits, so you never have to guess what is available.
/v2/api/me. No specific scope is required. See Me.
Getting started
Before using the API, make sure you have:- An active Allo subscription
- Admin or Manager permissions on your workspace
- An API key generated from Settings > API
Authentication
API keys are generated through your workspace settings. Include the key in theAuthorization header of every request:
Api-Key, not Bearer. Store your API key securely. Do not expose it in client-side code or public repositories.
Guides
Authentication
API key setup, scopes, and the scope-to-endpoint mapping
Rate limits
Request limits and headers
Pagination
Page-based results with total counts
Error handling
Error format and recovery
Error codes
Every error code and what to do about it
Common use cases
Ready-made request patterns for the usual jobs
Resources
Rate limiting
Rate limits vary by request type and are applied per API key:
Every response includes
X-RateLimit-Limit, X-RateLimit-Remaining, and X-RateLimit-Reset headers so you can monitor your usage. See Rate limits for details.
Quick example
Get your recent conversations:FAQ
What is the base URL and how is the API versioned?
What is the base URL and how is the API versioned?
The host is always
https://api.withallo.com. The version is the first path segment. Almost everything is /v2/api/.... SMS sending is /v1/api/sms. There is no version header and no Accept header to set.How do I authenticate?
How do I authenticate?
Send
Authorization: Api-Key ak_live_your_key_here on every request. The scheme is Api-Key, not Bearer. Generate keys at Settings > API with Admin or Manager permissions. A key is scoped to a single team and is shown only once. See Authentication.Which scope does an endpoint need?
Which scope does an endpoint need?
Call
GET /v2/api/me. Its endpoints array lists every path your key can reach along with the scope each one needs. The full table is also in Authentication. A 403 with code API_KEY_INSUFFICIENT_SCOPE means the key is valid but missing a scope, so create a new key with that scope.How do I send an SMS?
How do I send an SMS?
POST /v1/api/sms for a US Allo number, and POST /v1/api/sms with a French sender ID for France. The scope is SMS_SEND and phone numbers are E.164 (+14155551234). See Send SMS and Send SMS (France).How do I find a specific call or message?
How do I find a specific call or message?
Use
POST /v2/api/conversations/items/search with filters such as date, direction, type, and a search string that matches transcripts and message content. GET /v2/api/conversations groups activity by contact number instead. To fetch known IDs in bulk, use POST /v2/api/conversations/items/batch. See Conversations.How does pagination work?
How does pagination work?
Paginated endpoints take
page and size and return a pagination object with page, size, total_count, and has_more. Increment page until has_more is false. To count results without fetching them, request size=1 and read pagination.total_count. See Pagination.What does an error look like and can I retry it?
What does an error look like and can I retry it?
Every error returns an
error object with type, code, message, retryable, request_id, and often param, suggestion, and doc_url. Retry only when retryable is true. On 429, wait retry_after_seconds before retrying. See Error handling and Error codes.What are the rate limits?
What are the rate limits?
20 GET requests per second and 5 write requests per second, per API key. Read
X-RateLimit-Remaining and X-RateLimit-Reset on every response. See Rate limits.What format do phone numbers use?
What format do phone numbers use?
E.164, with the leading
+ and country code, for example +14155551234. When a number goes in a query string, URL-encode the + as %2B.How do I get notified when a call ends instead of polling?
How do I get notified when a call ends instead of polling?
Create a webhook with
POST /v2/api/webhooks and subscribe to the events you need. Payloads are signed with HMAC and retried automatically. List the available events with GET /v2/api/webhooks/event_types. See Webhooks.Can I provision Allo accounts for my own customers?
Can I provision Allo accounts for my own customers?
Yes, with the
PARTNER scope. POST /v2/api/partner/accounts creates an account, provisions a number, and returns a scoped API key for it. The PARTNER scope is granted manually to approved resellers and cannot be self-issued. See Partner.Is there an MCP server?
Is there an MCP server?
Yes. See Allo MCP to connect an AI agent to Allo without writing HTTP calls.
Next steps
Common use cases
Copy-ready requests for syncing, searching, and reporting
Authentication
Scopes and the scope-to-endpoint mapping
Webhooks
Stop polling and receive events instead
Allo MCP
Connect an AI agent to Allo without writing HTTP calls