Documentation

How Alpire works

Alpire is your company's phone system. It picks up the calls coming into your numbers, decides what to do with each one and distributes them across your team. This guide explains, in plain language, what each section of the panel is for and how to get the most out of it day to day.

What Alpire is

Think of Alpire as your company's reception desk, but automatic. When someone calls one of your numbers, the system answers and applies the rules you've set: who to ring, at what hours, with hold music or voicemail if no one is available. The person who answers does so from a desk phone or from the browser phone, the one that appears floating at the bottom right of the panel.

1Someone callsone of your numbers
→
2Your rules kick inhours, menu, forwards…
→
3It rings the right peoplea person, a group or a queue
→
4It gets answeredand is logged

You'll see the panel organized into sections, each with its own purpose: Calls (the history), Extensions (the people who answer), Flows (what happens to each incoming call), Schedules, and inside Extensions also the groups and the queues. We go through them one by one below.

Why can't I see some section? The menu adapts to your role. Whoever administers the company sees everything; someone who only answers calls may see less. That's normal: if you need access to something that isn't showing, ask whoever manages your organization's configuration.

Calls

It's the history of everything that has gone through the phone system: every inbound and outbound call is logged with the number, time, duration and how it ended. It's where you check what happened, listen to a recording or pull data.

Search and filter

Calls are listed from newest to oldest. You can filter by direction (inbound or outbound), by status (answered, missed, in progress…) and search by number. The Export CSV downloads the list — with whatever filters you have set — to open it in Excel.

A call's detail

Click View to open the record: timings, how it ended, and — if you have it enabled — the recording and transcription. Right there you can give it a type (a label to classify it) and leave notes on what happened, which are saved with your name and the date.

Recordings and transcription

If your company has recording enabled, every conversation is saved and you can listen to or download it from the call record. And if transcription is also enabled, the recording is turned into text automatically: you read it like a chat between the agent and the customer, without playing the audio.

Recordings don't have to be kept forever; depending on your company's policy they may be deleted after a while. If a recording you expected is no longer there, that's probably why.

See what's happening live

The Real-time section is the pulse of the phone system right now: calls in progress, people waiting in the queue and who's connected. If you have permission, you can listen to a live call to supervise (listen only, you can't be heard). To keep it transparent, the agent can see when they're being listened to.

Extensions

An extension is a person's internal number: 100 for reception, 201 for a salesperson. It's what «rings» inside the company. Here you create one for each seat and decide who uses it.

How each person answers

There are two ways, and you can mix them within the same team:

  • With the browser phone. You link the extension to a team member and, when that person logs into the panel, their phone appears on its own, ready to make and receive calls. Nothing to install.
  • With a desk phone. You set a password on the extension, and that password is entered on the physical phone so it stays connected.
Write down the password when you create it. For security it can't be viewed again afterwards. If it's lost, the quickest option is to delete the extension and create it again with a new one.

Available, busy or on a break

From their phone, each person sets their status, and that decides whether queues and groups pass calls to them:

  • Available — receives calls as normal.
  • Busy — a «do not disturb» for a meeting or a break; stops receiving until they set themselves available again.
  • After-call work — a short breather after hanging up to finish taking notes; it returns to available on its own.

The number shown when calling out

When you call out, the person receiving sees one of your company's numbers. Which one appears depends on how each extension is set up — so sales can show one number and support another.

Ring groups

A group bundles several extensions under one name — «Sales», «Reception» — so a call can ring several people instead of just one. It's what you want when you don't mind who picks up, as long as someone does. They're created inside Extensions.

How it rings

The call tries the members in order: it rings the first one; if there's no answer, it moves to the next, and so on until someone picks up. You decide the order when you set up the group.

About the «strategy» dropdown. You'll see several options, but for now the group always rings in order, one after another, not on all phones at once. If what you want is for it to ring on all of them and for people to be able to wait, what you need is a queue.

To transfer an ongoing call to a group from your phone, the system connects you directly with the first available colleague, and tells you how many are available (for example «Sales 2/4»).

Waiting queues

A queue does something a group can't: put people on hold. If all your agents are busy, the queue answers anyway, plays music and hands out the calls in order of arrival as people become free. Nobody hears a «busy» tone: they wait their turn. It's the natural choice for a support line or a busy reception. They're also configured inside Extensions.

Group or queue?

Ring group

Rings several people in order. If no one picks up, the call goes unanswered. No music or waiting. Good for small teams and quick answers.

Waiting queue

Answers and holds callers with music, and hands them out in turn as people become free. Good when more calls come in than you can take at once.

Setting up a queue

You give it a name and choose which extensions will be its agents (the order in which you add them sets the priority). While they wait, callers hear music; when an agent becomes free, the first in the queue is passed to them.

You can't delete a queue (or a group) that's in use. If an inbound number points to that queue, you first have to reassign that number. This is by design, to avoid leaving calls pointing at nothing.

Schedules

A schedule is your opening calendar: what time you open and close each day of the week. On its own it does nothing; you use it inside the Flows so that calls are handled one way when you're open and another way when you're closed.

Defining the schedule

You give it a name («Office hours») and fill in the opening and closing time for each day. A day you leave blank counts as closed. Then, in an inbound flow, you connect the «open» branch to whatever answers (a queue, a group…) and the «closed» branch to a «we're not here right now» message or a voicemail.

Example

Monday to Friday 09:00–18:00, Saturday and Sunday left blank. A call on Tuesday at five in the afternoon comes in as open; from six onwards, closed. On Saturday, at any time, it always goes out through closed.

A couple of things. Each day allows only one time slot, so a split day (with a midday break) is built by chaining two schedule steps in the flow. For holidays and special days (Christmas, a long weekend, a day you open with different hours), use «Holidays and special days» under each schedule: they take priority over the weekly schedule. To change a schedule, create it again: this screen only creates and deletes.

Flows

Here you decide what happens to each incoming call, step by step: which message plays, which keypad menu is offered, which schedule applies, which queue or group it goes to, when voicemail kicks in. You build it in a visual editor, chaining boxes together like a diagram. No programming needed: you drag steps and connect them.

📞 A call comes in to your number Your flow decides what to do Options menu “press 1, 2…” Your team queues and extensions AI assistant talks to the caller ✓ Answered
How a call travels through your phone system, from the number to whoever answers.

How it's built

Each box is a step (a message, a menu, a destination…) and has one or more outputs that you hook to the next step. For example, a menu has one output per key; a schedule has «open» and «closed»; a group has «answered» and «no answer». By joining outputs to steps you build the whole path of the call.

The steps you can use

These are the available blocks, grouped as they appear in the editor:

Messages

Play audio
Plays a recording you've uploaded in Audio (a greeting, an announcement).
Text to speech
Reads aloud a text you type, without having to record it.
Beep / Silence
A short beep or a pause, to give the call some rhythm.

Interaction

Keypad menu
The classic «press 1 for sales, 2 for support». Each key leads somewhere, with outputs for when they don't press or press the wrong key.
Collect digits
Collects what the person types (a customer number, for example) to use later.
Listen
Captures what the person says out loud and turns it into text, to decide based on what they ask for.

Decisions

Business hours
Checks your schedule and splits between open and closed.
Based on who's calling
Treats some numbers differently from others — for example, sending your regular customers to a separate queue.
Based on a value
Branches based on something you collected earlier (the key pressed, the customer code…).

Destinations

Call an extension
Rings a specific person.
Call a group
Rings a group.
Put in queue
Puts the call into a queue, with music, announcements and an exit option if the wait gets long.
Forward out
Sends the call to an external number, such as an on-call mobile.
Voicemail
Plays a greeting and records the message, which stays in your history.

There are also more advanced steps (wait a few seconds, leave a marker along the path, or connect to another tool of yours). You don't need them for the usual cases; they're there when you want to fine-tune.

When someone picks up, that's where the flow ends. In the steps that send the call to a person, group or queue, the «answered» output ends the path: the call stays connected and no longer follows the flow. What continues are the failure outputs («no answer», «busy»). In other words: hang your plan B off the «no answer» output, not the success one.

Actually activating it

Designing the flow isn't enough: for it to come into play you have to do two things. Publish it (while you edit you're working on a draft that doesn't yet handle calls) and assign it a number, so the system knows which calls to send to this flow. You can assign an exact number or all of them at once. As soon as you publish and assign, the next call comes in through your flow.

If it seems not to work, check this: that the flow is published (the draft doesn't answer), that it has at least one number assigned and that it's activated. It's what gets forgotten most often.

Testing it first

You don't need to make a real call to check that a flow works. The Test walks through it simulating a call: you tell it which keys are pressed and watch where it goes. Perfect for making sure a menu leads where you want before publishing it.

An example flow, from start to finish

It starts with the schedule. If you're open, it jumps to a welcome menu: 1 to the Sales queue, 2 to the Support group; if they don't press anything, it repeats the menu and then goes to Reception. If you're closed, a «we're not here right now» recording and a voicemail that records the message. You assign it your main number, publish it, and it's answering.

The AI agent

The "AI Agent" block holds a real conversation: it listens, understands what it's told, and answers out loud. It's not a keypad menu with a nice voice. You configure it by clicking "Manage" inside the flow editor; if you're going to reuse it across several flows, create it in "AI Agents" and link to it.

The rule that fixes the most flows: if the task is conversational, do it with a SINGLE agent. Collecting a name, a date and a headcount, answering questions, booking, screening: all of that is one well-explained agent, not twenty separate blocks. The agent already asks and already understands.

What you have to write

Three fields, in order of importance:

  • Instructions. Who it is and what it has to achieve. A concrete goal ("book a table", not "help the customer"), what data it collects, and what to do when it doesn't know something (if you don't tell it, it will make it up). Don't write two pages: everything is re-read on every turn, so an endless text makes it slower to answer.
  • Rules. The things it must never do, beyond the instructions.
  • First message. What it says the moment it picks up. Keep it short. If you leave it empty, it waits for the caller to speak.

The settings you notice on the phone

Of all the settings, these are the ones that really change how it feels to talk to it:

  • Silence to end the turn. How long the caller goes quiet before the agent answers. Less is snappier, but it cuts off people who think while they talk.
  • Allow interrupting. Lets the caller cut in while the agent is talking. Turn it on: it removes the feeling of fighting with a machine. If it's interrupted by the echo of its own voice, raise the minimum time before an interruption counts.
  • Response length. Lower it if the agent rambles: it answers sooner and more to the point.
  • Max turns and duration. Your handbrake. An agent with no cap can keep someone on the phone for twenty minutes.

Teaching it to do things in your systems

A "tool" is a small piece of flow the agent uses when it thinks it's needed: look something up in your CRM, check stock, create an order. You give it a name, a description and the data it needs, and it fills those in on its own from the conversation. The description is what it reads to decide whether to use it: "look up" says nothing, "look up an item's stock by its reference" does. That's the most common mistake.

There are two kinds and the system tells them apart on its own: the ones that come back (look something up and keep talking, the normal case) and the ones that leave (transfer, forward, hang up: the call goes away and the conversation ends).

It costs credits: the agent pays to listen, think and speak, per minute and according to the models you pick. Time spent waiting for your tools isn't billed as AI. If you run out of balance mid-conversation, it exits through the "no balance" exit: connect it to a queue or a voicemail. More in AI Models · Credits.
Privacy: turning off transcript saving does not stop data from leaving (the audio still goes to the transcription service). What matters is which provider you choose. Mark any sensitive data as "secret"; cards and PINs can't be read out by voice, it's blocked on purpose.

AI models: which to choose

When someone talks to your agent, three different models come into play, in a chain. All three add latency and all three cost credits; understanding the split is all you need to tune an agent.

The chain

caller's voice → [listen] → text → [think] → response → [speak] → agent's voice

Where the silence comes from

The silence the caller perceives is: silence wait + listen + think + speak. The first term is your own setting (how long the system waits before it considers the turn over, by default a bit over half a second); the other three depend on the model. Well chosen they add up to ~1 s; badly chosen, over 3 s of silence on the phone, which is an eternity.

Well chosen ~1.1 s
Poorly chosen ~3.5 s

Same agent, same task, different choice of models. Three and a half seconds of silence on a call is an eternity.

The one that thinks (LLM)

It's the one that varies most: from the fastest to the slowest there's a factor of 20. The fast ones (small models or on specialized hardware) are more than enough for collecting data, qualifying, or answering from a knowledge base. The mid-range ones are justified if the agent has to genuinely decide: negotiate, interpret ambiguous requests, chain tools together. Rule of thumb: start with the fastest and move up only if you notice it getting things wrong. Almost nobody needs to move up.

"Pro" or reasoning models are not for the phone. The thinking step alone eats up almost five seconds, before it even starts to speak. Excellent at writing, disastrous at conversation.

The one that listens (STT)

Less room to move, but two things matter. Telephony runs at 8 kHz (less information than any audio on your laptop): a model that transcribes a podcast beautifully can fail on the phone, so always test with a real call. And set the language if your callers don't mix languages: it's more accurate. Watch out for the variants marked MIP: they're cheaper because they let the provider train on your audio.

The one that speaks (TTS)

You're choosing between naturalness, speed and price. One warning that saves grief: the prettiest voice isn't the best for the phone. At 8 kHz much of the nuance of an HD voice is lost along the way, so you pay latency and credits for a difference the caller never gets to hear. Test both on a real call before deciding.

How to lower latency, in order

  1. Swap the LLM for one in the fast band. That's 70% of the improvement.
  2. Lower the silence wait if your callers answer in short phrases.
  3. Switch the TTS to a fast one if you were on the slowest.
  4. Shorten the instructions and the response length: they're re-read in full on every turn.
Region and residency: each model in the catalog appears with its region, and the same model can appear twice (EU and US) as separate entries on purpose. If your organization has European residency, the system won't use a model outside the EU even if you pick it: it fails rather than send the audio to another region. And it never silently falls back to another provider. The live table, with your models and their exact rate, is in Settings → AI Catalog.

Credits and billing

One credit is worth $0.01. Always, on every plan. When topping up, a euro buys 110 credits and a dollar 100. Its value never changes; what changes between plans is how many are included and what discount you get on usage. The calls themselves are billed by your carrier, separately.

What consumes credits

Only the AI, and it's billed per minute. Playing an audio you've uploaded, keypad menus, queues, transfers and hold don't consume credits.

  • Listen (voice → text). The "Listen" and "Say or dial" blocks, and the whole time inside an AI Agent.
  • Speak (text → voice). The "Text to speech" block and the AI Agent's responses.
  • Think (the AI model). Every turn of the AI Agent, and the quality scoring at hang-up.

The time the agent spends inside a tool (waiting for your API) is deducted from the AI minute: you see it broken out in the call details. You don't pay to wait for your own system. Balance is spent first from the plan's monthly bundle and then from top-ups, which don't expire with the month.

Plans

Starter (40 €/seat/month, minimum 3 → from 120 €, 3,000 credits), Pro (35 €/seat, minimum 10 → from 350 €, 9,000), Business (30 €/seat, minimum 30 → from 900 €, 24,000, −10% on usage), Scale (25 €/seat, minimum 100 → from 2,500 €, 70,000, −20%) and bespoke Enterprise. All of them include AI: the price is the base. This list is written by hand and is NOT read from the database, so the Billing page wins if they ever differ.

The discount applies to actual usage, not to the bundle: the same balance goes further. An LLM minute that costs 2.0 credits costs you 1.8 on Business and 1.6 on Scale.
AI session bursts (optional): if a rush brings in more calls than your plan covers, by default the extra call leaves through the flow's “saturated” exit. You can enable bursts in Settings → Limits: we answer a few inbound calls above your plan — 2 on Starter and Pro, 4 on Business, 10 on Scale — and those minutes are billed at 1.5× the model's rate. It applies to INBOUND calls only: on outbound campaigns you set the pace, so nothing is ever billed extra there. It ships disabled.

Controlling spend

  • Settings → Limits has an AI credit cap.
  • Each agent shows its estimated cost per minute before you publish it, and its turn and duration caps bound how long a conversation can run.
  • The "no balance" exit on the agent triggers when you run out of credits. Connect it to a queue or a voicemail.
Billing: everything —plan, payment method, invoices, cancellation— lives in the Stripe portal, reachable from Billing. We don't store your card. The trial period requires a card up front; with no active plan the organization stays in read-only demo mode (you can look and configure, but not place calls). This is deliberate.

Privacy and data

This section describes how the system works. It is not legal advice: what you can and can't do depends on your jurisdiction and your own analysis. Read it before putting an AI agent into production.

The platform gives you the options and informs you of their consequences; the decision is yours. In data-protection terms, you determine what is recorded, what is transcribed and with which provider; we execute it. Choosing a provider that trains on the data, or keeping recordings forever, are your decisions with your consequences.

The most misunderstood thing: turning off transcript saving does not stop data from leaving. That switch prevents saving the transcript, but for the agent to work the audio has to go to the provider that listens and the text to the one that thinks. That happens regardless. If you're worried about content leaving your control, what matters is which provider you choose.

Recordings

They're enabled in Settings → Recording, and each flow block can override it (yes / no / inherit). Retention is configured in that same place: by default they aren't deleted on their own, so if your policy says 90 days, set it yourself. An hourly sweep applies what you configured.

Choosing a provider wisely

In the catalog, each model carries its region and a mark of whether it trains on the data it receives. The ones that train (and the MIP variants of STT, cheaper for exactly that reason) use your audio to improve their systems: cheap, and a bad idea with customer data. The region determines which country the audio travels to.

Residency: if your organization has European residency set, the system doesn't send audio to a model in another region even if it's selected: the call fails before sending anything. And there's no silent fallback: if the chosen provider doesn't respond, the turn is lost, your audio isn't sent to a third party you haven't authorized.

Sensitive data and AI disclosure

  • Mark as "secret" any sensitive data you collect: it's hidden in the logs. If you send data with the "HTTP Call" block, mark the field too, or the content can end up in the diagnostic logs.
  • Cards and PINs. They can't be read out by voice. It's blocked by design, with a double lock, and there's no option to turn it off.
  • Disclosing that there's an AI. In the European Union, anyone talking to an AI has the right to know it, and there that disclosure is enforced. Beyond being mandatory, people react far better to an agent that introduces itself than to one that pretends to be human.

Before production, check

  1. Recording retention is set to a number, not to "forever".
  2. No model in the flow trains on the data, unless you've deliberately decided so.
  3. The models' region matches the residency you've promised your customers.
  4. Any personal or payment data you collect is marked as secret.
  5. The AI disclosure is active where it should be, and you know what to answer a customer who asks "is this being recorded?".

Chatbots for your website

A chatbot is a text assistant you put on your website or app. It answers your customers from your documents, collects messages for your team when it doesn't know something, and keeps every conversation so the customer can pick it up when they return. It's billed per token from the AI wallet.

Creating one, step by step

  • Brain. Describe your company, what it may and may not talk about, and choose the model. The platform adds the safety rules (don't invent facts, don't ask for passwords, don't follow instructions found in messages).
  • Documents. Upload PDF, Markdown or text. They're free: they go to your organization's storage. Without documents it only answers general questions.
  • Domains. List the sites where it can run (https://your-site.example, https://*.your-site.example). Outside them the browser won't let it be embedded; with none it appears nowhere.
  • Test. Chat with it from its settings page before publishing. It spends real tokens but leaves no conversation and sends no messages.
  • Install. Paste the snippet from “Install & API” before closing </body>. Nothing else is needed.

Conversations that continue

Returning visitors see their conversation where they left it: the widget stores an identifier in YOUR site's storage. If it closed due to inactivity, typing starts a new one with the previous summary.

There are two ways to continue on another device: the visitor requests an email link from the chat menu, or your server signs who your customer is with the identity secret (Privacy tab) and the conversation follows them wherever they log in.

When the chatbot can't help

It offers to leave a message with an email or phone. It's emailed to the recipients you choose (or the administrators) with a link to the conversation, and it's flagged in the history.

History

All conversations of all chatbots, including old ones, with filters, search by email or customer id, a summary of each and CSV export. Administrators, supervisors and anyone with the “Chatbot history” permission can see it.

Handing over to a person

From the Pro plan, a chatbot can hand the conversation over to your team. Turn it on in the “Human handoff” tab: choose who handles it (users, dial groups or queues; if you pick nobody, admins and supervisors do), the business hours and the maximum wait.

Visitors ask for it with the “Talk to a person” button, the bot offers it when it can't solve something, and your app can request it through the API. Outside business hours, or if nobody is assigned or connected (inbox, webphone or desktop app), the visitor is offered to leave a message and the conversation stays in the inbox.

  • Inbox. In Chatbots → Inbox: “Waiting” (with a sound when they arrive), “Mine”, “Team” and “Messages” (the ones nobody picked up). Everything updates live.
  • Handling. Take the conversation, reply (the visitor sees your name), leave internal notes the visitor can't see, assign it to someone else, close it with a category and a note, and reopen it.
  • Permissions. “Chatbot inbox” gives access to the conversations of the chatbots assigned to that person; “Chatbot history” gives access to all of them, and lets them step into one the bot is still handling.

With ratings turned on (Evaluation tab), when the conversation ends the visitor scores it from 1 to 5 and can leave a comment. It shows in the inbox, the history, the API and the chat.rated webhook.

Evaluation: with quality evaluation in your plan, conversations handled by a person are scored with AI when they close (the chatbot's Evaluation tab, with an optional rubric of its own), and a supervisor can evaluate them with the organization's form from the conversation page. Reports shows conversations, first response, resolution, rating and evaluations by agent, and how much each chatbot solved on its own.

Tools: with integrations in your plan, the chatbot can call your API to look things up or do things (bookings, orders, your CRM). You define the data it fills in (with its type) and where it goes; the chatbot can't change the destination. Anything that changes something is confirmed first by the visitor with a button, or by your app through the API, with the exact summary of what will be sent. In the same tab you pick the callback list so the chatbot can schedule a call from your team.

API and webhooks

Open conversations on behalf of your customers, retrieve any of them by chat_id, write from your app and receive what happens by webhook: chat.started, chat.message.created, chat.handed_off, chat.closed, chat.rated and chat.qa_scored. API reference · Webhooks.

Cost. It's billed per thousand tokens at the chosen model's chatbot rate, shown in the selector (with your plan discount). Each chatbot has a daily cap: when reached it stops answering with AI until the next day (UTC), offers to leave a message and we email you.
Security. The chat is served from its own subdomain, with no access to your dashboard. Opening a conversation requires solving an invisible challenge in the browser, and there are per-visitor and per-IP limits: a script can't drain your credit by opening thousands of chats.
Privacy. The widget always discloses that visitors are talking to an AI. Conversations are deleted automatically after the retention days you choose, and erasing or exporting a specific visitor is in GDPR (by email or customer id). We don't store the visitor's IP or browser.

Agent assist

Assistants answer your team with your company's documents while they serve a customer. You create them in the Assistants menu: name, instructions, model, documents and which roles can use them.

  • On demand. The agent types a question on the assist page (or your CRM sends it through the API) and the assistant answers, citing the documents it used.
  • Live in chats. In the chatbot inbox, when the visitor writes, the AI drafts the reply above the text box. The agent uses it, asks for another or dismisses it: it is never sent on its own.
  • Live in calls. In the webphone and the desktop app, the AI transcribes the call live and, when the customer stops talking, suggests what the agent could say. The agent can also ask with a button. It doesn't work with SIP desk phones or while the AI agent is handling the call.

How to turn on live assist

An administrator, in Assistants → «Live assist»: picks the assistant that makes the suggestions (its instructions and documents) and turns on the channels they want, chats, calls or both. It is off by default. Roles allowed to use that assistant get the suggestions.

Cost. Tokens per answer or suggestion, within the daily assist cap you set. In calls, transcription is also billed per audio minute of each voice. If credit runs out or the cap is reached, assist stops and the agent sees why.
Privacy. Live transcripts and suggestions aren't stored. Voice is transcribed by your organization's regional provider. Let your customers know the call may be transcribed and set the transcription language in Settings.

Webhooks

In Settings → Integrations & automation you register a URL, choose events, and receive a signed JSON POST every time something happens: call answered, transcript ready, appointment booked. Designed for n8n, Make, Zapier or your own endpoint. Every event arrives with the same envelope (id, type, created_at, org_id, data); ignore fields you don't recognize rather than failing.

Events

You subscribe to the ones you care about:

call.started · call.ended · call.transferred · transcript.ready · appointment.booked · appointment.cancelled · callback.created · campaign.finished · qa.scored

PII warning: transcript.ready includes the literal content of the conversation. Treat that endpoint with the same care as the recording: TLS, access control, and a retention you can justify.

Verifying the signature

Stripe-style: "timestamp.raw-body" is signed with HMAC-SHA256 and the endpoint secret, in hexadecimal. The secret is shown only once when you create the webhook; if you lose it, regenerate it.

The signature

sha256 = hex( HMAC_SHA256( secret, timestamp + "." + raw_body ) )

  • Sign over the raw body, before parsing the JSON: if you re-serialize, whitespace and order change and the signature won't match.
  • Compare in constant time (timingSafeEqual / hmac.compare_digest), not with "==".
  • Reject old timestamps (5 minutes is reasonable) or you accept replays.

Responses and retries

We only look at the HTTP status code; your response body is ignored. A 2xx marks the delivery as received; any other code, or a network error, is retried up to 8 attempts with growing backoff (from 1 minute to 24 hours). You have 10 seconds to respond: return 2xx as soon as you've validated the signature and do the work in the background.

A 4xx does not stop the retries. Today we don't distinguish "I can't right now" from "this will never work": a permanent 400 or 410 is retried all 8 times the same, spread out over more than a day. If your endpoint disappears, delete or pause the webhook in the panel; returning an error isn't enough.
URL restrictions: only http:// and https://, and it has to be on the public Internet. DNS is resolved before sending and any private or special IP is rejected (anti-SSRF), both when the webhook is created and on every delivery. For development, use a tunnel like ngrok or Cloudflare Tunnel.

Full technical reference

The event catalogue with EVERY field that arrives inside «data», one by one, plus the signature and retries in detail: See the webhooks reference

What about a REST API? Yes: webhooks tell you what happens, and the API lets you query and act. A healthy integration uses both. The full reference —with the request ready to copy in cURL, JavaScript, Python or PHP— is under Documentation → API reference.

Open the API reference

Getting started

To get your phone system up and running, follow this order (you also have it as a checklist on the Dashboard, «Set up your phone system»):

  1. Connect your phone line in Settings → SIP (your phone line). Without it you can still use internal extensions and the in-browser phone.
  2. Add your numbers (DID/DDI) in Settings and create extensions/agents.
  3. Create a flow in Flows: define the call journey (menus, queues, AI agent, transfers…).
  4. Assign a DID to the flow: in the editor, section «DIDs that trigger this flow». Without an assigned number, the flow never runs.
  5. Test with «Test call» (real audio in the browser) or «Visual test».
  6. If you use AI agent, set its voice, language and instructions in “⚙ Manage brain”, and connect your AI providers in Security.

Common errors

  • The webphone is stuck «reconnecting…» in a loop. Your organization’s phone setup is usually missing, or the system hasn’t loaded it yet. Save the phone settings again, or ask an administrator to check.
  • The AI agent doesn't speak or respond. It’s usually that the model chosen for the assistant isn’t available with your AI provider, or the voice credentials are missing. Check it in “Manage brain” and in Security.
  • The call connects but there's no sound. It’s usually that your network is blocking the audio, or the voice credentials are missing. An administrator can check it.
  • The flow doesn't answer calls. No number is assigned to the flow, or the flow is still a draft. Assign the number and publish the flow.
  • You can't choose the agent's voice or language. Only voices from the providers you have connected appear. An administrator can add more in Security.

Common issues · troubleshooting

  1. The call comes in but «nothing happens». Check that the DID is assigned to the flow and that the flow is published (not just a draft).
  2. The agent hangs up right away. Check that the assistant has voice, transcription and model set up, and that you have balance (AI Wallet in Security). A model that doesn’t match its provider also cuts the turn off.
  3. High agent latency. Look at the quality metrics in “Test call” (transcription, response and voice): they show which step is slow.
  4. Recordings don't appear. Check storage and retention in Settings.
  5. Still stuck? Use the help assistant (bubble at the bottom left) or open a support ticket.

Something not matching what you see on screen? The panel keeps improving; when an option and this guide disagree, trust the panel. For questions about your specific configuration, talk to whoever administers your organization.