Placetel MCP Server — 127 tools
contains code
The Placetel DADL turns Placetel's API into an MCP server that Claude, GPT or any MCP-compatible agent can consume directly. One YAML file declares all 127 tools — call, cti, routing, webex, number, sip, and more — and ToolMesh serves them at runtime. No Python boilerplate, no per-endpoint code, no separate MCP server process.
Below: the endpoint coverage matrix, a two-block ToolMesh setup, the full tool reference grouped by Placetel feature area, required credential scopes.
Source: Placetel REST API v2
Which Placetel endpoints are covered?
100% (127 of ~127 endpoints)
Focus: Placetel REST API v2: calls (call log, voicemails, click-to-dial, call detail records, recordings), CTI call control (answer, hold, transfer, conference, DTMF), routing (forwards, ring groups, IVR menus, queues, routing plans, time settings, number profiles), SIP users (extensions, short codes, hotdesking), contacts, numbers, SMS, fax, prompts, call center, users, phone provisioning, webhooks, Microsoft Teams, Webex.
Missing: Every endpoint of the published document is declared. Limits: array query filters take one value per call (call center queue_ids, recordings direction, CTI config params); the ai routing behavior is returned but cannot be written; webhook callbacks themselves are delivered outside the REST API; SIP passwords, hotdesk PINs and fax PINs are masked in responses. Read tools and the write tools for contacts, prompts, routings, routing plans, groups and number profiles verified against a live account on 2026-11-09; calls, SMS, fax, SIP users, users, short codes, CTI, call center, recordings, Teams, Webex and customers not yet tested live. The allowed short code values are not documented.
How do you configure the Placetel DADL?
- Sign in to the Placetel web portal at https://web.placetel.de.
- Open Integrations > Web API (https://web.placetel.de/integrations/web_api).
- Create a new API token there, or copy the existing one (an API v1 key also works for v2). Store it right away.
- Partner accounts only: the customer endpoints need a token with the read:customers scope.
- Put the key into the ToolMesh .env as CREDENTIAL_PLACETEL_API_KEY and add the backends.yaml entry below.
- Restart ToolMesh and call placetel_health (or get_me): it must return your account with id and name.
Environment variable: CREDENTIAL_PLACETEL_API_KEY
The key has full access to the account: it can place calls, send SMS and faxes, change routings, delete data and manage users. Restrict what agents may do with ToolMesh authorization on the access classes (read, write, admin, dangerous). Call center, Microsoft Teams, Webex, Placetel AI, SIM cards and the partner customer endpoints only answer when the product is booked; Microsoft Teams additionally has to be enabled for API access. The API is rate limited (token bucket; 429 with Retry-After).
How do you install the Placetel MCP server with ToolMesh?
Add to your backends.yaml:
- name: placetel
transport: rest
dadl: placetel.dadl
url: "https://api.placetel.de/v2"
Set the credential:
CREDENTIAL_PLACETEL_API_KEY=your-token-hereWhat 127 tools does the Placetel DADL expose?
GETget_meThe account behind the API key: {id, name, email, company, primary_sip_user_id, platform (product line, e.g. PROFI), rights_numbers (numbers this login may see), main_account_id, created_at, updated_at}. Cheapest call to check that the key works; used as the health check.
GETget_ai_statusStatus and usage of the account's Placetel AI integration: {status (e.g. active), minute_package, remaining_minutes, remaining_budget, total_cost (net AI cost of the last 7 days), currency, refreshed_at}. The budget figures are only present while the integration is active; otherwise only status is returned.
GETlist_callsCall log of INCOMING calls for ONE day (default today), newest first. For a period, call once per date. Each Call: {id, type (accepted | missed | voicemail | blocked), from_number (national format), to_number (the full Number object of the dialed number: id, number, e164, prefix, numonly, routing_id, site_id, ...), duration (seconds), file_url (audio of a voicemail, else null), contact (the matching contact or null), received_at, unread}. Number filters take the national format (02211234567); E.164 finds nothing. Omit unused filters: an empty or unknown filter value (e.g. filter[type]="" or "outgoing") silently returns an empty list. Outgoing calls are not in this log: use list_call_detail_records. Paged: plain array, increment page until a page has fewer than per_page items.
GETget_callOne call of the incoming call log by ID (same fields as list_calls).POSTinitiate_callClick-to-dial: Placetel rings the phone(s) registered for sipuid and, once answered there, connects to target. Returns the created Call. Not retried automatically (no idempotency key): after a timeout check before dialing again.
DELETEdelete_callDelete an entry of the incoming call log, e.g. a voicemail. Irreversible. Returns no body (204).GETlist_call_detail_recordsBilling records (itemized call records) of ONE day, including outgoing calls and forwards: {amount (charge in the account currency), description (connection type label), from, to, length (seconds), answer_uri (who answered, null if nobody), received_at}, oldest first. date is required; for a period call once per day. per_page goes up to 500 here. Paged: plain array.
GETlist_recordingsCall recordings, newest first; without booked call recording the API answers 404 "404 not found". Each: {id, direction (e.g. in), from, to, duration (seconds), time, file (URL of the audio file), created_at, updated_at}. Paged: plain array.
GETget_recordingOne call recording by ID, with the file URL of the audio.DELETEdelete_recordingDelete a call recording and its audio. Irreversible. Returns no body (204).GETlist_contactsPhone book contacts: {id, user_id, speeddial, first_name, last_name, email, email_work, company, address, address_work, phone, phone_work, mobile, mobile_work, fax, fax_work, facebook_url, linkedin_url, xing_url, twitter_account, blocked, color, tags, created_at, updated_at}. For caller lookup use search[number]: it normalizes, so 02211234567, +492211234567 and 2211234567 all find the contact (partial numbers do not). Valid German numbers are stored in E.164, so the exact filters filter[phone], filter[mobile] etc. need the +49 form. All filters are exact matches (no prefix search). Contacts with blocked=true form the account's blocklist. Paged: plain array.
GETget_contactOne contact by ID (same fields as list_contacts).POSTcreate_contactCreate a phone book contact. All fields are optional. Valid German numbers are stored in E.164 (+49...) whatever format is sent. Set blocked=true to block calls from the contact's numbers. Returns the Contact. Not retried automatically.
PUTupdate_contactUpdate a contact. Only the fields sent are changed; an empty string clears a field; tags replaces the whole tag list. Returns the Contact.
DELETEdelete_contactDelete a contact. Irreversible. Returns no body (204).POSTsend_smsSend a text message (SMS) to a mobile number; SMS are billed by Placetel. Returns no body on success (201). Not retried automatically, so a timeout never causes a duplicate SMS.
GETlist_faxesInbound and outbound faxes, newest first: {id, type (inbound | outbound), from_number, to_number, pages, retries, status (queued | working | success | failed | busy | conversion_error), status_info (outbound only, e.g. a T.38 error), email, header, duration, file (URL of the PDF), report (URL of the transmission report PDF), created_at}. Paged: plain array.
GETget_faxOne fax by ID, e.g. to poll the status of an outbound fax (queued -> working -> success or failed/busy/conversion_error).POSTsend_faxSend a PDF as fax. file must be a base64 data URI ("data:application/pdf;base64,..."); in ToolMesh pass "tm-blob://<id>#dataurl" after upload_file instead of inline base64. Returns the Fax (status queued); poll get_fax for the result. A status mail goes to email. Not retried automatically.
DELETEdelete_faxDelete a fax and its documents. Irreversible. Returns no body (204).GETlist_numbersPhone numbers of the account: {id, routing_id (routing object, see get_routing), site_id, prefix (area code), numonly, number (national format), e164, activated, test_number, name, description, carrier, created_at, updated_at}. Paged: plain array.
GETget_numberOne phone number by ID (same fields as list_numbers). Follow routing_id with get_routing to see how its calls are handled.POSTactivate_numberActivate a number of the account so it takes calls. Activation may be charged. Returns the Number. Not retried automatically.DELETEdeactivate_numberDeactivate a number: it stops taking calls. Returns no body (204).GETlist_number_profilesProfiles of a number: saved alternative configurations (e.g. office hours vs. holidays), exactly one active. Each {id, name, number_id, active}. Switch with activate_number_profile. Empty while a number has only its routing; once a profile was created, the number's own routing object shows up as active profile "Standard" (its id equals Number.routing_id).
POSTcreate_number_profileCreate a new, inactive profile for a number. On a number without profiles Placetel also turns the number's routing object into the active profile 'Standard' and sets that routing's name to 'Standard'; deleting the new profile later does not undo this. Returns the Profile {id, name, number_id, active}. Not retried automatically.PUTactivate_number_profileMake a profile the active one for a number, which changes how the number handles calls. Returns the Profile.DELETEdelete_number_profileDelete a profile of a number. Never delete the active profile 'Standard': its id is the number's routing object (Number.routing_id). Irreversible. Returns no body (204).GETlist_routingsRouting objects: {id, name, one behavior object (forward, group, plan, ivr, queue, api or ai), mailbox, notification, time_settings (only {enabled} while disabled), custom_caller_id ({enabled: 0 or 1, name, number}), music_on_hold, notify_external_api, priority, created_at, updated_at}. name may be null. Paged: plain array.
GETget_routingThe routing object of a phone number, or a routing object by ID (same fields as list_routings). Answers "where do calls to this number go?".
POSTcreate_routingCreate a routing object. Set exactly ONE behavior: forward, group, ivr, queue or api (plan only exists on update_routing). Optional extras: mailbox, notification, time_settings, custom_callerid, music_on_hold. Standalone routing objects serve as IVR menu items, routing plan entries or backup targets; to change what a number does, call update_routing with the number instead. Defaults when omitted: mailbox active, notification type all with receiver global, priority 99, time_settings disabled. Returns the RoutingObject. Not retried automatically.
PUTupdate_routingChange how a number (or routing object) handles calls. Set ONE behavior: forward, group, plan, ivr, queue or api. Example: forward a number to a mobile phone after 20 s on the office phone with forward={destinations: [{targets: ['[email protected]'], ringing_time: 20}, {targets: ['+491701234567'], ringing_time: 30}], behaviour: 'mailbox'}. Only the objects sent change; omitted name, forward, time_settings or mailbox stay as they are (verified). A ringing_time outside the listed values is rejected with 400. Returns the RoutingObject.
DELETEdelete_routingDelete a routing object (by ID or by the number it belongs to). Calls to an affected number lose their routing. Irreversible. Returns no body (204).GETlist_routing_plansRouting plans: ordered sets of routing objects, each with its own time settings; the first active one answers. Each {id, name, description, did (internal extension of the plan), routing_object_counts, rings_for (numbers that use the plan, national format), created_at, updated_at}. Paged: plain array.
GETget_routing_planOne routing plan by ID. Its routing objects come from list_routing_plan_objects.GETlist_routing_plan_objectsThe routing objects of a routing plan, in priority order (same fields as list_routings).GETsimulate_routing_planWhich routing object of a plan would answer a call at a given time (checks time settings and holidays). Returns that RoutingObject (same fields as list_routings), or an empty result when no routing object of the plan is active at that time. Read-only.POSTcreate_routing_planCreate a routing plan from existing routing objects. The routing objects then belong to the plan: delete_routing_plan deletes them too. did stays null when omitted. Returns the RoutingPlan. Not retried automatically.PUTupdate_routing_planUpdate a routing plan. Without routing_objects the plan keeps its objects (verified); when sent, send the complete list in the wanted order. Returns the RoutingPlan.DELETEdelete_routing_planDelete a routing plan AND the routing objects in it (verified: a routing object of the plan was gone afterwards). Check list_routing_plan_objects, SIP users (routing_plan_id) and routings with plan behavior first. Irreversible. Returns no body (204).GETlist_sip_usersSIP users (phone extensions): {id, sipuid, username, domain, name, description, did (internal extension), callerid (outbound caller ID), type (standard | blf | fax | trunk | legacy_standard), webuser_id and webuser (owning user), automatic_prefix, blocked_prefixes, routing_plan_id (fallback when busy or unanswered), online, registrations (active SIP registrations with user_agent, received address, expires, ...), busy_on_busy, contact_speeddialing, p_asserted_identity, hotdesk_login, hotdesk_type, cost_center, created_at, updated_at}. hotdesk_pin is masked ([REDACTED]); password only appears in get_sip_user and create_sip_user, masked as well. Paged: plain array.
GETget_sip_userOne SIP user by ID (same fields as list_sip_users; online shows the current registration state). The SIP password and hotdesk PIN are masked.POSTcreate_sip_userCreate a SIP user (phone extension). Returns the SipUser; the generated SIP password is masked here, read it in the web portal. Not retried automatically.
PUTupdate_sip_userUpdate a SIP user; send the fields to change (the type cannot be changed). Returns the SipUser with masked secrets.
DELETEdelete_sip_userDelete a SIP user; phones registered with it stop working. Irreversible. Returns no body (204).GETlist_sip_user_short_codesShort codes (star codes dialed on the phone) of a SIP user: {id, code, action, number, group_id, description, created_at, updated_at}.POSTcreate_sip_user_short_codeCreate a short code for a SIP user. action: set_out_anonymous, set_forward, clear_forward, login_group (needs group_id), mailbox, profile, set_out_number (needs number), addto_routing. code must be one of Placetel's predefined codes: a free code such as *987 is rejected with 400 "Validation failed: Code is not included in the list". The API reference does not list the allowed codes; the short code dialog of the web portal shows them. Returns the ShortCode. Not retried automatically.
DELETEdelete_sip_user_short_codeDelete a short code of a SIP user. Returns no body (204).GETlist_groupsGroups of SIP users: {id, name, description, type (ring_all | hunt | monitoring), members (SipUser objects, secrets masked), created_at, updated_at}. Paged: plain array.
GETget_groupOne group by ID with its members.POSTcreate_groupCreate a group of SIP users. Use it as a routing target (group behavior). Returns the Group. Not retried automatically.PUTupdate_groupUpdate a group (the type cannot be changed). member_ids replaces the whole member list; omit it to keep the members (both verified). Returns the Group.DELETEdelete_groupDelete a group. Check routings that ring it (group behavior) first. Irreversible. Returns no body (204).GETlist_promptsAnnouncements used by IVRs, queues, mailboxes and forwards: {id, name, description, text, file (signed URL of the audio, valid for about 5 minutes; fetch a fresh one with get_prompt), created_at, updated_at}. filter[name] is an exact match. Paged: plain array.GETget_promptOne prompt by ID. file is a freshly signed audio URL, valid for about 5 minutes: download right away.POSTcreate_promptCreate an announcement, either synthesized from text with a voice or from an uploaded audio file (base64 data URI; in ToolMesh tm-blob://<id>#dataurl). voice is required by the API in both cases but not returned. Synthesis runs asynchronously: the file URL in this response can answer 404 for a few seconds; call get_prompt shortly after for the final audio (synthesized text came back as WAV, 8 kHz mono, telephone quality). Returns the Prompt. Not retried automatically.
PUTupdate_promptUpdate a prompt (new text, voice or audio file). name and voice are required by the API. A new text is synthesized again, asynchronously, and gets a new file URL (see create_prompt). Returns the Prompt.DELETEdelete_promptDelete a prompt. Check IVRs, queues, forwards and mailboxes that play it first. Irreversible. Returns no body (204).GETlist_call_center_agentsCall center agents: {id, name, description, extension_type (SIP | PSTN), extension_sip, extension_pstn, agent_type (Agent | Supervisor), status (offline | online | dail_out | working | pause), priority, last_call_at, created_at, updated_at}. Needs the call center product; without it the API answers 404. Paged: plain array.
POSTcreate_call_center_agentCreate a call center agent that is reached either on a SIP extension or on an external (PSTN) number, chosen by extension_type. The API requires both extension fields. Returns the CallCenterAgent. Not retried automatically.
PUTupdate_call_center_agentUpdate an agent, e.g. set status to online, pause or offline. The API requires extension_sip and extension_pstn on every update: send the current values from list_call_center_agents. Returns the CallCenterAgent.
GETlist_call_center_queuesCall center queues: {id, name, description, num_loops, priority, ringing_time, max_iterations, mail_notification, play_prompt and prompt (greeting), play_prompt_waiting and prompt_waiting, play_prompt_end and prompt_end, play_mailbox and prompt_mailbox, created_at, updated_at}. Paged: plain array.
POSTcreate_call_center_queueCreate a call center queue; route a number to it with update_routing (queue behavior). Returns the CallCenterQueue. Not retried automatically.PUTupdate_call_center_queueUpdate a call center queue; send the fields to change. Returns the CallCenterQueue.GETlist_call_center_callsQueue calls of ONE day: {id, call_type (dail_in | dail_out), call_status (unassigned | assigned | ended | not_answered | cancelled | dail_out), answer_status, started_at, left_queue_at, ended_at, last_updated_at, iteration, from, to, queue_name, agent_name}. unassigned calls are waiting and can be picked with pick_call_center_call. Needs the call center product (404 otherwise). Paged: plain array.
POSTpick_call_center_callHand a waiting queue call to a given agent. Returns the CallCenterCall. Not retried automatically.POSTdial_cti_numberStart a new call from a provisioned desk phone. Not retried automatically. Returns no body (201).POSTanswer_cti_callAnswer a ringing call on a provisioned desk phone. Returns no body (201).POSTdecline_cti_callDecline a ringing call on a provisioned desk phone. Returns no body (201).POSThangup_cti_callEnd a call on a provisioned desk phone. Returns no body (201).POSThold_cti_callPut a call on hold on a provisioned desk phone. Returns no body (201).POSTresume_cti_callResume a held call on a provisioned desk phone. Returns no body (201).POSTtransfer_cti_callBlind transfer: hand a call on a provisioned desk phone to another number without consultation. Returns no body (201).POSTstart_cti_transferAttended transfer, step 1: start the transfer of a call on a provisioned desk phone; finish with complete_cti_transfer. The API reference does not say how the target is chosen, so for a known target prefer transfer_cti_call. Returns no body (201).POSTcomplete_cti_transferAttended transfer, last step: connect the parties of a transfer started with start_cti_transfer. Returns no body (201).POSTstart_cti_conferenceStart a conference from a call on a provisioned desk phone. Finish with complete_cti_conference. Returns no body (201).POSTcomplete_cti_conferenceJoin the parties of a conference started with start_cti_conference. Returns no body (201).POSTdial_cti_digitSend a single digit on a call of a provisioned desk phone. For tone sequences on the active call use send_cti_dtmf_digits. Returns no body (201).POSTsend_cti_dtmf_digitsSend DTMF tones on the currently active call of a provisioned desk phone, e.g. to navigate a remote voice menu. Returns no body (201).GETget_cti_configRead a configuration parameter of a provisioned desk phone. Parameter names depend on the phone model.PUTset_cti_configSet configuration parameters on a provisioned desk phone. Wrong values can make the phone unusable.GETlist_usersUsers (web portal logins) of the account: {id, login, email, first_name, last_name, type (main_account | subuser), did and callerid of the primary SIP user, primary_sip_user_id, locale, admin_user, rights_numbers, permissions {enabled, blocks}, obfuscate_billing_records, obfuscate_others, two_factor_authentication_enabled, numbers, created_at, updated_at}. Paged: plain array.
GETget_userOne user by ID (same fields as list_users).POSTcreate_userCreate a subuser, optionally with an extension and a phone. A subuser without email cannot log in to the web portal. Returns the User. Not retried automatically.
PUTupdate_userUpdate a subuser: name, e-mail, extension, caller ID, admin rights, visible numbers, privacy and portal permissions. permissions.blocks lists portal areas the user may NOT open: billing_record/index, invoice/index, addresses/edit, order, simple/numbers, /fax, /sip_users, simple/index, routing_plans/index, details/robjectlist, simple/groups, groups/edit, provisioning/index, prompts/index, contacts, /cc, :cc_reporting. Returns the User.
DELETEdelete_userDelete a subuser. Irreversible. Returns no body (204).POSTreset_user_passwordStart a password reset for a user (answers 202 without body; 400 when not possible). Not retried automatically.DELETEreset_user_two_factor_authenticationRemove a user's two-factor authentication so it must be set up again. Lowers account security until then. Answers 202 without body; 400 when not possible.GETlist_sitesSites (locations) of the account: {id, name, street, street_no, zip, city, country, prefix (area code)}. Numbers refer to them via site_id. Paged: plain array.GETget_siteOne site by ID.GETlist_devicesCatalog of phone models Placetel can provision: {id, name, display_name, manufacturer, lines, blf_keys, expansion_keys, max_expansion_modules, dect_lines, multicell, encryptable}. Use id as phone_model in create_provisioning. Paged: plain array.GETlist_provisioningsPhones provisioned through Placetel: {id, name, mac, webuser, device (model), lines [{sipuid, position}], keys [{type, label, value, position}], codec, call_waiting, locale, encryption, custom_configurations}. The mac is the address for the CTI tools. Paged: plain array.
GETget_provisioningOne provisioned phone by ID.POSTcreate_provisioningRegister a phone for auto-provisioning. lines lists sipuids in line order; keys sets function keys [{type: blf | line | none | dtmf | speeddial | manual | redirect | keyevent | url, value, label}]. Returns the Provisioning. Not retried automatically.
PUTupdate_provisioningUpdate a provisioned phone (name, owner, lines, keys, codec, ...). The phone fetches changes on its next configuration update or after reconfigure_provisioning. Returns the Provisioning.DELETEdelete_provisioningRemove a phone from provisioning. Irreversible. Returns no body (204).POSTreconfigure_provisioningTell the phone to fetch its configuration now (SIP command to the user on line 1). Returns the Provisioning.GETget_provisioning_custom_configurationsCustom configuration keys of a provisioned phone: {id, key, value, attributes}.PUTset_provisioning_custom_configurationCreate or update a raw configuration key of a provisioned phone (model-specific; wrong values can break the phone). Returns the Provisioning.DELETEdelete_provisioning_custom_configurationDelete a custom configuration key of a provisioned phone. Returns no body (204).GETlist_sim_cardsMobile SIM cards: {id, card_type, iccid (after activation), contract, number, status, sip_user (secrets masked), created_at, updated_at}. Paged: plain array.GETget_sim_cardOne SIM card by ID.GETlist_subscriptionsRegistered webhook subscriptions: {id (e.g. sub-...), url, incoming, outgoing, hungup, accepted, phone, numbers}.PUTcreate_subscriptionRegister a URL that receives call events: incoming and outgoing calls, accepted calls, hang-ups and CTI phone events, optionally only for some numbers. Per Placetel's Notify API documentation events arrive as form-encoded POSTs (event, call_id, from, to, direction). Call data leaves Placetel, so only register endpoints you control. Returns the Subscription. Not retried automatically.
DELETEdelete_subscriptionRemove a webhook subscription. Returns no body (204).GETget_teams_integrationThe account's Microsoft Teams integration: {tenant_id, sbc_voice_routes, sync_status, available_ms_teams_seats, created_at}. Answers 403 until the Teams integration is enabled for API access.GETlist_teams_usersMicrosoft Teams users imported to Placetel: {sip_user_id, ms_uuid, callerid, name, email, phone_system_enabled, resource_account (true = call queue account), account_enabled, sync_status, error_message}. Paged: plain array.POSTimport_teams_userLink a Microsoft Teams user to a Placetel SIP user (uses one booked Teams seat). The user needs a Microsoft 365 Phone System license. Returns the MsUser. Not retried automatically.PATCHsync_teams_userPush the calling configuration of an imported user to Microsoft again. Returns the MsUser.DELETEdisconnect_teams_userDisconnect an imported Teams user and sync that to Microsoft; the user loses Placetel calling in Teams. Returns no body (204).GETlist_webex_usersUsers of the account for Webex: {id, login, first_name, last_name, webex_person_id, webex_subscriber_id, webex_subscriber_status, package, created_at, updated_at}. Without Webex the API answers 403 'Not available for your product'. Paged: plain array.POSTcreate_webex_userCreate a user, optionally with a Webex license (package); licenses may be billed. Returns the WebexUser. Not retried automatically.DELETEdelete_webex_userDelete a user and its Webex person. Irreversible. Returns no body (204).GETget_webex_user_licenseThe Webex license of a user: {package, change_package_to, change_package_at (scheduled change), canceled_at}.POSTassign_webex_user_licenseAssign a Webex license to a user (may be billed). location_id, phone_number and extension only apply when the user has no license yet. Returns the License. Not retried automatically.PATCHupdate_webex_user_licenseChange the package of a user's Webex license; the change may be scheduled (see change_package_to and change_package_at in the result). Returns the License.GETlist_webex_user_numbersNumbers configured for a Webex user (Number objects). Paged: plain array.PATCHupdate_webex_user_numbersChange the numbers of a Webex user. Returns the resulting numbers {primary, external, extension}.GETlist_webex_workspacesWebex workspaces (rooms and shared devices): {id, display_name, supported_devices, capacity, type, calling}.GETget_webex_workspaceOne Webex workspace by ID.POSTcreate_webex_workspaceCreate a Webex workspace. Returns the Workspace. Not retried automatically.GETget_webex_fax_settingsFax settings of a Webex number: {routing_id, number, e164, faxheader, faxwhitelist, email, faxsettings, fax_attachment, webex_room_ids, license_id, license_package}. faxpin is masked.PUTset_webex_fax_settingsTurn a Webex number into a fax number or change its fax settings; provisions a fax license on the fly when none is free (may be billed). Returns the settings with faxpin masked.DELETEdelete_webex_fax_settingsTurn a fax number back into a regular number and free its fax license. Returns no body (204).GETlist_customersCustomers of a partner account, newest first: {id, customer_ref, login, first_name, last_name, company, country, product, status (test_phase | active | locked), created_at}. Only for partner accounts with a token that has the read:customers scope (403 otherwise). Paged: plain array.GETget_customerOne customer of the partner account by ID (needs the read:customers scope).POSTcreate_customerCreate a customer account under the partner account. product must be one the partner may sell (the partner's default product when omitted); the address country must be one the partner may create customers in. Needs a partner token with customer scopes. Returns the new account. Not retried automatically.
What composite workflows does the Placetel DADL provide? ⚠ contains code
FNsummarize_callsSummarize the incoming call log of one day: totals per type (accepted, missed, voicemail, blocked), unread count, calls per dialed number, and the list of missed calls and voicemails with caller, matched contact name and time. Pages through list_calls (100 per page, at most max_pages pages); truncated=true means the day had more calls than were read.