Documentation
One page, four lanes. Start here, hand the middle two to whoever answers the phone and whoever runs the business, and send the last one to whoever writes the code.
Start here
Your phone system in five minutes
Everything below already exists in your account. Nothing here needs an installer, a technician's visit or a piece of hardware you have to buy.
- You already have numbers and extensions. They are created with your account, together with the SIP credentials each device needs. An extension is a person or a desk; a number is what the outside world dials.
- Point a number somewhere. In the Numbers tab, say what a call arriving on that number should do: ring an extension, ring a group, open a menu, go to a queue, or follow your business hours.
- Answer it from the browser. Open the Phone tab, allow the microphone, and the tab is a working handset. Call the echo test on
*43and you will hear yourself back. - Then set your hours and your voicemail. Those two are what stop a call being lost at seven in the evening, and they are the two things a new phone system most often lacks.
In a hurry? There are five starter templates — a clinic, a law firm, a workshop, a shop and a home line — that create your business hours, your inbound route and your out-of-hours mailbox in one request. They never overwrite something you have already configured.
Getting into your panelover the API
The panel lives at your VOICE page and only appears with a session. That session is minted by your customer area, not typed in here.
| Step | What it does |
|---|---|
| 1 | You sign in to your customer area at elportaldelcliente.com. |
| 2 | You choose «Manage my phone system» from your account menu. It asks VOICE for a session on your behalf and sends you to your VOICE page with the credential in the URL fragment. |
| 3 | The panel replaces the marketing page. The credential is wiped from the address bar before anything is drawn, and it expires on its own. |
For whoever builds that button, this is the whole contract:
POST /inquilinos/:inquilino/sesiones # system scope: only the portal can mint one
{ "minutos": 15 }
→ { "clave": "pbx_ses_…", "caduca": "…", "ambito": "sesion", "minutos_max": 60 }
/voice#t=<clave>&exp=<ISO>&v=<inquilino>
The credential travels in the fragment and not in the query on purpose: a fragment is never sent to a server, so it does not end up in a Referer header, in access logs or in a proxy along the way. It expires in minutes, it is capped, and it can never mint a permanent key.
For whoever answers the phone
The panel, tab by tabover the API
16 sections, the same 16 in all eight languages. Everything here also exists in the API.
| Tab | What it does |
|---|---|
| Overview | How your phone system is doing right now: calls today, answered, in progress, your peak and how reachable your handsets have been. |
| My numbers | Your numbers, and what each one does when it rings. |
| Menus | Voice menus: press 1 for sales, and inside sales another menu. |
| Extensions | People and devices, with per-person rules: follow-me, forwards, do not disturb, what they are allowed to dial, and the doorman. |
| Phone | The phone itself: dial, answer, transfer, park, and see who is on a call. |
| Queues | Queues with position, measured wait time, call-back, who is on shift and who handles what. |
| Rooms | Conference rooms with a key, and who is inside right now. |
| Voicemail | Messages with their transcript, greetings, PIN, the bin and the size limit. |
| Directory | The name directory a caller reaches by spelling on the keypad. |
| Front desk | The operator, parked calls in real time, maintenance windows and the code table. |
| Filters | Blacklist, anonymous-call filter, repeat-caller alerts and everything about who may reach you. |
| Hours | Business hours, holidays and the day/night switch. |
| Music | Hold music and the tracks each flow plays. |
| Calls | Every call with its number, duration, route and recording. |
| Lines | Simultaneous lines: what you have guaranteed, what you are borrowing and your peak. |
| Usage | What you used this month, day by day. |
The phone inside your browserreal call
A tab is a handset. No app to install, no desk phone to buy, no number to port — it is an extension of your own phone system, registered from the browser.
- It is a real extension. The browser registers against your phone system the way a desk phone does, and audio runs over an encrypted connection. Someone calling your number can reach the tab, and the tab can call out.
- The tab has to be open. A closed tab is an unplugged phone. That is the honest limit of a browser phone and the reason it complements a desk handset instead of replacing it everywhere.
- You can see who is on a call.real call The lamps next to your colleagues update live — free, ringing, talking — so you know before you transfer whether there is anybody to transfer to.
- You can move a live call to another device.not exercised yet «I have to leave and I am mid-call»: the call moves to your mobile without hanging up. It is a button and not a keypad code on purpose — whoever moves a call has a screen in front of them.
- Transfer, park and record are the same codes as any other handset. They are dialled, not clicked, so what you learn on the browser phone works on the desk phone and on your mobile.
The browser phone never records to your computer. Recording happens in the phone system, where the rules about who may be recorded and who has to be told are applied — see «Recording, and the law».
Codes you dial from a handset
The classics are kept wherever a convention exists (*72 forward, *78 do not disturb, *97 voicemail, *8 pick up, *69 who just called). That is the whole point of a keypad code: the capability is already in the panel, and the code is what lets somebody who has dialled *72 for twenty years believe the panel.
Dialled with the handset idle
| Code | What it does | Verified |
|---|---|---|
*43 | Echo test. It records what you say and plays it back, and it knows how to say «nothing reached me». | not exercised yet |
*44 | The same, but delayed: it exposes the words that are being dropped. | not exercised yet |
*45 | Keypad test. It says each key as you press it. | not exercised yet |
*46 | The state of your line: registration, codec, address and latency. | not exercised yet |
*60 | The time and the date, said properly. | test bench |
*62 | Your usage this month (calls and minutes; the amount only once billing is live). | not exercised yet |
*69 | Who called you last, said out loud, missed calls included — then press 1 to call them back. | not exercised yet |
*72 | Unconditional forward. It reads the number back to you. | not exercised yet |
*73 | Cancel every forward. | not exercised yet |
*74 | Parallel forward: your extension and the number ring at the same time. | not exercised yet |
*75 | Forward when you are busy. | not exercised yet |
*76 | Forward when you do not answer. | not exercised yet |
*78 | Do not disturb on, confirmed out loud. | not exercised yet |
*79 | Do not disturb off. | not exercised yet |
*80 | Go on shift in all of your queues. | not exercised yet |
*81 | Go off shift in all of your queues. | not exercised yet |
*90 | Block a number (just # blocks the last one that called). | not exercised yet |
*91 | Unblock. | not exercised yet |
*97 | Your voicemail, with your PIN. | test bench |
*98 | Record your greeting. | test bench |
*99 | Record your name — the directory and the conference room use it. | test bench |
*8 | Pick up the call ringing at the next desk. | not exercised yet |
*66 | Mode: normal · lunch · closed · holiday · automatic. | not exercised yet |
*411 | The name directory. | test bench |
*57 | Open a nuisance-call file on the call you just took. The recording stops expiring and the time, the route and the audio are kept for a complaint. It does not block the caller — that is your choice to make. | not exercised yet |
*85 | Camp on: tell me when that extension is free. | not exercised yet |
*86 | Cancel that. | not exercised yet |
*82 | Listen in on a call in your own company. Neither party hears you. | not exercised yet |
*83 | Whisper: only your colleague hears you, not the customer. | not exercised yet |
*84 | Join the call: both parties hear you. | not exercised yet |
*88 | Calls nobody returned, said out loud — then press 1 to return the oldest. | not exercised yet |
*47 | The phone system explains itself: it reads out its own codes, 9 for the next one, 0 to leave. | not exercised yet |
70N | Retrieve the call parked in bay N. | not exercised yet |
Dialled during a conversation
| Code | What it does | Verified |
|---|---|---|
*1 | Record this call, now. Both parties are told. | not exercised yet |
*7 | Park it: the caller gets music and the bay number is said out loud. | not exercised yet |
##<ext># | Blind transfer: pass it over and hang up. | real call |
#<ext># | Transfer without choosing a type. The phone system checks whether there is anybody there and falls back to a blind transfer if there is not. | not exercised yet |
*2<ext># | Attended transfer: talk to your colleague first. | not exercised yet |
While consulting, in an attended transfer
| Code | What it does | Verified |
|---|---|---|
*1 | Complete the transfer. | not exercised yet |
*0 | Cancel and go back to the caller. | not exercised yet |
*3 | Put all three of you on the same call. | not exercised yet |
Inside a conference room
| Code | What it does | Verified |
|---|---|---|
*6 | Anyone: mute and unmute your microphone. | not exercised yet |
*7 | Anyone: how many people are in the room. | not exercised yet |
*9 | Anyone: leave. | not exercised yet |
*1 | Organiser: close the room without changing the key. | not exercised yet |
*2 | Organiser: open it again. | not exercised yet |
*3 | Organiser: start or stop the recording. | not exercised yet |
Some codes mean two things and they do not collide: *1 in a normal conversation is «record now», while consulting it is «complete the transfer», and inside a room it is «lock the room». They are different states of the same phone, handled by different code.
Before you trust a new handset: Desk phones and adapters process their own star codes and never send them on. If you dial a code and get silence and then dial tone, the handset ate it and the phone system never saw a thing. Ask us to check a new model against the current list before you roll it out.
Voicemail from any phonetest bench
Dial *97, enter your PIN, and the whole mailbox is there — no app, no browser. It is written for the owner calling in from a borrowed phone.
Main menu
| Key | What it does |
|---|---|
1 | New messages. |
2 | Saved messages. |
4 | Greetings and your recorded name. |
5 | Change your PIN. |
0 | Out to the operator. |
9 | Hang up. |
While a message is playing
| Key | What it does |
|---|---|
1 | Repeat it. |
2 | Keep it. |
3 | Delete it. Then press 8 within five seconds to undo. |
4 | Call that person back. |
6 | Next one, leaving this one as new. |
7 | Forward it to a colleague with a note of your own recorded in front. |
Greetings menu
| Key | What it does |
|---|---|
1 | Record the main greeting. |
2 | Record your name. |
3 | Set a holiday greeting. |
4 | Take it off. |
Handling the call itself
Ring groups say «make it ring in several places». Everything on this list does something a ring group cannot.
- Queues.not exercised yet A queue knows how many people are ahead and how long it usually takes, so it can say so. The wait is measured from your own recent calls, never invented — with fewer than three samples it says nothing at all. With nobody on shift, nobody is put on hold.
- Call-back from the queue.not exercised yet Offered after a while on hold, and not offered if the call is about to be answered anyway. The request survives a restart, because whoever asks for it hangs up, and the return call goes to the front of the line — which is what was promised.
- Conference rooms.not exercised yet A room with a number and two keys: one to get in, one to run it. Nobody needs an account anywhere. Entries and exits are announced with the name each person recorded themselves.
- The name directory.test bench A caller spells a name on the keypad and gets put through. Every word of a name is indexed separately, because two surnames are normal here and searching only the first one finds half the company. Accents and ñ are folded, so «Muñoz» is found by dialling 686.
- Zero for the operator.not exercised yet Probably the most universal expectation there is about a telephone: being able to reach a person. Zero cascades from your operator to the general mailbox to saying so out loud — never a silent hang-up.
- Park and pick up.not exercised yet Park a call and it waits in a numbered bay with music while you walk to another desk. Anybody can take it back by dialling that bay. Picking up the phone ringing next to you is
*8.
For whoever runs the business
Channels: guarantee, loan and hand-backover the API
This is the part of the product that a hard ceiling cannot do, and it is worth understanding before you pick a plan.
- Guaranteed. The simultaneous calls your plan sells. They always fit, whatever the switch is doing, and nobody can take them away from you.
- On loan. Above your guarantee you use whatever the switch has spare. Most days you will be here, and it costs nothing extra.
- The reserve. A cushion of channels that is never lent to anybody, so that everyone can reach their own guarantee at any moment.
- Hand-back. When the switch is under pressure, borrowed calls can be handed back to protect somebody else's guarantee. It only applies to accounts that enabled it, never to a call inside a guarantee, never to an emergency call, and never in silence — the switch speaks before it releases.
- It cannot be oversold. The sum of every guarantee plus the reserve has to fit. Provisioning checks it and will refuse a plan that does not, which is what makes the word «guaranteed» mean something.
- And you can see when it bit. Congestion is reported as episodes with their hour, not as a monthly total. «Twelve rejections in thirty days» reads as noise; «last Tuesday between ten and eleven, five people heard engaged» is something you can act on.
What happens when something breaks
A phone system is judged on the day the power goes out, not on the day everything works.
- More than one way out. The switch reaches the outside world over several independent connections and picks between them on its own. You do not configure this and you do not see it happen.
- «Working» is measured against the right thing. A connection is only eligible if it reaches both the internet and the telephone network. Checking only the first one is how a phone system ends up with no line while every light is green.
- It comes back on its own after a power cut. When power returns, the switch and the network equipment start at the same time and not always in the right order. Rather than trusting that order, the switch keeps comparing what it actually has against what it should have, and repairs itself — with a ceiling on how often it may retry, so a real fault gets escalated instead of looping.
- It will not cut a call to fix itself. Any repair that would interrupt conversations waits until there are none.
Recordings and voicemail are stored outside the switch, so they survive the machine itself.
Plans and minutes
5 plans, from $100 to $300 a year, and one number per licence. Incoming minutes on a Costa Rican number are $0.00.
| Plan | Simultaneous, up to | Of which guaranteed | Extensions | Retention (days) | Per year |
|---|---|---|---|---|---|
| VOICE I | 3 | 1 | 3 | 3 | $100 |
| VOICE II | 4 | 2 | 4 | 4 | $150 |
| VOICE III | 6 | 3 | 6 | 6 | $200 |
| VOICE IV | 8 | 4 | 8 | 8 | $250 |
| VOICE V | 10 | 5 | No limit | 28 | $300 |
Minutes
| Destination | Per minute |
|---|---|
| Incoming calls | $0.00 |
| Costa Rica · landline | $0.03 |
| Costa Rica · mobile | $0.08 |
| Central America | $0.45 |
| Caribbean | $0.55 |
| Rest of the world | $2.30 |
Prices in US dollars, taxes included. Mobile calls are metered by the second by our carrier. Each licence includes 1 number; extra numbers share the same switch, flows and panel.
Recording, and the lawover the API
Recorded audio is other people's voices. Costa Rican law 8968 governs it, and the design follows from that rather than from what is convenient.
- You decide what gets recorded.over the API Everything, or only certain extensions, or only calls arriving on a certain number. Or nothing, which is a legitimate answer.
- Retention comes with your plan. Recordings are purged automatically when their time is up. The one exception is a recording attached to a nuisance-call file, which stops expiring until you close the file — and closing it returns a normal deadline, never «delete it now».
- Sharing one does not mean giving access. A signed link plays a single recording, expires on its own and can be revoked. The person you send it to never sees your account.
- Every listen is logged. Who played which recording and when. It is somebody else's voice: knowing who has heard it is part of holding it.
- You can file them. Customer, prospect or internal. There is deliberately no default: unlabelled is honest, and a label the machine guessed cannot be told apart later from one a person chose.
Both parties are always told. Asking the switch to record also returns the obligation to announce it — the two cannot be separated, because separating them is how somebody ends up recorded without knowing. In a conference room the announcement is made to each person as they enter.
Limits, protection and undo
The things that decide how bad a bad day gets: a stolen credential, a mistake in the routing, a number that will not stop calling.
- A spend ceiling, daily and monthly.test bench This is what stops a stolen credential from costing money. When the ceiling is reached, calls stop.
- What each extension may dial.over the API Internal only, national, mobile, or everything. The warehouse phone has no reason to be able to call a premium line. Emergency calls are never affected by this.
- The price before you dial.over the API Ask what a given number would cost and the answer is calculated by the same machinery that will actually place the call — not by a rate card that might not be the one applied.
- A fraud alarm that watches behaviour.not exercised yet Unusual speed, a country you have never called, an hour nobody works. It warns and does not cut: a false positive here is not an annoying alert, it is a call that did not happen. It takes two signals before it says anything, because an alarm that goes off daily gets ignored.
- A repeat caller is flagged.not exercised yet The same number five times in two minutes is a dialler, not an insistent customer. Out of the box it only warns; blocking automatically is a box you tick, because a false positive costs you a customer who can never call again.
- A file for a nuisance call.not exercised yet The time, the route and the audio, kept together for a complaint. Opening one does not block the caller: each new call is one more piece of evidence, and that is your decision, not ours.
- How reachable your handsets have been.over the API Not our uptime — yours. And it always shows how much of the period was actually measured, because a percentage that quietly drops the hours nobody looked at always errs in the comfortable direction.
- What changed, who changed it, and undo.not exercised yet «It worked yesterday» is a question with an answer. Every configuration change is recorded and can be reverted, and reverting checks that nobody else has touched those fields in the meantime instead of quietly overwriting them.
What is switched off, and why
A manual that only describes what works forces you to discover the rest on your own, and you always discover it at the worst moment. This list is generated from the switch itself, so it cannot describe something as off after it has been turned on.
| What it does | Why |
|---|---|
| Voicemail to e-mail | The audio attached, without dialling in. It needs a mail credential for the mailbox, and that credential does not exist yet. |
| Automatic per-minute charging | The metering works and every call is measured; what is not switched on is the deduction from a prepaid balance. Until it is, minutes are invoiced. |
| Standby address for handsets | So phones fail over on their own between the two entrances of the switch. It needs a domain credential with write access; the one we hold only reads. |
| Incoming fax | Detecting the tone and telling you about it is built, and it is off on purpose: fax detection listens to every incoming call, and a false positive would drop a real voice call. It stays off until there is a real fax to measure it against. |
For whoever integrates it
The APIover the API
The panel is one client of this API. Anything you change by hand can be changed by program, with a key that belongs to your account.
curl -H "authorization: Bearer <clave>" \
https://api.voice.forhosting.com/inquilinos/<cuenta>/numeros
Scopes
| Scope | What it does |
|---|---|
sistema | Provisioning, across accounts. You will not be issued one of these. |
inquilino | Your account, read and write. This is the key you integrate with. |
lectura | Your account, GET only. For dashboards that should not be able to change anything. |
sesion | Same reach as your account key, but it expires in minutes. It is what the panel uses, so a browser never holds a permanent credential. |
When something goes wrong
| Code | What it does |
|---|---|
400 | The request is malformed, or a value is not one we accept. The message says which. |
401 | No key, an unknown key, or a session that has expired. |
403 | The key is real but may not do this: another account's data, a system-only route, or a write with a read-only key. |
404 | No such thing in your account. |
405 | That path exists, that method does not. Told apart from 404 on purpose — it saves an hour. |
503 · 504 | The switch could not be reached, or did not answer in time. Never answered as «you have nothing»: not being able to look is not the same as there being nothing there. |
There is almost no rate limiting today. The only one is a few seconds' cooldown between attempts to open the browser phone. There is no general quota, and we would rather say so than let you build on an assumption. Be reasonable, and if you are planning something heavy, tell us first so we can measure it with you rather than after you.
What you can reach
| Area | Endpoints | Examples |
|---|---|---|
| Voicemail | 13 | GET /buzones POST /buzones DELETE /buzones/:buz |
| Extensions | 13 | GET /extensiones POST /extensiones DELETE /extensiones/:ext |
| Queues | 12 | GET /colas POST /colas DELETE /colas/:cola |
| Hold music | 12 | GET /discos POST /discos DELETE /discos/:disco |
| Recordings | 9 | GET /grabaciones PUT /grabaciones/:grabacion/categoria DELETE /grabaciones/:grb |
| Ring groups | 8 | GET /grupos POST /grupos DELETE /grupos/:grp |
| Voice menus | 8 | GET /ivrs POST /ivrs DELETE /ivrs/:ivr |
| On-call rotas | 8 | GET /turnos POST /turnos DELETE /turnos/:turno |
| Conference rooms | 7 | GET /conferencias POST /conferencias DELETE /conferencias/:sala |
| Business hours | 7 | GET /horarios POST /horarios DELETE /horarios/:hor |
| Webhooks | 7 | GET /webhooks POST /webhooks DELETE /webhooks/:whk |
| Programmable flow steps | 6 | GET /pasos POST /pasos DELETE /pasos/:pso |
| What each line says | 5 | GET /guiones POST /guiones DELETE /guiones/:gui |
| Messages | 5 | GET /mensajes DELETE /mensajes/:msg GET /mensajes/:msg |
| Inbound routes | 5 | GET /rutas POST /rutas DELETE /rutas/:ruta |
| Dialable aliases | 4 | GET /alias POST /alias DELETE /alias/:als |
| Appointment reminders | 4 | GET /citas POST /citas DELETE /citas/:cita |
| Your contacts | 4 | GET /contactos POST /contactos DELETE /contactos/:con |
| Chat joined to voice | 4 | GET /conversaciones GET /conversaciones/:cnv POST /conversaciones/:cnv/cerrar |
| Devices | 4 | DELETE /dispositivos/:disp POST /dispositivos/:disp/estado POST /dispositivos/:disp/provision |
| Nuisance-call files | 4 | GET /expedientes POST /expedientes GET /expedientes/:exp |
| Recording rules | 4 | GET /grabacion/decidir GET /grabacion/reglas PUT /grabacion/reglas |
| Call records | 4 | GET /llamadas GET /llamadas/:llamada GET /llamadas/csv |
| Numbers | 4 | GET /numeros DELETE /numeros/:numero/aviso-cambio GET /numeros/:numero/aviso-cambio |
| Simultaneous lines | 3 | GET /canales GET /canales/episodios PUT /canales/modo |
| Holidays | 3 | GET /feriados POST /feriados DELETE /feriados/:fer |
| Change history and undo | 3 | GET /historial GET /historial/:cambio POST /historial/:cambio/revertir |
| Blacklist | 3 | GET /lista-negra POST /lista-negra DELETE /lista-negra/:neg |
| Maintenance windows | 3 | GET /mantenimientos POST /mantenimientos POST /mantenimientos/:mnt/cerrar |
| Your account and its state | 2 | GET / PATCH / |
| Directory | 2 | GET /directorio GET /directorio/buscar |
| Sharing links | 2 | GET /enlaces DELETE /enlaces/:token |
| Other | 1 | GET /guiones/claves |
| Parked calls | 1 | GET /aparcadas |
| Who is calling, and about what | 1 | GET /contexto |
| What a call would cost | 1 | GET /cotizar-llamada |
| Where a call may be sent | 1 | GET /destinos |
| Reachability of your handsets | 1 | GET /disponibilidad |
| Statement | 1 | GET /estado-cuenta |
| The live channel | 1 | POST /eventos/ticket |
| Calls in progress | 1 | GET /llamadas-en-curso |
| Click to call | 1 | POST /llamar |
| Operator | 1 | PUT /operadora |
| Where this company calls | 1 | GET /paises |
| Starter templates | 1 | POST /plantilla |
| What may be dialled | 1 | GET /politica-salida |
| Have the switch call you and play something | 1 | POST /probar-audio |
| Test where a call would land | 1 | GET /probar-entrada |
| Try an outbound call without placing it | 1 | GET /probar-salida |
| Balance | 1 | GET /saldo |
| Calls nobody returned | 1 | GET /sin-devolver |
| Connect two outside numbers | 1 | POST /unir |
| Priority callers | 1 | GET /vips |
| The phone in the browser | 1 | POST /webphone/sesion |
267 endpoints in total, read from the switch itself on 2026-08-17.
This table is a summary. The list that cannot go stale is the one the switch generates about itself: GET /api.
Sessions: the browser never holds a permanent key
A short-lived credential, capped at 60 minutes, that cannot mint a permanent one. This is the contract if you are the one building the button.
- Only the portal can mint one. Minting a session needs a provisioning key, because only the portal can state that there is a signed-in customer behind the request. VOICE does not know about customer passwords and has no reason to.
- It never gets born without an expiry. If nobody asks for a duration, one is applied. A scope that exists in order to expire and that could be born eternal is worse than not having it, because people trust it.
- Asking for longer does not work. There is a hard ceiling. A caller asking for eight hours does not make the credential safe.
- It cannot promote itself. Key management lives entirely behind provisioning scope, so a session cannot mint a permanent key. That is enforced in the router, before any handler runs.
- You can end one early. The identifier comes back when you mint it, precisely so that you can revoke it before its time.
Webhooksover the API
Your systems get told what happened instead of asking every few seconds. 28 events, signed, retried, and never dropped in silence.
x-pbx-evento: llamada.entrante
x-pbx-marca: 1755300000
x-pbx-firma: <hex>
{ "evento": "llamada.entrante", "inquilino": "…", "cuando": "…", "datos": { … } }
Every delivery is signed: the signature covers the timestamp and the exact body you received, so verify it against the raw bytes rather than against a re-serialised copy. The secret is shown once when you create the subscription, and it can be rotated without stopping deliveries.
A delivery that fails is retried after 10 · 30 · 60 · 300 · 900 · 3600 seconds, and each attempt is given 10 seconds. A subscription that keeps failing is paused after 20 consecutive failures rather than dropped in silence — and you can see every attempt.
The events
| Event | When it fires |
|---|---|
llamada.entrante | A call is coming in, with the number, the route and where it is heading. |
llamada.contestada | Somebody picked it up. |
llamada.terminada | It ended, with the duration and how it finished. |
llamada.perdida | It rang and nobody answered. |
buzon.mensaje | Somebody left a message, with its transcript. |
grabacion.lista | A recording finished processing and can be downloaded. |
grabacion.analizada | Its transcript, its speakers and its summary are ready. |
saldo.bajo | The balance is running low. |
tope.alcanzado | A spend ceiling was reached and calls have stopped. |
registro.anomalo | A handset registration looks wrong — several credentials from the same place, for instance. |
canales.al_limite | You are near the top of your simultaneous lines. |
cita.confirmada | Somebody confirmed their appointment on the keypad. |
cita.reagendar | Somebody asked for another date. It is a request for a person, not something the switch will resolve on its own. |
cita.cancelada | Somebody cancelled their appointment. |
desvio.activado | A forward was switched on. |
desvio.recordatorio | A forward is still switched on. The forgotten forward is the most common phantom fault a phone system has. |
buzon.lleno | A mailbox is full — from here on, messages would be lost. |
buzon.casi_lleno | A mailbox is close to full, while there is still time to do something. |
cola.vacia | Nobody is on shift in a queue. |
cola.callback | Somebody asked to be called back instead of waiting. |
conferencia.entra | Somebody joined a room. |
conferencia.sale | Somebody left a room. |
canales.desalojo | A borrowed line was handed back to protect somebody's guarantee. |
emergencia.marcada | Somebody dialled the emergency number from an extension. The call is never delayed by this. |
fax.entrante | A fax tone was detected on an incoming call. |
supervision.iniciada | Somebody listened in, whispered or joined a call. This is what separates a supervision tool from a wiretap: being able to answer «who listened to this call, and when». |
fraude.sospecha | A behaviour pattern that looks like fraud. It warns; it does not cut. |
filtro.insistencia | A number is calling far too often. |
The live channelreal call
Webhooks travel in batches and arrive within seconds. Some things need to be on screen now — a lamp that shows a colleague is on a call cannot be fifteen seconds late.
- What it carries. Calls as they happen, new messages, and the lamp state of every extension — which is what makes a busy-lamp field on a screen actually live.
- It is read-only.not exercised yet You can open a ticket for the channel without handing out a phone: watching what happens should not require a credential that can also change things.
- It is not a replacement for webhooks. The live channel is for a screen somebody is looking at. If it matters that your system finds out, use a webhook: it retries, and it does not depend on a socket being open.
Reference
How the badges work
Every capability on this page carries a badge saying how it has been verified. We publish the ones that have not been exercised yet, labelled as such, because you finding out on your own is worse.
| Badge | What it does | How many |
|---|---|---|
| real call | Somebody placed a real call and it did what it says here. | 13 |
| test call | A real call against the live switch, with real keys pressed — but with no voice and nobody listening. Anything that depends on the caller speaking is still untested. | 3 |
| real handset | Proven with a real handset registering. | 1 |
| over the API | Exercised over the public API. | 37 |
| test bench | Exercised on the test bench, against a throwaway copy of the database. | 13 |
| not exercised yet | The code is there and it loads, but nobody has run it yet. | 45 |
112 capabilities, counted from the switch on 2026-08-19.
The badge belongs to a capability, not to a single row: where one capability covers several codes, all of them show the level of the group. That means a badge can understate what has actually been tested — never overstate it, which is the only direction we are willing to be wrong in on a page you read as a promise.
Glossary
The words a phone system uses that nothing else does.
| Term | What it does |
|---|---|
| Extension | A person or a desk inside your company, with a short number other people dial. It is not a phone: one extension can have several devices. |
| Number (DID) | What the outside world dials to reach you. A number points at something — an extension, a group, a menu — and you decide what. |
| Ring group | Several extensions ringing for the same call. Simple, and it has no idea who is waiting or for how long. |
| Queue | A group that keeps a line. It knows the position, the measured wait and who is on shift, and it can offer a call-back. |
| Voice menu (IVR) | «Press 1 for sales». Menus can contain menus, and a caller can always go back or reach a person. |
| Simultaneous line (channel) | One conversation in progress. Ten channels means ten calls at once, whatever the number of phones you own. |
| Call record (CDR) | One row per call: who, when, how long, over which route and how it ended. It is what a bill is built from. |
| Busy lamp | The indicator that shows whether a colleague is free, ringing or talking, without calling them to find out. |
| Keypad tones (DTMF) | The beeps a phone makes when you press a key. They are how a menu, a mailbox and every code on this page hear you. |
| Follow me | Your extension rings your mobile too, or instead. It is the single most used feature of any small phone system. |
| Park | Leave a call waiting in a numbered bay so that anybody, at any phone, can pick it up by dialling that bay. |
| Attended transfer | Talking to your colleague before passing the call over, with the option of taking it back. |