Plug Allo into anything

Calls, texts, CRM records, analytics, even the AI receptionist. One REST API hands you the raw building blocks, so the phone system bends to your stack instead of the other way around.

  • REST and JSON
  • Api-Key auth
  • Signed webhooks
  • Free on every plan
terminal
# Every key answers this. Start here.
curl -X GET "https://api.withallo.com/v2/api/me" \
  -H "Authorization: Api-Key YOUR-API-KEY"

# 200 · your scopes, your endpoints, your rate limits
{
  "scopes": ["CONVERSATIONS_READ", "SMS_SEND", "CRM_WRITE"],
  "rate_limits": { "read_per_second": 20, "write_per_second": 5 }
}
terminal
# Every call and text that mentioned a refund
curl -X POST "https://api.withallo.com/v2/api/conversations/items/search" \
  -H "Authorization: Api-Key YOUR-API-KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "search": "refund",
    "type": "ALL",
    "sort": "RELEVANCE",
    "size": 25
  }'

# Transcripts, AI summaries and SMS bodies, searched at once
terminal
# Send a text from one of your Allo numbers
curl -X POST "https://api.withallo.com/v1/api/sms" \
  -H "Authorization: Api-Key YOUR-API-KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "from": "+13055550180",
    "to": "+13055550142",
    "message": "Your order just shipped"
  }'

# It lands in the same thread as every call with that contact
terminal
# Tell us where to send events as they happen
curl -X POST "https://api.withallo.com/v2/api/webhooks" \
  -H "Authorization: Api-Key YOUR-API-KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://your-app.com/allo/events",
    "topics": ["call.completed", "sms.received", "contact.created"]
  }'

# Signed, retried, and delivered the second it happens

Built so your first request works

The API is REST, the auth is one header, and the responses are predictable JSON. Nothing clever, nothing to memorise.

  • One header, one keyGenerate a key in your workspace settings and send it as Authorization: Api-Key. That is the whole handshake.

  • Scoped permissionsA key carries only the scopes you grant it, and GET /v2/api/me answers with the scopes and the endpoints it can actually reach.

  • Pagination that says when to stoppage and size, up to 100 per request, with total_count and has_more in every paginated response.

  • Rate limits you can plan around20 reads and 5 writes per second per key, with X-RateLimit-Remaining and X-RateLimit-Reset on the way back.

Read the authentication guide
A desk with a laptop, a notebook and a cup of coffee
terminal
# Two lines. That is the whole setup.
export ALLO_KEY="YOUR-API-KEY"

curl -s \
  "https://api.withallo.com/v2/api/numbers" \
  -H "Authorization: Api-Key $ALLO_KEY"

# 200 · every Allo number on the account

Every surface, and the route that opens it

Fourteen resources on one base URL. A small, focused API with no sprawling legacy endpoints and no mystery deprecations.

Conversations

The unified call and SMS timeline, with keyword search across transcripts and message content.

  • GET/v2/api/conversations
  • POST/v2/api/conversations/items/search
  • POST/v2/api/conversations/items/batch

SMS

Send SMS and MMS from your Allo numbers or from a registered sender ID.

  • POST/v1/api/sms

CRM

Create, read, update and search people, companies and deals.

  • /v2/api/crm/people
  • /v2/api/crm/companies
  • POST/v2/api/crm/deals/search

Notes

Internal team notes on a conversation or a person profile, with @mentions.

  • /v2/api/conversations/{contact_number}/notes
  • /v2/api/crm/people/{person_id}/notes

Threads

Team discussion threads hanging off a call, an SMS or a conversation note.

  • /v2/api/threads

Webhooks

Event notifications with HMAC signatures and automatic retries.

  • GET/v2/api/webhooks
  • POST/v2/api/webhooks
  • GET/v2/api/webhooks/event_types

Phone numbers

Your Allo numbers with their capabilities and member access, plus the inbound call flow.

  • GET/v2/api/numbers
  • GET/v2/api/numbers/{number}/call_flow
  • PUT/v2/api/numbers/{number}/call_flow/draft

Users

The team roster with roles and assigned numbers, and what your API key can do.

  • GET/v2/api/users
  • GET/v2/api/me

Tags

Create and list call tags, then add and remove them on calls and texts.

  • GET/v2/api/tags
  • POST/v2/api/conversations/items/{id}/tags
  • DELETE/v2/api/conversations/items/{id}/tags/{tag}

Summary templates

The templates that shape how the AI structures a call summary.

  • GET/v2/api/summary_templates
  • POST/v2/api/summary_templates
  • PUT/v2/api/summary_templates/{id}

Analytics

Team KPIs with period-over-period comparison and a per-user breakdown.

  • POST/v2/api/analytics/overview
  • POST/v2/api/analytics/outbound

Dialing queues

Read and fill the Power Dialer queue.

  • GET/v2/api/dialing-queues/current
  • POST/v2/api/dialing-queues/current/numbers
  • DELETE/v2/api/dialing-queues/current/numbers

AI receptionist

Configure the receptionist: its prompt, its voice, its knowledge and whether it is on.

  • GET/v2/api/numbers/{number}/agent
  • PATCH/v2/api/numbers/{number}/agent
  • PUT/v2/api/numbers/{number}/agent/prompt

Partner

Provision and manage Allo accounts as a white-label reseller.

  • /v2/api/partner/accounts

Every endpoint, field by field, in the full API reference

Your phone system, on tap

Allo runs the calls, the texts and the AI summaries. The API hands you the data and the triggers, so you can wire them into whatever your team already uses.

Push every call into your CRM

Pull calls with their recordings, transcripts, AI summaries and tags, then drop them wherever your reps actually work, from Salesforce to the internal tool you built last quarter.

Keep people, companies and deals in sync

Read and write the CRM from both sides. A new lead in your tool lands in Allo, and an edit made in Allo comes back to your database through a webhook.

Send texts straight from your code

Appointment reminders, delivery pings, shift confirmations. One POST and it goes out from your Allo number, logged in the same thread as the rest of the conversation.

React the moment something happens

Webhooks fire when a call completes, a text lands or a contact changes. No polling, no cron job, and the payload already carries the summary and the transcript.

Report on the team without exporting anything

Team KPIs, the outbound funnel and a per-user breakdown come back as JSON, so your own dashboard can show the numbers your reps already see in Allo.

Set up the AI receptionist from your own tools

Read and update the receptionist's prompt, voice, business hours and knowledge, and switch it on for a number, without anyone opening the Allo app.

Events, the moment they happen

Skip the polling. Point Allo at a URL, pick your topics, and the payload arrives with the AI summary and the transcript already in it, the second the call wraps or the text lands.

  • Eleven topicsCalls, texts, tags, contacts and summaries, subscribed in any combination you like.

  • Signed deliveriesEvery payload carries an HMAC signature, so your handler can prove it came from Allo before it acts on it.

  • Retried automaticallyA delivery that fails is retried, so a deploy window costs you a few seconds instead of a day of events.

Read the webhooks guide
Topics
  • call.receivedAn inbound call lands on one of your numbers
  • call.triggeredA call starts, inbound or outbound
  • call.answeredSomeone picks up, a teammate or the AI receptionist
  • call.completedThe call ends, summary and transcript included
  • sms.receivedAn inbound text arrives
  • sms.sentA text goes out, from anywhere in Allo
  • summary.updatedAn AI summary is written or edited
  • tag.addedA tag is applied to a call or a text
  • tag.removedA tag is taken off
  • contact.createdA new contact appears in your workspace
  • contact.updatedA name, a number or a company changes

Questions we keep getting

API access is included in every Allo plan. There is no developer tier and no per-request fee. The only thing billed on top is the outbound SMS you send through the API, charged per segment like the rest of your text usage.

Yes. HTTP verbs, JSON bodies, predictable status codes, and one base URL at api.withallo.com. Most of the surface lives under /v2/api; sending a text is still POST /v1/api/sms.

API keys. You generate one in your workspace settings and send it in the Authorization header as Api-Key, not Bearer. Each key carries the scopes you grant it, so a 403 with APIKEYINSUFFICIENT_SCOPE means the key is valid but not allowed to do that. Call GET /v2/api/me to see exactly what yours can reach.

Yes, through POST /v1/api/sms, from any of your Allo numbers or from a registered sender ID. The message lands in the same conversation thread as the calls and texts that came before it.

Eleven topics today: call.received, call.triggered, call.answered, call.completed, sms.received, sms.sent, summary.updated, tag.added, tag.removed, contact.created and contact.updated. Subscribe to any combination. Your endpoint has to be HTTPS, and every delivery is signed and retried.

Yes, per API key: 20 read requests per second and 5 write requests per second. Every response carries X-RateLimit-Limit, X-RateLimit-Remaining and X-RateLimit-Reset, so your backoff knows exactly when to try again. Subscribe to webhooks instead of polling wherever you can.

Yes. GET and PATCH /v2/api/numbers/{number}/agent read and update the whole configuration, from the voice to the business hours to the transfer rules, PUT on its /prompt replaces what it answers with, and the knowledge endpoints add or retire the websites it has read.

Every endpoint, every field and every example lives at help.withallo.com/en/v2/api-reference. You can copy the cURL straight off the page.