Skip to main content

EchoCall

de.echocall/echocallVersion 1.22.0

Run EchoCall AI phone and chat agents from ChatGPT or Claude: calls, agents, knowledge and numbers.

Status

Responds202 msAnswered our handshake without sign-in.

Registry data may be out of date

We could not refresh it, so this page shows the last copy.
Last checked
Nov 14, 2026, 14:24 UTC
Latency
202 ms
Remotes responding
1 of 1
Sign-in
No sign-in
Hosting
EU hosting detected (detected, not a legal statement)
Registry data as of
Nov 14, 2026, 22:14 UTC

Data from the official MCP Registry, checked by run.zero. How we check

Connect

Streamable HTTP
https://hub.echocall.de/mcpResponds202 ms
No sign-in

Claude Code

claude mcp add --transport http echocall https://hub.echocall.de/mcp

Claude Desktop and claude.ai

Settings > Connectors > Add custom connector
Name: echocall
Remote MCP server URL: https://hub.echocall.de/mcp

Cursor

{
  "mcpServers": {
    "echocall": {
      "url": "https://hub.echocall.de/mcp"
    }
  }
}

VS Code

code --add-mcp '{"name":"echocall","type":"http","url":"https://hub.echocall.de/mcp"}'

Built your own server? run.zero hosts MCP servers on European infrastructure.

Host your own MCP server on run.zero

Tools

168 tools

Tools of EchoCall
Read-only
Idempotent
Open world
add_agent_knowledgeAdd a knowledge source to an agent Adds one knowledge source to a voice agent. The body is one of three shapes chosen by `type`: `url` reads one page and reads it again every `syncInterval` (weekly by default), `text` takes up to 200000 characters of `text` to store verbatim, `crawl` reads a whole website from its start page, up to `maxDepth` links deep and `maxPages` pages, and crawls it again every `syncInterval`. A crawl runs in the background with status `pending`; follow it with `GET /agents/{agentId}/knowledge/crawl`. `title` is optional and defaults to the URL, the host name for a crawl, or to "Text Knowledge" for a text entry. Files go through `POST /agents/{agentId}/knowledge/files`. The document is created in the voice engine and then attached to the agent, which from then on draws on it in calls. The entry is stored under the account that owns the agent, also when a reseller key adds it. When the document cannot be created or attached, the request still succeeds and the entry is stored with status `failed`; delete it and add it again.NoNoNoNo
add_agent_knowledge_fileAdd a file to an agent knowledge base Adds a file as knowledge source to a voice agent, as the dashboard upload does. Send the file as base64 in `base64` with its name in `fileName`. Allowed are PDF, TXT, MD, CSV and JSON files of at most 15 MB; the content must match the extension (a PDF starts with `%PDF-`, text files are UTF-8), otherwise the request is rejected with 400. Over MCP the whole request may be at most 1 MB, so larger files go through the API directly. The document is created in the voice engine and attached to the agent. When that fails, the request still succeeds and the entry is stored with status `failed`; delete it and add it again.NoNoNoNo
add_chatbot_knowledgeAdd a knowledge source to a chatbot Adds one knowledge source to a chatbot. `type` says how to read `content`: for `url` it is the address to draw from, read again every `syncInterval` (weekly by default), for `text` it is the literal text, for `file` it is the text of the file, named by `fileName` and described by `mimeType`, and for `crawl` it is the start page of a website that is read up to `maxDepth` links deep and `maxPages` pages and crawled again every `syncInterval`. A crawl runs in the background with status `pending`; follow it with `GET /chatbots/{chatbotId}/knowledge/crawl`. `content` is always required and must not be empty. The document is created in the voice engine and then attached to the chatbot, which from then on draws on it in conversations. The entry is stored under the account that owns the chatbot, also when a reseller key adds it. When the document cannot be created or attached, the request still succeeds and the entry is stored with status `failed`; delete it and add it again. Note that the 400 response for an invalid body carries only an error code and a `details` list, with no `message` key, unlike the other endpoints.NoNoNoNo
assign_agent_integrationAssign an integration to an agent Gives a voice agent access to one integration, so its tools become callable during a call. The integration must belong to the account that owns the agent, which for a reseller key is the customer account, not the reseller. The `enabledTools` field decides which of the integration actions the assistant may call: null means the recommended default set for that integration type, an empty array means the assistant may call nothing, and a list of tool names means exactly those tools and no others. Tool names are the `name` values from the integration tool catalogue. A list may only name tools the permissions of the integration allow (`permitted` in the catalogue, see GET /integrations/{id}/permissions); a tool outside them is refused with 422 and error code `tool_not_permitted`, while a malformed list or an unknown tool name stays a 400 `validation_error`. Assigning an integration that is already assigned returns 409. After the row is written the new tool set is pushed to the voice engine; if that push fails the assignment is rolled back and the request returns 502, so the response always reflects the live agent.NoNoNoNo
assign_chatbot_integrationAssign an integration to a chatbot Gives a chatbot access to one integration, so its tools become callable during a chat. The integration must belong to the account that owns the chatbot, which for a reseller key is the customer account, not the reseller. The `enabledTools` field decides which of the integration actions the assistant may call: null means the recommended default set for that integration type, an empty array means the assistant may call nothing, and a list of tool names means exactly those tools and no others. Tool names are the `name` values from the integration tool catalogue. A list may only name tools the permissions of the integration allow (`permitted` in the catalogue, see GET /integrations/{id}/permissions); a tool outside them is refused with 422 and error code `tool_not_permitted`, while a malformed list or an unknown tool name stays a 400 `validation_error`. Assigning an integration that is already assigned returns 409. After the row is written the new tool set is pushed to the voice engine; if that push fails the assignment is rolled back and the request returns 502, so the response always reflects the live chatbot.NoNoNoNo
buy_instant_phone_numberCOSTS MONEY: Buy a phone number at once Buys a number from `GET /phone-numbers/instant` and pays the first month plus VAT from your balance, like the instant buy on the billing page. The number joins your account at once; assign it to an agent afterwards.NoNoNoNo
cancel_agent_knowledge_crawlStop a website crawl of a voice agent Stops a running crawl. Pages read so far stay in the knowledge entry. Only voice agents of your own account.NoNoNoNo
cancel_bookingIRREVERSIBLE: Cancel a booking Cancels a booking in the calendar of the integration. The optional `reason` is handed to the calendar provider, which may show it to the attendee.YesNoNoNo
cancel_call_campaignIRREVERSIBLE: Cancel a running or scheduled campaign Stops a submitted campaign: pending calls are abandoned and the campaign moves to `cancelled`. Calls already placed are not undone and remain chargeable, so cancelling limits further spend rather than reversing it. A campaign that was never submitted is refused with 400 and should be deleted instead, and one that is already `completed`, `cancelled` or `failed` is refused with 409. Cancellation is recorded locally even when the upstream stop could not be attempted. This operation uses the `write:agents` scope rather than a scope of its own.YesNoNoNo
cancel_chatbot_knowledge_crawlStop a website crawl of a chatbot Stops a running crawl. Pages read so far stay in the knowledge entry. Only chatbots of your own account.NoNoNoNo
cancel_pending_plan_changeDrop a scheduled plan change A plan change booked for the end of the term does not happen; the current plan runs on.NoNoNoNo
cancel_phone_numberIRREVERSIBLE: Cancel a phone number Cancels a number bought through the marketplace, with a 30 day grace period: the number is released at the carrier straight away but stays usable on the account until `cancelationEndDate`, and the record is kept rather than deleted. Only marketplace numbers can be cancelled here; a number that was imported by other means is rejected with 400. Cancelling twice is rejected with 409. This does not refund the setup charge or the month already paid for.YesNoYesNo
cancel_subscriptionIRREVERSIBLE: Cancel a subscription Cancels at the end of the term: everything keeps working until `endDate`, then the plan ends.YesNoNoNo
close_conversationIRREVERSIBLE: Close a chat conversation Closes a chat conversation and finalises it: the closing time is stamped and the response time and duration figures of the thread are recomputed, which is what the analytics endpoints then report. Chat threads only, a voice call id is rejected with 400. This endpoint takes no request body. Closing an already closed conversation runs the finalisation again rather than failing. The closed conversation is returned in `data`.YesNoNoNo
close_ticketClose a support ticket Closes one of your support tickets for good once the issue is solved. Use it only when nothing is left to do: a closed ticket takes no more replies and cannot be reopened, so a follow up needs a new ticket from `create_ticket`. To add information instead, use `reply_to_ticket`. Every call sends the closing email to your account address again, so call it once. `ticketId` comes from `list_tickets`, which afterwards shows the ticket only with `includeArchived=true`. 404 when the ticket is not yours.NoNoNoNo
confirm_bookingConfirm a booking request Confirms a booking that waits for the host (status `pending`). The calendar provider then informs the attendee as it always does. Only calendars with booking requests support this (Cal.com). The others answer 422 `not_supported`.NoNoNoNo
create_agentCreate a voice agent Creates a voice agent and provisions it in the voice engine in the same request, so the agent is ready to take calls as soon as the call succeeds. Only `name` and `language` are required; every other field falls back to a platform default, and `language` is normalised to a two-letter code, so a value like "german" is stored as `de`. The response is a short acknowledgement rather than the full agent, so read the agent back if you need the stored configuration. The new agent is created with status `active` and is owned by the account behind the key, or by the reseller for a reseller key.NoNoNoNo
create_bookingBook an appointment Books a slot of an event type in a connected calendar, like the booking form on the calendar page. Get event types from `GET /integrations/{id}/event-types`.NoNoNoNo
create_call_campaignCreate a batch calling campaign Creates an outbound campaign: a named list of up to 10000 numbers that one voice agent will call. The campaign is created in state `draft` and nothing is dialled until you submit it, so this call places no calls and incurs no call charges. The agent must belong to you, and so must `callerPhoneNumberId` if you set one; either being unknown or owned by someone else gives 404. Per-recipient `metadata` is handed to the agent as conversation context, which is how you personalise each call. This operation is guarded by the `write:agents` scope rather than a scope of its own.NoNoNoNo
create_chatbotCreate a chatbot Creates a chatbot and provisions it in the voice engine in the same request, then derives its hosted chat page URL from the new identifier. Only `name` is required; the language defaults to `de` and the widget appearance fields all have platform defaults. The widget microphone stays off until `enableVoice` is true; a spoken conversation then runs on the voice allowance of the account, and `voiceId` chooses the voice from GET /voices or GET /voices/available. Unset text fields are stored with sensible fallbacks, so an omitted `greeting` becomes a generic opening line and an omitted display name repeats `name`. The response carries the new identifier and the public URL, not the full chatbot.NoNoNoNo
create_integrationConnect an integration Stores the credentials and settings for one third-party service and returns the new integration's identifier. The integration is created active, but connecting it does not by itself let an agent use it: it still has to be assigned to an agent or chatbot. `config` is a JSON string, not a nested object, so serialise it before sending; the keys it must contain are the ones listed under `configFields` for this type in GET /integrations/types. A `config` that contains the mask `********` anywhere is refused with 400 and error code `masked_without_stored_value`: the mask stands for a stored secret, and a new integration has none, so send the real values. Keys inside `config` that only the server writes (the connection keys and `toolPermissions`) are dropped before the integration is stored. Nothing is contacted at creation time, so a wrong credential is only noticed later: call the test endpoint afterwards to confirm the connection works. A WhatsApp integration whose phone number is already connected in an active integration of another account is refused with 409 and error code `conflict`. A Genesys Cloud integration (type `genesys_cloud`) follows its own rules.NoNoNoNo
create_presence_deviceAdd a counter screen Creates a screen that talks with the given voice agent and returns a pairing code, valid for 24 hours. Type the code on the tablet to pair it. Fails with 403 when your plan pays for no further screen.NoNoNoNo
create_ticketOpen a support ticket Creates a support ticket on behalf of the authenticated account and returns its identifier. The ticket starts in state `open`, and `category` and `priority` fall back to `other` and `medium` when they are not given. Put everything a human needs into `description`: error messages, the identifiers involved and the steps that led to the problem, since the first reply is written by a person reading exactly this text. Creating a ticket also emits the `ticket.created` outbound webhook event to any endpoint subscribed to it.NoNoNoNo
create_webhookRegister a webhook endpoint Registers an HTTPS endpoint and subscribes it to the named events. The response contains a `secret`, and this is the only time it is ever returned: store it before you do anything else, because no endpoint anywhere in this API will show it to you again, and losing it means deleting the endpoint and registering a new one. The secret keys the HMAC-SHA256 signature sent with every delivery in the `X-EchoCall-Signature` header, which is how you prove a payload really came from us. Every name in `events` must be a name from GET /webhooks/events, or the literal `*` for all of them; an unknown name is rejected with 400 rather than silently never firing. The target URL is resolved and refused with 400 if it points at a private or internal address.NoNoNoNo
decline_bookingIRREVERSIBLE: Decline a booking request Declines a booking that waits for the host (status `pending`). The optional `reason` is handed to the calendar provider, which may show it to the attendee. Only calendars with booking requests support this (Cal.com). The others answer 422 `not_supported`.YesNoNoNo
delete_agentIRREVERSIBLE: Delete a voice agent Deletes a voice agent permanently and removes it from the voice engine. This cannot be undone, and any phone number still routed to this agent stops being answered by it. Its integration links and knowledge entries are deleted with it, and so are the indexed knowledge documents that no other agent uses. The removal in the voice engine is attempted first, but a failure there does not stop the local deletion, so the agent always disappears from the account. This endpoint takes no request body.YesNoYesNo
delete_agent_knowledgeIRREVERSIBLE: Delete an agent knowledge source Removes one knowledge source from a voice agent: the entry is deleted and the agent no longer draws on the document. The indexed document is deleted from the voice engine as well, unless another entry or another agent still uses it. The entry must belong to this agent, otherwise the request is rejected with 404. A failure in the voice engine is logged and does not stop the local deletion. This endpoint takes no request body.YesNoYesNo
delete_api_keyIRREVERSIBLE: Delete an API key Deletes one of your API keys for good: it stops working at once and disappears from `list_api_keys`. Use `revoke_api_key` instead when the key should stay listed as revoked. Only keys made in the developer portal or with `POST /developer/api-keys` are deleted here; the access of a connected AI app ends with `disconnect_ai_app`. `id` comes from `list_api_keys`. 404 when no such key of yours exists.YesNoYesNo
delete_call_campaignIRREVERSIBLE: Delete a batch calling campaign Deletes a campaign and its recipient rows permanently. Only a campaign that was never submitted, or one that has since been cancelled or failed, can be deleted: a submitted campaign in any other state is refused with 409 and has to be cancelled first. Deleting removes the recipient history along with the campaign, so export anything you need from the recipients endpoint before calling this. The response is a bare confirmation message with no `success` field, and the operation uses the `write:agents` scope rather than a scope of its own.YesNoYesNo
delete_chatbotIRREVERSIBLE: Delete a chatbot Deletes a chatbot permanently and removes it from the voice engine. This cannot be undone, and any widget still embedded on a website stops working. Its integration links and knowledge entries are deleted with it, and so are the indexed knowledge documents that no other agent uses. The removal in the voice engine is attempted first, but a failure there does not stop the local deletion, so the chatbot always disappears from the account. This endpoint takes no request body.YesNoYesNo
delete_chatbot_knowledgeIRREVERSIBLE: Delete a chatbot knowledge source Removes one knowledge source from a chatbot: the entry is deleted and the chatbot no longer draws on the document. The indexed document is deleted from the voice engine as well, unless another entry or another agent still uses it. The chatbot must be one the key may use and the entry must belong to this chatbot, otherwise the request is rejected with 404, so a repeated call answers 404. A failure in the voice engine is logged and does not stop the local deletion. This endpoint takes no request body.YesNoYesNo
delete_integrationIRREVERSIBLE: Delete an integration Removes the integration and the credentials stored with it. When an account of the service was connected through the dashboard for this integration, that connection is removed as well, unless another integration still uses it; this happens on a best-effort basis and never blocks the delete. This cannot be undone, and any agent that was assigned this integration loses the ability to perform its actions from the moment of deletion: its assignments to agents and chatbots are removed and their tool lists rebuilt at once. To stop use of an integration temporarily while keeping its configuration, set `isActive` to false with a PATCH instead. Deleting a Genesys Cloud integration also ends its running calls, a call can take up to a minute to end, and its access data stop working at once.YesNoYesNo
delete_live_chat_agentIRREVERSIBLE: Remove a live chat staff member Deletes one live chat staff member for good: the person can no longer sign in to your live chat and gets no more chats. To only stop new chats for a while, set them offline with `set_live_chat_agent_status` instead. Adding them again is only possible in the dashboard or with `POST /team/live-chat-agents`. `agentId` comes from `list_live_chat_agents`. Only the account owner can call this; 404 when the staff member is not yours.YesNoYesNo
delete_presence_deviceIRREVERSIBLE: Remove a counter screen Removes the screen. A paired tablet stops working right away.YesNoYesNo
delete_sip_trunkIRREVERSIBLE: Disconnect a SIP trunk Removes a number you connected yourself from EchoCall and from its agent. The number stays with your carrier. Only such numbers of your own account.YesNoYesNo
delete_webhookIRREVERSIBLE: Delete a webhook endpoint Removes an endpoint permanently. Deliveries stop at once and the signing secret is destroyed with the record, so this cannot be undone: registering the same URL again produces a new endpoint with a new secret. If you only want to pause deliveries, set `isActive` to false with a PATCH instead.YesNoYesNo
deposit_balanceCOSTS MONEY: Top up the balance Charges one of your stored cards right away and adds the amount to your prepaid euro balance; this cannot be undone over the API. `amountEur` is net: the balance carries no VAT, VAT is charged when the balance is used. The balance pays for orders placed with `place_order` and payment method `balance`. To buy a plan or add-on directly use `place_order`; for automatic refills of minutes and conversations use `set_auto_topup`. `paymentMethodId` is an `id` from `list_payment_methods`. Refused with 400 when the card holder has to confirm the payment (top up in the dashboard then), when top ups are not available for your account or when the payment fails. Returns the new balance.NoNoNoNo
disconnect_ai_appIRREVERSIBLE: Disconnect an AI app The app loses access at once and has to be connected again.YesNoYesNo
get_agentGet a voice agent Returns the full public configuration of one voice agent, including the system prompt, the opening line, model settings and the recording and retention settings. Internal voice engine identifiers are never included. A reseller key may read any agent belonging to that reseller; an ordinary key only its own. An identifier that is not a number after the `agent_` prefix is removed is rejected with 400.NoYesYesNo
get_agent_analyticsGet agent statistics Returns the lifetime aggregate metrics of one voice agent: call counts, durations, cost, token consumption and quality scores. The figures are read live from the conversation records, so a call is counted as soon as it has ended. Cost is in USD, as the voice engine reports it. An agent that exists but has no recorded activity yet answers 200 with `stats` set to null. An agent that does not belong to the calling account answers 404, the same as one that does not exist; a path segment that is not a number answers 400.NoYesYesNo
get_analytics_summaryGet a usage summary Returns usage over a date window, aggregated into one row per usage type, with the quantity consumed and the revenue, cost and margin that go with it. Rows appear only for usage types that were actually recorded in the window, so an idle account gets an empty `metrics` array rather than rows of zeroes. Both bounds are optional: without them the window is the last 30 days ending now. The window that was actually applied is echoed in `period`.NoYesYesNo
get_api_logGet one logged request in full Returns one logged request of your API keys in full: method, path, status, error message, timing, the request headers and the request and response bodies. Keys, tokens and passwords are already removed. Use it to inspect a single call after finding it with `list_api_logs`, which gives the `id`; for totals and error rates use `get_api_log_stats`. Read only. 404 when the entry does not belong to your keys.NoYesYesNo
get_api_log_statsRequest figures of your keys Requests, errors and refused requests of the last 24 hours and 7 days, the five most used paths, distinct IP addresses and the average response time.NoYesYesNo
get_balanceGet the prepaid balance and remaining allowances Returns the account's wallet balance in EUR alongside the voice minutes and chat conversations still available in the current period. These are live counters: they fall as calls and conversations are consumed and are topped back up by a plan renewal or an add-on purchase. Use this before starting a batch campaign to confirm there is enough left to pay for it.NoYesYesNo
get_call_campaignRead a batch calling campaign Returns one campaign with its current counters: how many numbers it holds and how many calls have succeeded, failed or are still waiting. `batchId` stays null until the campaign is submitted. The counters are the ones stored on the campaign record and are updated as call results arrive, so poll this endpoint to follow a running campaign. It is guarded by the `read:agents` scope rather than a scope of its own.NoYesYesNo
get_chatbotGet a chatbot Returns the full public configuration of one chatbot, including the system prompt, the widget appearance, the widget voice, the embedding restrictions and the retention settings. `allowedDomains` and `supportedLanguages` come back as arrays, or as null when nothing is configured. Internal voice engine identifiers are never included. A reseller key may read any chatbot belonging to that reseller; an ordinary key only its own.NoYesYesNo
get_chatbot_analyticsGet chatbot statistics Returns the lifetime aggregate metrics of one chatbot: session counts, durations, cost, token consumption and quality scores. The figures are read live from the conversation records and count a chat session and a spoken widget conversation alike, so the fields are named after calls even though most entries are chat sessions; the two call-length extremes tracked for voice agents are absent. Cost is in USD, as the voice engine reports it. A chatbot with no recorded activity yet answers 200 with `stats` set to null. A chatbot that does not belong to the calling account answers 404, the same as one that does not exist; a path segment that is not a number answers 400.NoYesYesNo
get_chatbot_embed_codeGet the embed code of a chatbot The code that puts the chatbot on a website, as the dashboard offers it: `scriptCode` adds a floating chat button before `</body>`, `iframeCode` places the chat inside a container, `publicUrl` is a direct link to the chat. Only chatbots of your own account.NoYesYesNo
get_chatbot_settingsGet every chatbot setting Everything the chatbot editor in the dashboard shows, in the shape `PATCH /chatbots/{chatbotId}/settings` takes. Logos come as URLs here and are sent as base64 image data to change them. Only chatbots of your own account.NoYesYesNo
get_conversationGet a conversation Returns one conversation. The `type` query parameter selects which store the id is looked up in and must match the kind of record you are asking for, since voice calls and chat threads number themselves independently. A voice call is returned on its own. A chat conversation is returned together with its full transcript in `messages`, ordered oldest first and not paginated; for a long thread use the messages endpoint instead. An id that is not a number is rejected with 400, and one that is not found under the selected type answers 404.NoYesYesNo
get_daily_analyticsGet daily call metrics Returns one row of metrics per calendar day, oldest day first, ready to plot as a time series. The figures are read live from the conversation records, so a conversation is counted as soon as it has ended, and the voice calls, chat sessions and avatar sessions of the account each count as one call. Cost is in USD, as the voice engine reports it. Days with no activity are absent from the result rather than present as zeroes. The window is the last `days` days counted back from now, optionally narrowed to a single agent. The applied `days` value and `agentId` are echoed in the response, which matters because an out-of-range or non-numeric `days` is silently replaced by 30 rather than rejected.NoYesYesNo
get_dashboard_overviewDashboard overview What the start page shows: voice and chat plan with the current period, used and remaining minutes or messages, today's calls and chats, and calls and chats per day for the last `days` days (7, 30 or 90).NoYesYesNo
get_integrationRead one integration Returns a single integration including its stored `config`, with every secret value replaced by `********`. A value counts as secret when its field is declared with type `password` for the integration type, when its key contains `secret`, `password`, `passwd`, `token`, `apiKey`, `api_key`, `authorization`, `authValue`, `credential`, `bearer` or `cookie` or ends in `Key` (case-insensitive, at any depth), or when it is a URL that carries its secret inside it, such as the webhook URL of a Discord integration. A secret key covers everything below it. Booleans are never masked, and an empty value stays empty. That masking is one-way: this endpoint tells you which credential fields are populated, never what they contain, and there is no endpoint that reveals them. The masked config can be sent back unchanged with PATCH: a secret sent as `********` keeps its stored value. `config` comes back as a JSON string and has to be parsed. Internal connector and health bookkeeping is not returned, and neither are the connection keys only the server writes into `config`.NoYesYesNo
get_integration_permissionsRead the tool permissions of an integration Returns which tools the agents of the account may use through this integration: the stored choice in `preset`, every tool of the integration with `allowed`, and how many tools each preset would allow. The permissions limit agents only; the account owner keeps full access through the dashboard and the calendar endpoints. Only Genesys Cloud and the integration types connected through the dashboard sign-in have tool permissions; every other type answers 404, with the same status used for an integration that does not exist or belongs to someone else. `preset` is `legacy` while nothing was chosen: agents then keep the tools they had before permissions existed. A Genesys Cloud integration never reports `legacy`: without a stored choice it reports `read`, which allows only the tools that read. Handing a conversation over to a person is always allowed and is not listed in `tools`.NoYesYesNo
get_integration_setup_guideGet the setup steps of an integration type Returns the steps the setup wizard in the dashboard shows for one integration type, for example where to create the key in the other app, with the link to start there (`providerSetupUrl`) and the expected setup time. Use it after `list_integration_types`, which gives the `type` and the config fields, and before `create_integration`, to guide a person to their credentials. Read only and the same for every account. `null` when there is no guide for this type.NoYesYesNo
get_my_accountGet the current account profile Returns the account that the presented API key belongs to, which is the simplest way to confirm a key is valid and to discover the user id every other endpoint scopes to. `resellerId` is set when this account is a customer of a reseller, and `ownResellerId` is set when the account operates a reseller itself; both are null for a plain direct account. `avatarUrl` is always null: no avatar image is stored for API consumers, and the field exists only so the shape stays stable. `billingAddress` is the address on your invoices as `PUT /users/me/billing-address` saves it, null while none is saved. The profile is returned as a bare object, not wrapped in a `data` envelope.NoYesYesNo
get_my_limitsGet plan allowances and remaining credit Returns what the account still has available: its status, its prepaid wallet balance in EUR, the voice minutes and chat conversations left, and the subscribed plan with its monthly allowances. `plan` is null when the account is on no plan, in which case the remaining counters are whatever credit has been granted directly. Poll this before starting a batch of calls or a campaign to avoid running an account to zero mid-run. The answer is a bare object, not wrapped in a `data` envelope.NoYesYesNo
get_my_usageGet consumption for a date window Sums the metered consumption recorded for this account over a date window, broken down into voice minutes and chat sessions. With no query parameters the window runs from midnight on the first day of the current month in server local time up to the moment of the request, which makes the bare call a current-month total. Both bounds are inclusive. The two counters are returned as 0 when nothing was metered in the window rather than being omitted, and the echoed `period` tells you exactly which window was measured. This reports usage only; for what is left to spend, call GET /users/me/limits.NoYesYesNo
get_phone_numberGet a phone number Returns one phone number of the account. The response is the PhoneNumber object itself, not wrapped in a `data` envelope. Use it to read the current assignment, the lifecycle status and the regulatory verification state of a number. A number that does not belong to the calling account answers 404 rather than 403.NoYesYesNo
get_phone_number_verificationGet the verification requirement Returns what the regulator demands before this number can carry traffic. When the number needs no verification the response is `{ "kycRequired": false, "requirement": null }`. Otherwise `requirement` describes the accepted identity kinds, how many documents of which type are needed, which fields are mandatory and which forms must be signed. Read this first: it tells you exactly what to put in the submission body.NoYesYesNo
get_phone_number_verification_statusGet verification status Polls the current state of the regulatory verification for a number. Once a submission exists the state is read live from the registry and the stored value on the number record is updated to match, so this endpoint is what to poll after submitting. Before any submission it answers `not_submitted` for a number that needs verification, and the number's recorded state, normally `not_required`, for one that does not. When the registry rejected the submission, `rejectReasons` says why; it is null in every other case.NoYesYesNo
get_presence_allowanceCount screens against the plan limit Tells how many Presence screens you have (`devices`, every screen you created, paired or not) and how many your plans pay for (`deviceLimit`, `null` when there is no limit). Check it before `create_presence_device`, which fails with 403 once `devices` has reached `deviceLimit`. For plans, prices and avatar minutes use `get_presence_billing`. Read only.NoYesYesNo
get_presence_analyticsPresence usage figures Conversations, minutes, average length, abandoned and failed conversations and how many used a face, in total, per day and per screen, for the last `days` days (default 14).NoYesYesNo
get_presence_billingPresence plans, minutes and devices Everything the billing page shows about Presence: plans on offer, the running plan, avatar minutes and devices used against the limit.NoYesYesNo
get_subscriptionGet the active subscription Returns the account's current active subscription together with the plan it pays for. Only subscriptions in state `active` are considered; if several exist the most recently created one is returned. An account with no active subscription is not an empty response but a 404, so treat that status as "on no plan" rather than as an error worth retrying.NoYesYesNo
get_ticketRead a ticket and its thread Returns one ticket with its full public message thread, oldest message first. Internal notes written by staff for staff are filtered out and never appear here, so the thread you see is the correspondence you took part in. Each message carries the sender's display name and role. `System` is used where a message was generated by the platform rather than typed by a person; a person who has no name on record reports `null`, so render your own label for them rather than a placeholder. A ticket belonging to another account answers 404 rather than 403.NoYesYesNo
get_voice_minutes_availableCheck if chatbot voice can be used A yes or no for the voice button of your chatbots: `available` is true when your account has a voice plan with minutes left or without a minute limit. It only reads and never buys an automatic top up; it returns false when the check fails. Use it before offering voice in a chatbot. For the figures use `list_usage_pools` (minutes per plan, `widgetMinutes` for the voice button) or `get_balance`.NoYesYesNo
get_webhookRead one webhook endpoint Returns a single registered endpoint, wrapped in a `data` object. The signing secret is not included and cannot be recovered here or anywhere else. Note `isActive` together with `failedDeliveries`: an endpoint is disabled automatically once 25 consecutive deliveries have failed, and a single successful delivery resets that counter to zero.NoYesYesNo
list_addonsList purchasable add-on packages Returns the add-on packages the account may buy on top of its plan, for example extra voice minutes or extra chat conversations. Only packages that are both active and visible are listed, and, as with plans, a reseller customer sees that reseller's packages while a direct customer sees the platform's own. The order is the catalogue sort order chosen by whoever maintains the packages, not price or name. The response has a `data` array and no pagination block.NoYesYesNo
list_agent_integrationsList integrations assigned to an agent Returns every integration currently assigned to this voice agent, together with the tools the agent may call through it. The `enabledTools` field decides which of the integration actions the assistant may call: null means the recommended default set for that integration type, an empty array means the assistant may call nothing, and a list of tool names means exactly those tools and no others. Tool names are the `name` values from the integration tool catalogue. A list may only name tools the permissions of the integration allow (`permitted` in the catalogue, see GET /integrations/{id}/permissions); a tool outside them is refused with 422 and error code `tool_not_permitted`, while a malformed list or an unknown tool name stays a 400 `validation_error`. The response is a plain list with no paging, and it includes the health state of each integration so you can see whether a tool would actually work today. Only integrations of the account that owns the agent are listed, which for a reseller key is the customer account: an assignment that points at an integration of another account is left out.NoYesYesNo
list_agent_knowledgeList agent knowledge sources Returns every knowledge source attached to one voice agent, newest first. These are the documents the agent may draw on when answering, added either as a crawled web page or as literal text. The response is a plain list with no paging. Entries belong to the account that owns the agent, so a reseller key that reads a customer agent sees the same entries as the customer.NoYesYesNo
list_agent_knowledge_crawlsWebsite crawls of a voice agent Every website crawl of one voice agent with its progress: pages found, read and failed. A running crawl is checked live, so polling this shows movement. Start a crawl by adding knowledge with `type` `crawl`. Only voice agents of your own account.NoYesYesNo
list_agent_knowledge_syncAuto-sync of a voice agent's website knowledge For every page and website source of one voice agent: whether and how often it is read again, when it was last updated and whether it can be read again right now. Only voice agents of your own account.NoYesYesNo
list_agent_languagesList the languages an agent can speak or write Returns the languages you can assign to an agent, each with an English name, the name the language calls itself, and a region code for a flag image, so a language picker needs no table of its own. This is a different list from `GET /languages`, which returns the locales the dashboard interface is translated into. Populating an agent picker from the locale list is a common mistake and leaves a customer with three choices where the platform supports dozens. Set `type` to `chat` for a text agent, which has no speech synthesis and therefore the longer list. For `voice`, language support depends on the speech model, so pass the same `ttsModel` value you will create the agent with and the answer matches what that agent will accept; leaving it unset answers for the default model. The voice list is read from the live model catalogue, and `meta.source` reports `catalog` when it came from there or `defaults` when a built-in list was used instead. Set `type` to `all` to name any language code the platform may have stored, which is what a list of agents needs to print a language instead of a bare code.NoYesYesNo
list_agentsList voice agents Returns the voice agents visible to the key, one page at a time, with a real total from a separate count query. An ordinary account key sees only its own agents; a reseller key sees every agent belonging to that reseller and can narrow the result to one customer with `userId`. Each item is the list form of an agent: no prompt, no model settings and no privacy settings, so fetch the individual agent when you need those. Note that the `status` query parameter is read but never applied, so passing it does not filter anything at present.NoYesYesNo
list_ai_app_connectionsConnected AI apps AI apps connected to your account, with the rights they were given, who approved them (empty when it was you) and when they were last used.NoYesYesNo
list_announcementsList announcements Announcements from EchoCall shown in the dashboard, for example planned maintenance, newest first.NoYesYesNo
list_api_keysList API keys Your API keys as the developer page lists them: name, the last four characters, scopes, IP and domain allow lists, use and state. Never the key itself.NoYesYesNo
list_api_logsRequest log of your keys Requests made with your API keys, newest first. Filter by status class, method, a search text in the path, a key and a time range.NoYesYesNo
list_assignable_agentsAgents a number can be assigned to The voice agents of your account that a phone number can answer with, as the assign menu on the billing page lists them. Pass `id` as `agentId` when you update a number.NoYesYesNo
list_available_voicesList selectable library voices Returns the voices from the shared library that an agent can be pointed at, each with descriptive labels and the address of a spoken sample. Without `language` the whole library is returned, which is what a portal serving several countries needs; pass a language code to narrow it to the voices offered for that language, plus the account's own cloned and generated voices, which are returned whatever the filter says. Identifiers here are the library ids used when setting a voice on an agent, which differ in form from the `voice_<number>` ids of GET /voices. The response is not paginated, and access is governed by the `read:agents` scope rather than a voice-specific one. If the platform has no voice engine credential configured the call answers 500 with the code `config_error`.NoYesYesNo
list_bookingsList the bookings in your connected calendars Returns the bookings of every active integration that has a calendar (Cal.com, Calendly, Google Calendar, Outlook), sorted by start, or of one integration when you pass `integrationId`. Each booking carries the `id` that the confirm, decline and cancel paths take. Bookings are read live from the calendar provider on every request, so poll at a calm pace (once a minute is plenty) rather than in a tight loop. Each calendar is read across every page its provider hands out, up to a fixed limit, and over a fixed window: Cal.com and Calendly from 3 months back, Google Calendar and Outlook from now, each up to 12 months ahead. `from` and `to` only narrow that window, so a range outside it comes back empty without the calendar being listed in `failed`. A calendar that could not be read in full this time is listed in `failed`. When it could not be read at all, none of its bookings are in `data`. When it was read only in part (a later page failed, or it holds more bookings than the limit), the bookings that were read are in `data` and the rest are missing.NoYesYesNo
list_call_campaign_recipientsList a campaign's recipients and call results Returns the numbers in a campaign together with the outcome of each call: status, duration, cost and the identifier of the conversation it produced, where there is one. Rows come back in storage order, which is the order they were supplied in, and the campaign's own state is repeated in `campaignStatus` so a poller does not need a second request. Paging defaults to 50 per page here rather than 20, and `perPage` is clamped to 100. The `pagination` block carries `total`, a count of the recipients stored for this campaign. This operation uses the `read:agents` scope rather than a scope of its own.NoYesYesNo
list_call_campaignsList batch calling campaigns Returns the account's outbound campaigns, newest first. Query parameters are validated strictly: an unrecognised `status`, or a `perPage` above 100, is rejected with 400 rather than quietly clamped, which is different from the paging behaviour elsewhere in this API. The `pagination` block echoes the applied page and page size and carries `total`, a real count of the campaigns matching the same `status` filter as the page. Reading campaigns uses the `read:agents` scope rather than a scope of its own.NoYesYesNo
list_chatbot_disclosure_snippetsAI disclosure sentences Ready-made sentences that tell visitors they are talking to an AI, keyed by language code. The dashboard offers them to insert into a chatbot greeting; using one is optional and the text can be changed freely.NoYesYesNo
list_chatbot_integrationsList integrations assigned to a chatbot Returns every integration currently assigned to this chatbot, together with the tools it may call through them. The `enabledTools` field decides which of the integration actions the assistant may call: null means the recommended default set for that integration type, an empty array means the assistant may call nothing, and a list of tool names means exactly those tools and no others. Tool names are the `name` values from the integration tool catalogue. A list may only name tools the permissions of the integration allow (`permitted` in the catalogue, see GET /integrations/{id}/permissions); a tool outside them is refused with 422 and error code `tool_not_permitted`, while a malformed list or an unknown tool name stays a 400 `validation_error`. The response is a plain list with no paging, and it includes the health state of each integration so you can see whether a tool would actually work today. Only integrations of the account that owns the chatbot are listed, which for a reseller key is the customer account: an assignment that points at an integration of another account is left out.NoYesYesNo
list_chatbot_knowledgeList chatbot knowledge sources Returns every knowledge source attached to one chatbot. Only the first 100 characters of each entry are returned, as `contentSnippet`; the full stored text is never sent by this endpoint. The response is a plain list with no paging. Entries belong to the account that owns the chatbot, so a reseller key that reads a customer chatbot sees the same entries as the customer.NoYesYesNo
list_chatbot_knowledge_crawlsWebsite crawls of a chatbot Every website crawl of one chatbot with its progress: pages found, read and failed. A running crawl is checked live, so polling this shows movement. Start a crawl by adding knowledge with `type` `crawl`. Only chatbots of your own account.NoYesYesNo
list_chatbot_knowledge_syncAuto-sync of a chatbot's website knowledge For every page and website source of one chatbot: whether and how often it is read again, when it was last updated and whether it can be read again right now. Only chatbots of your own account.NoYesYesNo
list_chatbotsList chatbots Returns the chatbots visible to the key, newest first. An ordinary account key sees only its own chatbots; a reseller key sees every chatbot belonging to that reseller and can narrow the result to one customer with `userId`. Paging defaults to 100 items per page, which is also the maximum. `pagination.total` is a real count of every chatbot matching the request, produced by a separate count query, so a page count can be worked out from it.NoYesYesNo
list_conversation_messagesList conversation messages Returns a page of the transcript of a chat conversation, oldest message first, so paging forward follows the conversation in order. This endpoint serves chat threads only: an id that belongs to a voice call is rejected with 400 rather than a misleading 404, and the transcript of a call is carried on the call record itself. Unlike the conversation list, the pagination object here carries a real `total`, counted over the whole transcript.NoYesYesNo
list_conversationsList conversations Returns a page of conversations, newest first. One `type` is listed at a time: `voice` returns call records and `chat` returns widget and WhatsApp threads. Every item carries a `type` field so a client can tell the two shapes apart without remembering which query it sent. The pagination object reports `page`, `perPage`, the `type` that was listed and `total`, a real count of the conversations of that type on the account.NoYesYesNo
list_credit_historyList minute and conversation bookings Lists the bookings on your voice minutes, chat conversations and avatar minutes, newest first: grants, purchases, add-ons, usage, refunds and adjustments (`transactionType`), each with the amount and the balance after it. Use it to explain where credits went. For what is left now use `list_usage_pools`; for the euro balance and its movements use `get_balance` and `list_transactions`. Read only.NoYesYesNo
list_genesys_data_tablesList the data tables of a Genesys connection Lists the data tables of the Genesys organization behind one of your Genesys connections, with `id` and `name`: the tables an agent can read, as the Genesys setup in the dashboard lists them. Use it to find a data table and its id; for queues use `list_genesys_queues`. Read only; each call asks Genesys live. `id` is a Genesys connection from `list_integrations`, 404 for any other connection. When Genesys cannot be asked, `ok` is false, the list is empty and `reason` says why: no sign in saved, sign in refused, permission missing or Genesys unreachable. `truncated` is true when there were more tables than one answer holds.NoYesYesNo
list_genesys_queuesList the queues of a Genesys connection Lists the queues of the Genesys organization behind one of your Genesys connections, with `id` and `name`: the queues a call or chat can be handed to, as the Genesys setup in the dashboard lists them. Use it to find a queue and its id; for data tables use `list_genesys_data_tables`. Read only; each call asks Genesys live. `id` is a Genesys connection from `list_integrations`, 404 for any other connection. When Genesys cannot be asked, `ok` is false, the list is empty and `reason` says why: no sign in saved, sign in refused, permission missing or Genesys unreachable. `truncated` is true when there were more queues than one answer holds.NoYesYesNo
list_instant_phone_numbersPhone numbers ready to buy at once Numbers that are set up already and can be bought at once, as the instant buy on the billing page lists them. `monthlyPrice` is your net price per month; VAT is added at purchase.NoYesYesNo
list_integration_event_typesList the event types of a calendar integration Returns the kinds of appointment that can be booked through this integration, read live from the calendar provider: their name, their duration in minutes and their identifier. An empty list means the calendar has no event types; a provider that cannot be reached or refuses is answered with 502 `provider_error`, not with an empty list.NoYesYesNo
list_integration_healthHealth of every connection For each connected integration: whether its last check worked, when it was checked, the last error and how many errors came in a row.NoYesYesNo
list_integration_toolsList the tools an integration offers Returns the actions an agent can be allowed to perform through this integration, plus the recommended default selection in `recommended`. Only a few integration types are catalogue-backed; the rest have a fixed tool set that cannot be picked from and answer 404 here, with the same status used for an integration that does not exist or belongs to someone else. Note each tool's `access` level before enabling it: `write` and `delete` tools let the agent change or remove data in the connected service. `permitted` says whether the permissions of the integration (GET /integrations/{id}/permissions) allow agents to use the tool; a tool that is not permitted cannot be put into `enabledTools` of an agent or chatbot.NoYesYesNo
list_integration_typesList the integration types you can connect Returns the catalogue of supported third-party services, each with the configuration fields it needs. Read this before creating an integration: `type` gives you the value to send, and `configFields` tells you exactly which keys belong inside the `config` JSON string and which of them are required. Fields declared with type `password` are masked when the integration is read back, and so is every other key that looks like a secret (see GET /integrations/{id}). The response is a bare JSON array and is the same for every account.NoYesYesNo
list_integrationsList your integrations Returns the account's connected integrations, newest first, as a bare JSON array with no paging. Stored configuration is deliberately left out of the list view: read a single integration to see which of its fields are set. A reseller key may pass `userId` to list one of its own customers' integrations instead; asking for a user who is not a customer of that reseller is refused with 403. On a key that is not a reseller key, `userId` is accepted but has no effect and the caller's own integrations are returned.NoYesYesNo
list_invoicesList your invoices Returns the invoices raised against the account, newest first. Without paging the body is a bare JSON array rather than a `{ data: [...] }` envelope, and the whole history comes back on each call; send `page` or `perPage` and the response becomes `{ data, pagination }` with a real `total`. There is no date filter either way. The list holds both kinds of invoice the account can have: ours, for what it paid us, and those of its reseller, for what it paid a reseller that bills its customers itself. Each row says which in `source`. The two kinds are numbered independently, so pass `source` on to GET /billing/invoices/{id}/pdf. An invoice from a reseller appears once the reseller has issued it; its `pdfUrl` is always null and the document is rendered on demand through that endpoint.NoYesYesNo
list_languagesList available interface locales Returns the user interface locales the platform ships, for populating a language picker or for validating a value before writing it to a profile or an agent. The list is read from the locale directories on disk, so it reflects the running build rather than a database table; reseller-specific locale folders are excluded. If that directory cannot be read the handler falls back to `en` and `de` instead of failing. Note two things about the shape: the response is a bare JSON array, not the usual `{ data: [...] }` envelope, and each entry carries only a `code`, with no display name. The route requires a valid API key but checks no scope.NoYesYesNo
list_live_chat_agentsList live chat staff The people who answer chats taken over from your chatbots, with role, online status and chat limit.NoYesYesNo
list_notificationsList account notifications Returns the notification inbox of the account behind the API key, newest first by creation time. Notifications are raised by the platform for events such as ticket replies or billing changes, and each entry may point at the resource that caused it through `relatedType` and `relatedId`. Pass `unreadOnly=true` to see only unread entries: the handler compares the raw query string against the literal text `true`, so any other value, including `1` or `TRUE`, is treated as not set. The `pagination` object carries `page`, `perPage` and `total`, the last being a real count of the notifications matching the same `unreadOnly` filter as the page.NoYesYesNo
list_payment_methodsList payment methods Cards and other payment methods stored for your account, as the billing page shows them. A new card is added in the dashboard.NoYesYesNo
list_phone_number_countriesList purchasable countries Returns every country whose numbers can currently be bought through the number marketplace. Use the `iso` field of an entry as the `countryIso` argument of the number search and of a purchase. The list is read live from the marketplace and is not paginated. When the marketplace is not enabled for this deployment the endpoint answers 503 instead of an empty list.NoYesYesNo
list_phone_numbersList phone numbers Returns the phone numbers the account rents, newest purchase first. Wholesale costs, carrier identifiers and SIP credentials are never included, only the columns of the PhoneNumber schema. A reseller key sees every number belonging to its own customers and can narrow the result to one customer with `userId`; a direct account key ignores `userId` and always sees only its own numbers. `pagination.total` is a real count of every number matching the request, not the length of the page, so a page count can be computed from it.NoYesYesNo
list_plansList the plans you can subscribe to Returns the billing plans on offer to the authenticated account. The list is picked for you: an account that belongs to a reseller sees only that reseller's plans, and a direct account sees only the platform's own plans. There is no way to ask for the other set, and attempting to check out a plan from the wrong set is refused with 403. The response is a bare JSON array, not a `{ data: [...] }` envelope, and it is not paged.NoYesYesNo
list_presence_avatarsList the faces for your screens Lists the faces a Presence screen can show: your own faces with `id` and review `status`, and the names of the ready made faces. To put one of your own faces on a screen, send its `id` as `avatarProfileId` to `update_presence_device`; `null` there means voice only. `available` is false when faces are switched off; screens then talk by voice only and the ready made list is empty. A new own face is requested in the dashboard or with `POST /presence/avatars`. Read only.NoYesYesNo
list_presence_devicesList counter screens Lists every Presence counter screen of your account with its full state: pairing, whether it is online, its last self test, opening hours and limits, minutes used today and a running conversation. Use it to get a screen `id` for `update_presence_device`, `send_presence_command` and the other screen tools, or to check its settings. For only the conversations running now use `list_presence_live`, for usage over several days `get_presence_analytics`, for how many screens your plan pays for `get_presence_allowance`. Read only.NoYesYesNo
list_presence_liveConversations running now Every screen that is in a conversation right now, with how long it has been running.NoYesYesNo
list_subscriptionsList all subscriptions Every subscription of your account with its plan, term dates and a scheduled plan change, as the billing page lists them.NoYesYesNo
list_team_invitesList open invitations Invitations that were sent and not yet accepted, with the rights they give.NoYesYesNo
list_team_membersList team members Lists the people who accepted an invitation to your account, with what each may view and edit, as the team page shows them. Open invitations are not part of it: use `list_team_invites` for those, and `list_live_chat_agents` for the live chat staff. The membership `id` is what `remove_team_member` takes. Read only, no paging. Only the account owner can call this; a team member gets 403.NoYesYesNo
list_ticketsList support tickets Returns the account's support tickets, newest first, with no paging. By default only open work is listed: tickets in state `closed` or `resolved` are left out unless you ask for them. Pass `includeArchived=true` to get exactly the closed and resolved ones instead, or `status` to filter to a single state. `includeArchived` takes precedence over `status` when both are sent. Neither parameter is validated against a fixed list, so a misspelled `status` is not an error, it simply matches no tickets and returns an empty array.NoYesYesNo
list_transactionsList wallet transactions Returns movements on the prepaid wallet, newest first: top-ups, charges and manual adjustments, each with the balance that resulted. The `pagination` block echoes the `page` and `perPage` that were used and carries `total`, a real count of the movements on the wallet, so the number of pages can be worked out before fetching them.NoYesYesNo
list_usage_poolsMinutes and conversations left For each running voice or chat subscription: what the plan includes, extra credits, what is used and what remains this period. `widgetMinutes` is the share used by the voice button of chatbots.NoYesYesNo
list_voice_modelsList voice models The voice models an agent can speak with, as the model picker in the dashboard shows them. Pass `id` as `ttsModel` when you create or update an agent.NoYesYesNo
list_voicesList the account voices Returns the voices stored on this account, including cloned and generated ones, with the status that tells you whether a voice is ready to be assigned to an agent. The identifier is the platform form `voice_<number>`, which is what agent endpoints on this account expect. The response is not paginated and takes no query parameters: the full set is returned in one call, in insertion order. Access is governed by the `read:agents` scope rather than a voice-specific scope, because voices are only useful in the context of an agent.NoYesYesNo
list_webhook_eventsList the events you can subscribe to Returns the catalogue of outbound events with a one-line explanation of when each is emitted. These names, plus the wildcard returned in `wildcard`, are the only values accepted in the `events` list when creating or updating an endpoint. `webhook.test` appears in the catalogue but is never produced by platform activity: it is only sent when you ask for a test delivery.NoYesYesNo
list_webhooksList your webhook endpoints Returns every outbound webhook endpoint registered by the account, newest first and unpaged. The signing secret is not part of this response and cannot be read back at any point: it is shown once, when the endpoint is created. Use `failedDeliveries`, `lastDeliveryAt` and `lastDeliveryStatus` to spot an endpoint that has started rejecting deliveries before it is switched off automatically.NoYesYesNo
mark_all_notifications_readMark every notification as read Marks every unread notification of this account as read in one statement and stamps each with the current server time. Entries that are already read are left untouched, so their original `readAt` is preserved. The call succeeds even when there is nothing unread, and it does not report how many rows it touched. This endpoint takes no request body.NoNoNoNo
mark_announcement_readMark an announcement as read The announcement is not shown again when you open the dashboard.NoNoNoNo
mark_notification_readMark one notification as read Marks a single notification as read and stamps its `readAt` with the current server time. Ownership is verified first: a notification belonging to another account answers 404 exactly as an unknown id does, so the endpoint never reveals that a foreign id exists. Calling it again on an already read notification succeeds and refreshes `readAt`. This endpoint takes no request body. It answers with a short confirmation message rather than the updated notification.NoNoNoNo
place_orderCOSTS MONEY: Buy a plan, plan change, renewal or add-on Charges the order from your balance (`payment.method` `balance`) or a stored card (`stripe`, optionally with `paymentMethodId`), then books it, as the plan and add-on dialogs do. Check the price with `GET /billing/orders/preview` first. If the bank asks for confirmation the status is `requires_action` and nothing is charged; pay from the balance or book in the dashboard then.NoNoNoNo
preview_orderPrice an order before buying What booking a plan, changing or renewing a subscription or buying add-ons would cost, with VAT, term and whether it is refused (`refusal`). Nothing is charged. Buy with `POST /billing/orders`.NoYesYesNo
purchase_phone_numberCOSTS MONEY: Purchase a phone number Buys one of the numbers returned by the search and attaches it to the account. Buying numbers needs an active Voice subscription (Voice, Bundle or a voice capable plan) and is not possible during the free trial; otherwise the request is rejected with 403 and one of the codes `voice_subscription_required`, `voice_subscription_inactive` or `trial_not_allowed`, before anything is charged. This charges money: the setup price plus the first month, plus VAT, is deducted from the account wallet, a balance transaction is written and an invoice is issued. An account managed by a provider (a partner of EchoCall) pays the provider's price as the search shows it and gets the invoice from that provider; when the provider cannot take the order right now the request is rejected with 400 `provider_unavailable`, nothing is bought and the provider is informed. Pass the listing from the search result back unchanged.NoNoNoNo
refresh_agent_knowledgeRefresh an agent knowledge source Re-reads a URL knowledge source from its source page immediately and replaces the stored content with what the page says now. Website sources are also re-read on a schedule, so this is for the case where a page changed and the agent should know about it at once. Only entries of type `url` can be refreshed; text and file entries are rejected with 400. The entry must belong to this agent and to the account behind the key, otherwise the request is rejected with 404. This endpoint takes no request body.NoNoNoNo
refresh_chatbot_knowledgeRefresh a chatbot knowledge source Re-reads a URL knowledge source from its source page immediately and replaces the stored content with what the page says now. Website sources are also re-read on a schedule, so this is for the case where a page changed and the chatbot should know about it at once. Only entries of type `url` can be refreshed; text and file entries are rejected with 400. The entry must belong to this chatbot and to the account behind the key, otherwise the request is rejected with 404. This endpoint takes no request body.NoNoNoNo
remove_agent_integrationIRREVERSIBLE: Remove an integration from an agent Unassigns an integration from a voice agent, so the agent can no longer call any of its tools. The integration itself is untouched and stays available to assign elsewhere. The reduced tool set is pushed to the voice engine after the row is removed; if that push fails the request returns 502 and the integration is already unassigned locally but may still be callable until a later change syncs. This endpoint takes no request body.YesNoYesNo
remove_chatbot_integrationIRREVERSIBLE: Remove an integration from a chatbot Unassigns an integration from a chatbot, so the chatbot can no longer call any of its tools. The integration itself is untouched and stays available to assign elsewhere. The reduced tool set is pushed to the voice engine after the row is removed; if that push fails the request returns 502 and the integration is already unassigned locally but may still be callable until a later change syncs. This endpoint takes no request body.YesNoYesNo
remove_payment_methodIRREVERSIBLE: Remove a payment method Removes a stored card or other payment method from your account. This cannot be undone: to use it again, add the card again in the dashboard. Refused with 400 for your default method and for your only method; make another one the default with `set_default_payment_method` first. `paymentMethodId` is an `id` from `list_payment_methods`.YesNoYesNo
remove_team_memberIRREVERSIBLE: Remove a team member Takes away the member's access to your account at once and ends their API keys and connected apps.YesNoYesNo
renew_phone_numberCOSTS MONEY: Renew an expired phone number Pays the open monthly fee of an expired number from your balance and makes it reachable again, like the renew button on the billing page. Only numbers of your own account with status `expired`.NoNoNoNo
renew_subscriptionCOSTS MONEY: Renew an ended subscription Books an expired or ended subscription again, paid like the renew button on the billing page.NoNoNoNo
reply_to_ticketReply to a ticket Adds a public reply to an existing ticket and bumps its last-changed timestamp, which is what moves the ticket back up the support queue. A ticket in state `closed` cannot be replied to and returns 400; a resolved ticket still accepts replies, so use this to reopen a conversation that was closed too early. Attachments are referenced by URL, they are not uploaded here: host the file somewhere the support team can reach and pass the link. The reply emits the `ticket.updated` outbound webhook event.NoNoNoNo
resend_team_inviteSend an invitation again Sends the email of an open invitation again and renews its 7 days.NoNoNoNo
resume_subscriptionTake back a cancellation A cancelled subscription whose term has not ended runs on as before.NoNoNoNo
revoke_api_keyIRREVERSIBLE: Revoke an API key Revokes one of your API keys: it stops working at once but stays in `list_api_keys`, marked as revoked. Use `delete_api_key` instead to remove it from the list for good. A revoked key cannot be turned on again; a new key is made in the developer portal. Only keys made in the developer portal or with `POST /developer/api-keys` are revoked here; the access of a connected AI app ends with `disconnect_ai_app`. `id` comes from `list_api_keys`. 404 when no such key of yours exists.YesNoNoNo
revoke_phone_numberIRREVERSIBLE: Withdraw from a phone number purchase Uses the withdrawal right for a purchased number: the number leaves your account at once and is taken off its agent. This cannot be undone. Only numbers of your own account.YesNoNoNo
revoke_team_inviteIRREVERSIBLE: Withdraw an invitation The link in the invitation email stops working.YesNoYesNo
search_phone_numbersSearch available numbers Searches the number marketplace for numbers that can be bought right now in one country. Nothing is reserved: a listing can disappear between the search and the purchase, so buy promptly and be ready to retry with a different result. Each entry carries the prices, the capabilities and the identifiers a purchase needs, and should be passed back to the purchase endpoint unchanged. The marketplace applies its own rate limit; when it is hit the endpoint answers 429 and the search can be repeated after a short pause.NoYesYesNo
send_conversation_messageReply in a conversation Sends a message into a chat conversation as a human agent, delivering it to the visitor over the same channel the thread runs on. An API key is not itself an agent session, so the message is attributed to the agent already assigned to the thread, or to the account's first live chat agent when it is unassigned. An account with no live chat agent at all cannot send and is rejected with 409. Chat threads only: a voice call id is rejected with 400. A thread whose state does not allow a reply, a closed one for example, is rejected with 412.NoNoNoNo
send_presence_commandReload or put a screen to sleep The tablet picks the command up within about half a minute. Fails with 409 when the screen is not paired.NoNoNoNo
set_auto_topupCOSTS MONEY: Turn automatic top-ups on or off When minutes or conversations run out, the amount set here is bought again and charged automatically. Not during a trial.NoNoYesNo
set_billing_addressSet the billing address Sets the company name, address and VAT id printed on your invoices, the same form as in the billing settings. It replaces the whole address: send every field each time, because `companyName` and `vatId` are cleared when left out; the saved address is `billingAddress` in `get_my_account`. `country` is a country name or ISO code; an unknown country is refused with 400. Only the account owner can call this; a team member gets 403. To change the account name use `update_profile`.NoNoYesNo
set_default_payment_methodMake a payment method the default Makes one of your stored payment methods the default, so future card payments of your account use it. Use it before `remove_payment_method` when the current default should go, because the default cannot be removed. `paymentMethodId` is an `id` from `list_payment_methods`, which also shows the current default in `defaultPaymentMethodId`. A new card can only be added in the dashboard. 400 when the account has no stored card details yet.NoNoNoNo
set_integration_permissionsSet the tool permissions of an integration Stores which tools the agents of the account may use through this integration, exactly as the dashboard does. Choose a preset (`read`, `read_write`, `full`) or `custom` with the exact tool keys from `tools[].key` of the GET of this path. Only the permissions change; the rest of the stored configuration stays as it is. Every agent and chatbot the integration is assigned to then gets its tool list rebuilt, so the change takes effect in their next conversation: `agentsResynced` counts the agents that were updated, `agentsFailed` the ones that could not be updated now (the saved permissions still apply to them). A tool selection of an agent (`enabledTools`) that names a tool outside the new permissions is not changed, but the tool stays unavailable to the agent. An unusable choice is refused with 422 and error code `validation_error`. Integration types without tool permissions answer 404.NoNoYesNo
set_live_chat_agent_statusSet live chat staff online or offline Online staff get new chats that a chatbot hands over.NoNoNoNo
start_call_campaignCOSTS MONEY: Submit a campaign and start calling Hands a draft campaign to the calling infrastructure and starts it. This is the point where calls are actually placed and charged, so treat it as the irreversible step: only a campaign in state `draft` can be submitted, and submitting one in any other state is refused with 409. A campaign whose recipient list turned out to be empty is refused with 400. If the campaign carries a scheduled time it moves to `scheduled` and dialling begins then, otherwise it moves to `pending` and begins immediately; the state may come straight back as `running` or `completed` if dispatch reports that far already. Outbound calling being unconfigured on the platform gives 503, and a dispatch that returned no batch identifier gives 502. This operation uses the `write:agents` scope rather than a scope of its own.NoNoNoNo
submit_phone_number_verificationSubmit verification Submits the identity, address and document proofs demanded for a regulated number. Upload the document files first and pass their identifiers in `proofs`; which document types are accepted and how many are needed comes from the requirement endpoint. The submission is forwarded to the registry and the number moves to the `pending` verification state, from where the status endpoint reports progress. A number that needs no verification is rejected with 400, and a number already approved or already awaiting review is rejected with 409, so a rejected submission must be corrected and sent again rather than duplicated.NoNoNoNo
test_integrationTest an integration Calls the connected service with the stored credentials and reports what came back. Use it after creating or reconfiguring an integration, since nothing is verified at write time. The shape of the result depends on the integration type: each connector builds its own diagnostic payload, so read it as free-form JSON rather than a fixed schema, and expect at least an indication of success and a message when it failed. Anything resembling a credential is stripped from the result before it is returned. A connection that fails is still reported inside a 200 response, not as an HTTP error. For Genesys Cloud the result has a fixed shape. Without generated access data the test fails and carries no `data`.NoNoNoNo
test_webhookSend a test delivery Sends one signed `webhook.test` payload to the endpoint and reports what happened, synchronously and with no retry. This is a real delivery: it is signed with the endpoint's secret, so it is the right way to check your signature verification. It updates `lastDeliveryAt` and `lastDeliveryStatus` and nothing else: a failed test never counts towards the automatic disabling that follows 25 consecutive real failures, and a successful one neither resets `failedDeliveries` nor re-enables an endpoint you disabled yourself. A transport failure is reported inside a 200 response with `delivered` false, not as an HTTP error.NoNoNoNo
unpair_presence_deviceIRREVERSIBLE: Unpair a counter screen Signs the tablet out. The screen keeps its settings and can be paired again with a new code.YesNoNoNo
update_agentUpdate a voice agent Changes one or more fields on a voice agent. Every field is optional and only the fields you send are written, so this is a partial update. The change is pushed to the voice engine first and then stored; if the engine rejects the push the request still succeeds and the new values are stored, so a caller that depends on live behaviour should verify the agent afterwards. The response carries the agent id and a confirmation message, not the updated agent.NoNoNoNo
update_agent_integration_toolsChange the tool selection for an assigned integration Replaces the tool selection for one integration already assigned to a voice agent. The `enabledTools` field decides which of the integration actions the assistant may call: null means the recommended default set for that integration type, an empty array means the assistant may call nothing, and a list of tool names means exactly those tools and no others. Tool names are the `name` values from the integration tool catalogue. A list may only name tools the permissions of the integration allow (`permitted` in the catalogue, see GET /integrations/{id}/permissions); a tool outside them is refused with 422 and error code `tool_not_permitted`, while a malformed list or an unknown tool name stays a 400 `validation_error`. The field is required: a body without an `enabledTools` key is rejected with 400, while an explicit null restores the recommended default set. The new selection is saved and then pushed to the voice engine; if the push fails the request returns 502 but the saved selection is kept, so a retry only has to repeat the push. An integration of another account answers 404 as if it were not assigned.NoNoNoNo
update_chatbotUpdate a chatbot Changes one or more fields on a chatbot. Every field is optional, but the body must contain at least one recognised field: an empty object is rejected with 400. `enableVoice` switches the widget microphone, `voiceId` changes the voice and an empty `voiceId` returns to the engine default; the chosen voice is kept while the microphone is off. The older `textOnlyMode` is still read as the inverse of `enableVoice`. The change is pushed to the voice engine first and then stored; if the engine rejects the push the request still succeeds and the new values are stored, so verify the chatbot afterwards when live behaviour matters. The response is a confirmation message only, not the updated chatbot.NoNoNoNo
update_chatbot_integration_toolsChange the tool selection for a chatbot integration Replaces the tool selection for one integration already assigned to a chatbot. The `enabledTools` field decides which of the integration actions the assistant may call: null means the recommended default set for that integration type, an empty array means the assistant may call nothing, and a list of tool names means exactly those tools and no others. Tool names are the `name` values from the integration tool catalogue. A list may only name tools the permissions of the integration allow (`permitted` in the catalogue, see GET /integrations/{id}/permissions); a tool outside them is refused with 422 and error code `tool_not_permitted`, while a malformed list or an unknown tool name stays a 400 `validation_error`. The field is required: a body without an `enabledTools` key is rejected with 400, while an explicit null restores the recommended default set. The new selection is saved and then pushed to the voice engine; if the push fails the request returns 502 but the saved selection is kept, so a retry only has to repeat the push. An integration of another account answers 404 as if it were not assigned.NoNoNoNo
update_chatbot_settingsUpdate every chatbot setting Saves what the chatbot editor in the dashboard saves: texts, branding, widget look, FAQ, quick replies, links, support hub, voice, model, privacy, integrations and status. Send only the fields to change. Knowledge sources are managed under `/chatbots/{chatbotId}/knowledge`. Only chatbots of your own account.NoNoNoNo
update_conversationUpdate a chat conversation Changes the status, the archive flag or the assigned human agent of a chat conversation. Chat threads only: an id belonging to a voice call is rejected with 400, and a body with no updatable field is rejected with 400 as well. Assigning an agent also stamps the assignment time and, unless the same request sets a status, moves the thread to `active`, mirroring what the dashboard does. Setting the status to `closed` runs the same finalisation as the close endpoint, recomputing the conversation analytics. The updated conversation is returned in `data`.NoNoNoNo
update_integrationUpdate an integration Changes the name, description, stored configuration or enabled flag of an integration. Only the fields you send are written. A `config` you send is merged with the stored one, one object level at a time. A field that is not secret takes the value you send, and one you leave out is removed, so send every non-secret field you want to keep. A secret field keeps its stored value when you leave it out or send it as `********`, an empty string or null clears it, and any other value replaces it. A value counts as secret when its field is declared with type `password` for the integration type, when its key contains `secret`, `password`, `passwd`, `token`, `apiKey`, `api_key`, `authorization`, `authValue`, `credential`, `bearer` or `cookie` or ends in `Key` (case-insensitive, at any depth), or when it is a URL that carries its secret inside it, such as the webhook URL of a Discord integration. A secret key covers everything below it. Booleans are never masked, and an empty value stays empty. Nested objects are merged by the same rules.NoNoNoNo
update_live_chat_agentChange a live chat staff member Changes name, picture or how many chats the person takes at once. Email and role are changed under `/team/live-chat-agents/{agentId}/access`.NoNoNoNo
update_phone_numberUpdate a phone number Changes which agent answers on a number and the label it carries in the dashboard. Only the fields present in the body are written, everything else is left alone; a body with no known field is rejected with 400. The response is an acknowledgement message only, it does not echo the updated record: read the number back with the GET endpoint if you need the new state. Assigning an agent here does not itself provision the number at the carrier, it only changes the routing recorded for it.NoNoNoNo
update_presence_deviceChange a counter screen Changes only the fields you send: name, place, voice agent, face, interface languages (comma separated, e.g. `de,en`), idle text, opening line, on or off, the conversation limits and the opening hours in a time zone.NoNoNoNo
update_profileChange your profile name Changes the name of your account, the `name` that `get_my_account` returns. It applies at once and can be changed back the same way. Only the name changes here: the email address can only be changed by support (ask with `create_ticket`), the invoice address is set with `set_billing_address`. Only the account owner can call this; a team member gets 403.NoNoNoNo
update_webhookUpdate a webhook endpoint Changes the destination URL, the subscription list or the enabled flag of an endpoint. Every field is optional and only the fields you send are touched. `events` is replaced wholesale, not merged, so send the complete list you want; each name is checked against the catalogue and an unknown one fails the whole request with 400. A new URL is resolved and refused if it points at a private or internal address. Setting `isActive` back to true is how you bring back an endpoint that was disabled automatically after repeated failures. The signing secret is not changed and cannot be rotated through this endpoint.NoNoNoNo
upload_live_chat_avatarUpload a picture for live chat staff Stores a picture and returns its URL. Set it with `PATCH /team/live-chat-agents/{agentId}` as `avatarUrl`.NoNoNoNo

Details

Registry status
Active
Published
Nov 14, 2026
Updated
Nov 14, 2026
Categories (suggested)
CommunicationSuggested categories are assigned automatically from the registry text and may be wrong. Verified operators can correct them.
GDPR
Not declared

Are you the operator? Claim this listing