Telenaas API
Seven products on one platform. Authenticate with
Authorization: Bearer <key>
and use the path prefix of the product you want. Create a key in the console, under
Developers.
One prefix per product
A URL says which product it belongs to, and so does the name of every agent tool.
/api/v1/telechat/…
and telenaas_telechat_*
are the same product reached two ways, and a key
scoped to one product cannot wander into another.
Scopes are checked on reads too
A key is deliberately narrower than a person's membership. One scoped to meetings cannot read the call history, even though both belong to the same tenant. Every route below names the scope it needs.
Repeating a request is safe
Send an Idempotency-Key header on anything that writes. Repeating the
request with the same key returns the first response instead of doing the work twice,
which is what makes retrying after a timeout safe.
TeleCall
One-to-one audio, in the app.
A call between two people over WebRTC, with nothing in the middle. Audio only and direct, so it costs a fraction of a video room and connects in well under a second.
For business: Put a call button in your marketplace, your app or your listing, so a buyer reaches a seller without either of them giving out a number.
Endpoints
| Method | Path | What it does | Scope |
|---|---|---|---|
| GET | /api/v1/telecall/calls |
List TeleCall calls
In-app audio calls this key can see, most recent first. |
voice:read |
| POST | /api/v1/telecall/calls |
Place an in-app call
Rings another account over WebRTC. No number is dialled and no carrier is involved, so there is no per-minute charge; pass `to_user_id`. For a call to a telephone, use TeleVoip instead. |
voice:call |
Agent tools
| Tool | What it does | Scope |
|---|---|---|
| telenaas_telecall_place needs approval | Ring another account over the app. No number is dialled and no carrier is involved; for a telephone, use telenaas_televoip_call_place. | voice:call |
| telenaas_telecall_history | In-app calls this person was in. Not the telephone log. | voice:read |
TeleMeet
Video meetings, four people to four hundred.
Scheduled or instant, with a waiting room, screen sharing, dial-in by telephone and the AI agents beside it. Only the active speakers are forwarded, which is what makes a large room affordable rather than theoretical.
For business: Branded rooms, your own domain, service levels, and a room size that matches the town hall rather than the stand-up.
Endpoints
| Method | Path | What it does | Scope |
|---|---|---|---|
| GET | /api/v1/telemeet/meetings |
List meetings
Meetings for this tenant, most recent first. |
meeting:read |
| POST | /api/v1/telemeet/meetings |
Create a meeting
Room size is capped by the tenant's plan. Asking for more is refused rather than quietly reduced. |
meeting:manage |
| GET | /api/v1/telemeet/meetings/{id} |
Get a meeting
One meeting, with its join code and dial-in PIN. |
meeting:read |
| DELETE | /api/v1/telemeet/meetings/{id} |
Cancel a meeting
Marks it cancelled. Anyone already in the room is not thrown out. |
meeting:manage |
Agent tools
| Tool | What it does | Scope |
|---|---|---|
| telenaas_telemeet_create needs approval | Schedule a meeting and return its join code. | meeting:manage |
| telenaas_telemeet_list | List meetings for this tenant. | meeting:read |
| telenaas_telemeet_invite_link | The link and dial-in PIN for a meeting, to send to somebody outside. | meeting:read |
TeleDemo
Show the thing, live.
A public room where somebody demonstrates a product in real time and anybody can walk in from a link — no account, no application. Viewers ask questions beside the video, and the presenter can take one of them on camera.
For business: A live shop window. Run a demo from a product page, a marketplace listing or a campaign, and let anybody who is curious watch it happen.
Endpoints
| Method | Path | What it does | Scope |
|---|---|---|---|
| DELETE | /api/v1/teledemo/demos/{id}/live |
End a demo
Closes the room. The recording, if there was one, still has to be claimed. |
demo:host |
| POST | /api/v1/teledemo/demos/{id}/live |
Go live
Opens the room and tells everybody watching the directory that it has started. |
demo:host |
| GET | /api/v1/teledemo/demos/{id} |
Get a demo
One demo, with its audience count. |
demo:read |
| GET | /api/v1/teledemo/requests |
Demo requests
People who asked for a demonstration and have not had one yet. |
demo:read |
| GET | /api/v1/teledemo/demos/{id}/questions |
Questions asked
The audience's questions, most upvoted first, with the answers given. |
demo:read |
| GET | /api/v1/teledemo/demos |
List demos
Scheduled, live and finished product demonstrations. |
demo:read |
| POST | /api/v1/teledemo/demos |
Schedule a demo
Creates the demo and its public page. Viewers join by slug and need no account; a demo is a broadcast with a question queue, not a meeting everybody talks in. |
demo:host |
Agent tools
| Tool | What it does | Scope |
|---|---|---|
| telenaas_teledemo_schedule needs approval | Schedule a live product demonstration and return its public link. Viewers need no account. | demo:host |
| telenaas_teledemo_list | Demos in this tenant: scheduled, live and finished. | demo:read |
| telenaas_teledemo_go_live needs approval | Open the room for a demo and announce it to everybody watching the directory. | demo:host |
| telenaas_teledemo_questions | What the audience asked, most upvoted first — the useful thing to summarise after a demo. | demo:read |
TeleVoip
Real numbers on the real telephone network.
Numbers, inbound and outbound calls, queues and emergency calling. The part that reaches somebody who has never heard of us and is holding an ordinary telephone.
For business: Numbers per country, call centre queues, recording where the law allows it, and emergency calling handled properly.
Endpoints
| Method | Path | What it does | Scope |
|---|---|---|---|
| POST | /api/v1/televoip/numbers/{id}/assign |
Assign a number
Give a number to a person in this tenant, or to a TeleAssistant so that it answers instead. |
number:assign |
| GET | /api/v1/televoip/calls |
List calls
Telephone call history for this tenant. |
voice:read |
| POST | /api/v1/televoip/calls |
Place a call
An emergency number takes a different path: never billed, never rate-limited, and refused outright if there is no dispatchable location. |
voice:call |
| GET | /api/v1/televoip/numbers |
List numbers
Numbers this tenant holds. |
number:read |
Agent tools
| Tool | What it does | Scope |
|---|---|---|
| telenaas_televoip_call_place needs approval | Place a call. Emergency numbers require an address on file. | voice:call |
| telenaas_televoip_call_history | Recent calls for this tenant. | voice:read |
| telenaas_televoip_number_list | Phone numbers this tenant holds. | number:read |
| telenaas_televoip_number_request | Ask for a phone number on behalf of the person this key acts for. | number:request |
TeleChat
Live chat, between anybody.
Conversations with presence, typing, replies and announcements. Message bodies are encrypted per organisation, so the platform carries them without being able to read them.
For business: Drop the widget into your website and a visitor is talking to your team in one line of script — the same conversation your staff already answer in the console.
Endpoints
| Method | Path | What it does | Scope |
|---|---|---|---|
| GET | /api/v1/telechat/attachments/{id} |
Fetch a file
A short-lived download link for a file message: the provider's own when it can sign one, ours otherwise. |
chat:read |
| GET | /api/v1/telechat/widgets |
List chat widgets
The website widgets this tenant has, with their public keys and allowed origins. |
chat:read |
| POST | /api/v1/telechat/widgets |
Create a chat widget
Returns a public key for the `<script>` tag. The key is not a secret — `allowed_origins` is what keeps the widget to your own sites, and an empty list refuses every origin. |
chat:moderate |
| GET | /api/v1/telechat/conversations/{id}/archive |
Archived days
Days moved out of the hot window into the organisation's storage, newest first. |
chat:read |
| GET | /api/v1/telechat/conversations |
List conversations
Chat threads this key can see, including those started from a website widget. |
chat:read |
| POST | /api/v1/telechat/conversations/{id}/attachments |
Send a file
Multipart `file`, or JSON `name` and base64 `data`. Stored in the organisation's own storage; the message carries only the name and a reference. |
chat:write |
| POST | /api/v1/telechat/conversations/direct |
Start a direct conversation
Between the calling person and `user_id`; reuses the existing one. |
chat:write |
| GET | /api/v1/telechat/conversations/{id}/messages |
Read recent messages
The hot window, newest last, decrypted for the caller. Older days are in the archive. |
chat:read |
| POST | /api/v1/telechat/conversations/{id}/messages |
Send a message
Posts into a conversation. Bodies are encrypted at rest per tenant. |
chat:write |
| GET | /api/v1/telechat/conversations/{id}/archive/{day} |
Read an archived day
The messages of one archived day, fetched from the organisation's storage and decrypted for the caller. |
chat:read |
Agent tools
| Tool | What it does | Scope |
|---|---|---|
| telenaas_telechat_message_send | Send a message to a conversation. | chat:write |
| telenaas_telechat_conversation_list | Conversations visible to this key. | chat:read |
| telenaas_telechat_message_list | Recent messages of a conversation, oldest first, decrypted for this key. | chat:read |
| telenaas_telechat_direct_start | Start (or find) the direct conversation with a person. | chat:write |
| telenaas_telechat_widget_list | The website chat widgets this tenant has, with the origins each one is allowed to load from. | chat:read |
TeleDesk
A help desk that knows about the call.
Tickets, queues with real routing rules, service levels computed from timestamps rather than tracked by a flag, and a knowledge base that knows what may be sent to a customer and what may not.
For business: One thread per problem, whether it started on the telephone, in chat or in a meeting.
Endpoints
| Method | Path | What it does | Scope |
|---|---|---|---|
| GET | /api/v1/teledesk/knowledge |
Search the knowledge base
Pass `audience=public` to get only articles that may be sent to a customer. |
helpdesk:read |
| GET | /api/v1/teledesk/tickets/{id} |
Get a ticket
With its messages. Internal notes are included only for a key holding helpdesk:respond. |
helpdesk:read |
| POST | /api/v1/teledesk/tickets/{id}/replies |
Reply to a ticket
Set `internal` to true for a note to colleagues, which is not sent to the requester. |
helpdesk:respond |
| GET | /api/v1/teledesk/tickets |
List tickets
Help desk tickets for this tenant. |
helpdesk:read |
| POST | /api/v1/teledesk/tickets |
Open a ticket
Routed to a queue by the same rules a ticket opened by a person would be. |
helpdesk:respond |
Agent tools
| Tool | What it does | Scope |
|---|---|---|
| telenaas_teledesk_ticket_open | Open a help desk ticket. Routed to a queue by the same rules a person's would be. | helpdesk:respond |
| telenaas_teledesk_ticket_list | Tickets in this tenant, newest first. | helpdesk:read |
| telenaas_teledesk_ticket_reply needs approval | Reply to a ticket. An internal note is not sent to the person who raised it. | helpdesk:respond |
| telenaas_teledesk_knowledge_search | Search the knowledge base. Ask for audience 'public' to get only what may be sent to a customer. | helpdesk:read |
TeleAssistant
What answers when you cannot.
A virtual assistant in front of a TeleVoip number: a greeting, a menu, voicemail, out-of-hours handling, and an agent that can take a message or route the call.
For business: Per number, per queue, per time of day — with the AI agents transcribing the voicemail and telling you what it was about.
Endpoints
| Method | Path | What it does | Scope |
|---|---|---|---|
| GET | /api/v1/teleassistant/assistants |
List assistants
The assistants in this tenant and the numbers they answer. |
assistant:read |
| POST | /api/v1/teleassistant/assistants |
Create an assistant
A greeting, business hours, and what to do outside them: take a message, offer a menu, forward, or hand over to an AI agent. |
assistant:manage |
| GET | /api/v1/teleassistant/voicemails |
List voicemails
Who called, when, and the transcript. The audio is not here: like every recording, it is delivered to a device or to Burmeel Storage and never kept in our database. |
assistant:read |
| GET | /api/v1/teleassistant/assistants/{id} |
Get an assistant
One assistant, with its menu and its schedule. |
assistant:read |
Agent tools
| Tool | What it does | Scope |
|---|---|---|
| telenaas_teleassistant_list | Assistants in this tenant: what they answer, and what they do out of hours. | assistant:read |
| telenaas_teleassistant_voicemails | Messages left for this tenant, with transcripts. The audio is not here and never was: recordings leave to a device or to Burmeel Storage, and are not kept. | assistant:read |
Platform
What belongs to no single product: what a key can reach, what it has used, what it has been told, and the automations that wire the products together.
Endpoints
| Method | Path | What it does | Scope |
|---|---|---|---|
| GET | /api/v1/assistants/plan/{number} |
An assistant's plan for a dialled number
Infrastructure token. What the assistant in front of this number wants done with an incoming call: the greeting, the action, the forward or the menu. 404 with `no_assistant` means ring it normally. |
infrastructure token |
| GET | /api/v1/audit |
Audit ledger
Hash-chained, append-only, and readable here. |
audit:read |
| POST | /api/v1/calls/events |
A call event from the switch
Infrastructure token. `started`, `answered` or `ended`, keyed on the switch's own call id. This is what turns a call into a record with a duration and a cost. |
infrastructure token |
| GET | /api/v1/emergency/route/{number} |
Emergency routing
Where an emergency call from this number goes, and with what address. |
infrastructure token |
| GET | /api/v1/meetings/by-pin/{pin} |
Resolve a dial-in PIN
Used by the telephony switch. Authenticated with the infrastructure token, not an API key. |
infrastructure token |
| POST | /api/v1/meetings/{id}/phone-legs |
Join a meeting by telephone
Used by the conference bridge. Admits a caller and answers with the RTP addresses for their leg, or 202 when the host has not admitted them yet. |
infrastructure token |
| DELETE | /api/v1/meetings/{id}/phone-legs/{participant_id} |
End a telephone leg
Releases the media node's ports when the caller hangs up. |
infrastructure token |
| GET | /api/v1/products |
The product line
The seven products, what each one is for, which tiers it has, and which of them this tenant's plan actually includes. Read this rather than hard-coding the list. |
tenant:read |
| GET | /api/v1/realtime/ice |
ICE servers
STUN, plus a TURN credential minted for this request and valid for an hour. Fetch these per session rather than caching them: WebRTC that works in an office and fails on a phone is almost always a missing relay, and a stale credential fails the same way. |
meeting:read |
| GET | /api/v1/realtime/rooms/{room} |
Open an SFU room
Opens the room for one of this tenant's meetings on the media plane and returns the router's RTP capabilities — the first step of the mediasoup handshake. `room` is the meeting id; a meeting belonging to another tenant answers 404 exactly as a made-up id does. Signalling continues over the media socket. If no media plane is configured this answers 200 with `sfu: false`, so a caller can fall back to mesh instead of waiting. |
meeting:manage |
| POST | /api/v1/realtime/socket-token |
Mint a socket token
A two-minute token that opens the signalling socket at /media/socket in place of the API key, so the key never appears in a WebSocket URL, a proxy log or a browser history. Pass it as the `token` connect parameter. |
meeting:read |
| GET | /api/v1/status |
Platform status
What this key can reach, and whether the platform is healthy. |
tenant:read |
| GET | /api/v1/storage |
Where files and history live
The organisation's storage plane: Burmeel by default, or its own Amazon S3, Google Cloud Storage, Azure Blob or S3-compatible bucket. Never returns credentials. |
tenant:read |
| PUT | /api/v1/storage |
Choose the storage
`provider` (burmeel, s3, gcs, azure), `bucket`, `endpoint`, `region`, `account`, `prefix`, `key_id`, `secret`. Credentials are encrypted under the organisation's own key and only replaced when supplied. |
tenant:manage |
| POST | /api/v1/storage/verify |
Check the storage
Writes, reads back and deletes a probe object with the configured credentials. |
tenant:manage |
| GET | /api/v1/usage |
Usage
Metered usage for the current billing period. |
billing:read |
| GET | /api/v1/webhooks |
List webhook endpoints
Where we send events. |
developer:read |
| POST | /api/v1/webhooks |
Add a webhook endpoint
Returns the signing secret once. The timestamp is inside the signature, so a captured delivery cannot be replayed later. |
developer:manage |
| GET | /api/v1/webhooks/deliveries |
Delivery history
So "it never arrived" has an answer. |
developer:read |
| GET | /api/v1/workflow-runs |
Automation history
Every run, with the steps it took and the ones it was denied. |
automation:read |
| GET | /api/v1/workflows |
List automations
What runs on its own in this tenant. |
automation:read |
| POST | /mcp |
Model Context Protocol
A JSON-RPC dispatcher for agents. Tools are named for the product they belong to; each enforces its own permission, so an agent can never reach further than a REST client holding the same key. |
any authenticated key |
Agent tools
| Tool | What it does | Scope |
|---|---|---|
| telenaas_storage_describe | Where this organisation's files and chat history are stored. | tenant:read |
| telenaas_usage_summary | What this tenant has used and what it costs. | billing:read |
| telenaas_audit_search | Read the audit ledger. | audit:read |
| telenaas_automation_list | Automations in this tenant and whether they are running. | automation:read |
| telenaas_automation_dry_run | Test an automation against events that already happened. Nothing is performed. | automation:read |
| telenaas_products | The seven products, and which of them this key can actually reach. Read this before guessing a tool name. | tenant:read |
| telenaas_platform_health | Whether each part of the platform is answering. | tenant:read |