Every change Wellknown observed on this MCP server, newest first, with what it was before and what it became. Tool-surface changes carry the definition diff. Nothing here is edited after the fact.
Changed the definition of "acquire_number", "cancel_verification", "get_verification_requirements" and 6 more
⟨90 unchanged words⟩ Never request a new quote after a timeout.``provider`` is ``auto`` (the quoted carrier) or the quoted carrier's name.``idempotency_key`` is optional; to retry after a timeout ⟨50 unchanged words⟩
⟨27 unchanged words⟩ "Number Type","type":"string"},"provider":{"default":"auto","title":"Provider","type":"string"},"quote_id":{"title":"Quote Id","type ⟨10 unchanged words⟩
⟨61 unchanged words⟩ its monthly fee stops after the current month.TelnyxSomebillsregistrationsatbill at least 3monthly fees from approval, soa Telnyx registration cancelledcancelling soonerisstill chargedcanforstill charge 3 months. Ask the user first. A ``submitting`` ⟨29 unchanged words⟩
⟨51 unchanged words⟩ the result's ``subject_types`` lists what the carrier accepts.``provider````quote_id`` is theoptional.offer's ``quote_id`` from quote_numbers: pass it for ``purpose='number'`` so the form matches that offer. ``purpose`` is ``number`` (default, to buy a ⟨21 unchanged words⟩ carrier fee is debited from credit at filing. If the error says to pass ``number_id``, pass the ``id`` of one of the organization's US numbers from list_numbers. Returns ``required`` (false means no verification is ⟨59 unchanged words⟩
⟨3 unchanged words⟩ "Country Code","type":"string"},"number_typenumber_id":{"titleanyOf":[{"Number Type
⟨27 unchanged words⟩ ": [{"id", "e164", "provider", "country_code", "number_type", "capabilities", "provisioning_state ⟨10 unchanged words⟩
⟨35 unchanged words⟩ ``{"items": [{"id", "provider", "country_code", "number_type", "subject_type", "purpose ⟨49 unchanged words⟩
⟨246 unchanged words⟩ still identifies itself as an AI if asked. ``recording_enabled``: omit it to follow the agent, then the workspace recording setting. ``true`` records this call and ``false`` does not, whatever the workspace setting. Pass it only when the user asked for or against a recording. ``metadata`` is free-form JSON attached to the call ⟨199 unchanged words⟩
⟨42 unchanged words⟩ or ``toll_free``; omit it to compare all types.``provider`` is``auto`` (compare all carriers), ``twilio``, ``telnyx`` or ``didww``.``area_code`` is an area code or the first ⟨72 unchanged words⟩ "offers": [...], "recommended_quote_id", "unavailable_providers", "expires_at"}``.Each offer has ``e164``,``provider``,``number_type``, ``capabilities``, ``monthly_cents``, ``setup_cents``, ``readiness``, ``requirements`` ⟨36 unchanged words⟩ ask the user for the details, then submit_verification, both with the offer's ``quote_id``, and pollget_verification (review takes businessdays). ``requirements``lists what the carrier needs. Prefer an offer ⟨27 unchanged words⟩
⟨43 unchanged words⟩ , the platform default); Australia (+61)alwaysmayusesuse ``HAIL``when that carrier is Twilio;instead; every other destination, including the US and ⟨155 unchanged words⟩
⟨107 unchanged words⟩ at filing. Pass the same ``purpose`` to get_verification_requirements. For ``purpose='number'``, pass the same ``quote_id`` you passed to get_verification_requirements. For ``purpose='sms'``, pass the same ``number_id`` if you passed one. Steps: 1) call get_verification_requirements. 2) Ask ⟨193 unchanged words⟩
⟨38 unchanged words⟩ ":"Files","type":"array"},"number_typenumber_id":{"titleanyOf":[{"Number Typetype":"string"},{"type":"stringnull"}],"providerdefault
Authorization not required, issuer https://hail.so/api/auth
Changed the definition of "acquire_number", "cancel_verification", "confirm_verification" and 35 more
{"destructiveHint":true,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":false,"title":"Buy a phone number"}
{"destructiveHint":true,"idempotentHint":false,"openWorldHint":true,"readOnlyHint":false,"title":"Cancel a verification"}
Changed the definition of "send_sms"
⟨12 unchanged words⟩ is the message text. With no ``from_``:UKdestinations(+44)whereandtheGermanysender-ID carrier delivers a dynamic alphanumeric sender ID unchanged (+49)aboutdestinations110usecountries, see core/hailhq/core/sender_id_corridors.py) use your organization's sender ID
Changed the definition of "create_agent", "place_call" and "update_agent"
⟨85 unchanged words⟩ ":"Name","type":"string"},"recording_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"title":"Recording Enabled"},"sms_enabled":{"default":true,"title":"Sms ⟨48 unchanged words⟩
⟨119 unchanged words⟩ "Recipient Consent","type":"boolean"},"recording_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"title":"Recording Enabled"},"system_prompt":{"anyOf":[{"type":"string ⟨32 unchanged words⟩
Authorization not required, issuer https://hail.so/api/auth
Added "confirm_verification" and "list_number_regions"; changed the definition of "cancel_verification", "get_verification_requirements", "list_verifications" and 2 more (36 tools before, 38 now)
⟨26 unchanged words⟩ number type). The draft is discarded. Worksonlyin state ``awaiting_review`` or``rejected``.``rejected``, and for an ``approved`` US SMS registration (``purpose: "sms"``): its numbers leave the campaign, US-to-US texts from them fail again, and its monthly fee stops after the current month. Telnyx bills at least 3 monthly fees from approval, so a Telnyx registration cancelled sooner is still charged for 3 months. Ask the user first. A ``submitting`` or ``submitted`` verification is under review ⟨23 unchanged words⟩
Authorization not required, issuer https://hail.so/api/auth
Added "acquire_number", "cancel_verification", "delete_agent" and 10 more; changed the definition of "create_agent", "create_contact", "get_call" and 20 more (23 tools before, 36 now)
before
—after
Create an agentbefore
—after
{"destructiveHint":false,"idempotentHint":false,"openWorldHint":false,"readOnlyHint":false}before
—Authorization not required, issuer https://hail.so/api/auth
Authorization not required, issuer https://hail.so/api/auth
Authorization not required, issuer https://hail.so/api/auth
Changed the definition of "create_agent"
⟨97 unchanged words⟩ 1-200 chars says when to hand over).The``contact_id``contactis an id from ``list_contacts``: a contact's uuid, or ``member:<user id>`` for a team member. The person needs a phone number. The agent never sees ⟨13 unchanged words⟩
Changed the definition of "create_agent" and "list_agents"
⟨59 unchanged words⟩ a lowercase ISO 639-1 code. ``max_duration_seconds`` is 60..3600. ``handover_max_duration_seconds`` (60..3600, default 1800) is the call limit once a handover contact answers. ``handover_contacts``: People the agent may hand a live call to: ``[{contact_id, note}]`` (max 10; ``note`` 1-200 chars says when to hand over). The contact needs a phone number. The agent never sees it. Returns the API's ``AgentResponse`` as a dict, ⟨5 unchanged words⟩
⟨28 unchanged words⟩ ":null,"title":"First Message"},"handover_contacts":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"default":null,"title":"Handover Contacts"},"handover_max_duration_seconds":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"title":"Handover Max Duration Seconds"},"language":{"anyOf":[{"type":"string ⟨76 unchanged words⟩
Recently observed → Live
Live → Recently observed
Authorization not required, issuer https://hail.so/api/auth
Added "create_agent", "list_agents" and "route_number"; changed the definition of "place_call" (20 tools before, 23 now)
⟨32 unchanged words⟩ ..., "model": ...}``), orboth.both, or ``agent_id`` (a saved agent from ``list_agents`` supplies the prompt, first message, AI line, voice and tools; fields you pass here win). At least one is required. Passing both runs ⟨380 unchanged words⟩
{"properties":{"agent_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Agent Id"},"ai_disclosure":{"default":true,"title":"Ai ⟨142 unchanged words⟩
Authorization not required, issuer https://hail.so/api/auth
Authorization not required, issuer https://hail.so/api/auth
Authorization not required, issuer https://hail.so/api/auth
Authorization not required, issuer https://hail.so/api/auth
Authorization not required, issuer https://hail.so/api/auth
Changed the definition of "send_sms"
Send an outboundSMS from your organization's dedicated number.SMS. ``to`` must be E.164 (e.g. ``+14155551234``). ``body`` is the message text.SMSWithrequiresnoa``from_``:dedicatedUKphone(+44)numberandonGermany (+49) destinations use your organization's sender ID (or ``HAIL``, the
Authorization not required, issuer https://hail.so/api/auth
Certificate changed, valid to 2026-12-21
Authorization not required, issuer https://hail.so/api/auth
Authorization not required, issuer https://hail.so/api/auth
Authorization not required, issuer https://hail.so/api/auth
Authorization not required, issuer https://hail.so/api/auth
Authorization not required, issuer https://hail.so/api/auth
Authorization not required, issuer https://hail.so/api/auth
Certificate recorded, valid to 2026-10-23
Authorization not required, issuer https://hail.so/api/auth
First tool surface recorded: 20 tools (server version 1.29.1)
Showing the latest 35 events. The API returns up to 500 and filters by kind: ?kind=tool_surface_changed
⟨48 unchanged words⟩ ":null,"title":"Number Type"},"provider":{"default":"auto","title":"Provider","type":"string"},"region":{"anyOf":[{"type":"string ⟨12 unchanged words⟩
{"destructiveHint":false,"idempotentHint":false,"openWorldHint":true,"readOnlyHint":false,"title":"Confirm a verification with a code"}
{"destructiveHint":false,"idempotentHint":false,"openWorldHint":false,"readOnlyHint":false,"title":"Create an agent"}
{"destructiveHint":false,"idempotentHint":false,"openWorldHint":false,"readOnlyHint":false,"title":"Create a contact"}
{"destructiveHint":true,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false,"title":"Delete an agent"}
{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":true,"title":"Get an agent"}
{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":true,"title":"Get a call"}
{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":true,"title":"Get an email"}
{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":true,"title":"Get an email attachment"}
{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":true,"title":"Get email events"}
{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":true,"title":"Get raw email"}
{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":true,"title":"Get email stats"}
{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":true,"title":"Get events"}
{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":true,"title":"Get a number"}
{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":true,"title":"Get a text message"}
{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":true,"title":"Get a verification"}
{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":true,"title":"Get verification requirements"}
{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":true,"title":"List agents"}
{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":true,"title":"List calls"}
{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":true,"title":"List contacts"}
{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":true,"title":"List email domains"}
{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":true,"title":"List emails"}
{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":true,"title":"List number search regions"}
{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":true,"title":"List numbers"}
{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":true,"title":"List text messages"}
{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":true,"title":"List verifications"}
{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":true,"title":"Look up a contact"}
{"destructiveHint":false,"idempotentHint":false,"openWorldHint":true,"readOnlyHint":false,"title":"Place a phone call"}
{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":true,"title":"Quote phone numbers"}
{"destructiveHint":true,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":false,"title":"Release a number"}
{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false,"title":"Route a number to an agent"}
{"destructiveHint":false,"idempotentHint":false,"openWorldHint":true,"readOnlyHint":false,"title":"Send an email"}
{"destructiveHint":false,"idempotentHint":false,"openWorldHint":true,"readOnlyHint":false,"title":"Send a text message"}
{"properties":{"address":{"anyOf":[{"type":"object"},{"type":"null"}],"default":null,"title":"Address"},"attest_authorized ⟨10 unchanged words⟩ string"},"documents":{"title":"Documents","type":"object"},"fields":{"title":"Fields","type":"object"},"files":{"items":{"type":"object"},"title":"Files","type":"array"},"number_type":{"title":"Number Type ⟨38 unchanged words⟩
{"destructiveHint":true,"idempotentHint":false,"openWorldHint":true,"readOnlyHint":false,"title":"Submit a verification"}
{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false,"title":"Update an agent"}
{"destructiveHint":false,"idempotentHint":false,"openWorldHint":false,"readOnlyHint":false,"title":"Upload an email attachment"}
{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":true,"title":"Who am I"}
⟨112 unchanged words⟩ "default":null,"title":"Name"},"recording_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"title":"Recording Enabled"},"sms_enabled":{"anyOf":[{"type":"boolean ⟨69 unchanged words⟩
⟨19 unchanged words⟩ "default":null,"title":"Provider"},"purpose":{"default":"number","title":"Purpose","type":"string"},"subject_type":{"default":"person","title": ⟨11 unchanged words⟩
List the organization's carrier verifications, newest first. ``purpose`` is ``number`` or ``sms``; only that kind is listed. Omit to see every registration. ``purpose='sms'`` lists the registrations to text US numbers from a US number. Returns ``{"items": [{"id", "provider", "country_code", "number_type", "subject_type", "purpose", "state", "rejection_reason", "created_at", "updated_at", "submitted_at", "approved_at", "confirmation"}]}``.``state`` is``awaiting_review``, ``submitting``, ``submitted``,``approved``,``rejected`` or ``cancelled``. Use it to check whether asubmissionsubmission already exists before submitting again. ``confirmation`` ``code``: call confirm_verification with the code the carrier texted the person. Errors come back as ``{"error": "<message>"}``.
{"properties":{"purpose":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Purpose"}},"title":"list_verifications_toolArguments","type":"object"}
⟨53 unchanged words⟩ compare all carriers), ``twilio``, ``telnyx`` or ``didww``. ``area_code`` is an area code or the first digits of the number, as dialed in the country: ``"020"`` (London), ``"480"`` (Arizona). ``city`` is a city name such as ``"London"``. Each offer has ``locality`` and ``region`` (such as ``"Phoenix"``, ``"AZ"``): check them, since city names repeat across states. ``region`` (optional, with ``city``) is a US/CA state code; list_number_regions lists them. Omit all three to search the whole country. Returns ``{"offers": [...], " ⟨103 unchanged words⟩
{"properties":{"area_code":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Area Code"},"capabilities":{"anyOf":[{"items":{" ⟨6 unchanged words⟩ "default":null,"title":"Capabilities"},"city":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"City"},"country_code":{"title":"Country Code","type ⟨15 unchanged words⟩ ","title":"Provider","type":"string"},"region":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Region"}},"required":["country_code"],"title ⟨3 unchanged words⟩
⟨70 unchanged words⟩ false (the call then sends nothing). ``purpose`` is ``number`` (default) or ``sms``. ``purpose='sms'`` registers the organization to text US numbers from a US number (country_code US, number_type local). The carrier fee is debited from credit at filing. Pass the same ``purpose`` to get_verification_requirements. Steps: 1) call get_verification_requirements. 2) Ask the ⟨192 unchanged words⟩
⟨39 unchanged words⟩ "default":null,"title":"Provider"},"purpose":{"default":"number","title":"Purpose","type":"string"},"subject_type":{"default":"person","title": ⟨15 unchanged words⟩
Confirm a verification with a code — When a registration shows confirmation 'code', ask the person for the code the carrier texted and submit it here. ``verification_id`` comes from submit_verification or list_verifications. ``code`` is 4 to 10 characters. A wrong or expired code is an error naming ``code``; the carrier sends a new one after a day. On success the registration moves on; poll get_verification until ``approved``. A ``confirmation`` of ``reply`` means the person answers the carrier's text instead; nothing is entered here. Returns the verification or `…
List number search regions — List the US state and Canadian province codes that quote_numbers accepts as ``region`` (optional, with ``city``). Returns ``{"regions": [{"country_code", "code", "name"}]}``, such as ``{"country_code": "US", "code": "AZ", "name": "Arizona"}``, or ``{"error": "<message>"}``.
after
Create a contactbefore
—after
{"destructiveHint":false,"idempotentHint":false,"openWorldHint":false,"readOnlyHint":false}before
—after
Get a callbefore
—after
{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":true}before
—after
Get an emailbefore
—after
{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":true}before
—after
Get an email attachmentbefore
—after
{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":true}before
—after
Get email eventsbefore
—after
{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":true}before
—after
Get raw emailbefore
—after
{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":true}before
—after
Get email statsbefore
—after
{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":true}before
—after
Get eventsbefore
—after
{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":true}before
—after
Get a text messagebefore
—after
{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":true}before
—after
List agentsbefore
—after
{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":true}before
—after
List callsbefore
—after
{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":true}before
—after
List contactsbefore
—after
{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":true}before
—after
List email domainsbefore
—after
{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":true}before
—after
List emailsbefore
—after
{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":true}before
—after
List text messagesbefore
—after
{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":true}before
—after
Look up a contactbefore
—after
{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":true}before
—after
Place a phone call⟨277 unchanged words⟩ pass ``[]`` to disable. ``recipient_consent`` is required and must be the JSON boolean ``true`` (strings and numbers are refused): attest that you (the caller triggering this ⟨157 unchanged words⟩
before
—after
{"destructiveHint":false,"idempotentHint":false,"openWorldHint":true,"readOnlyHint":false}before
—after
Route a number to an agentbefore
—after
{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false}before
—after
Send an email⟨95 unchanged words⟩ ``whoami`` and pass their ``email``. ``recipient_consent`` is required and must be the JSON boolean ``true`` (strings and numbers are refused): attest that you (the caller triggering this ⟨264 unchanged words⟩
before
—after
{"destructiveHint":false,"idempotentHint":false,"openWorldHint":true,"readOnlyHint":false}before
—after
Send a text message⟨62 unchanged words⟩ uses the shared voice-call pool. ``recipient_consent`` is required and must be the JSON boolean ``true`` (strings and numbers are refused): attest that you (the caller triggering this ⟨109 unchanged words⟩
before
—after
{"destructiveHint":false,"idempotentHint":false,"openWorldHint":true,"readOnlyHint":false}before
—after
Upload an email attachmentbefore
—after
{"destructiveHint":false,"idempotentHint":false,"openWorldHint":false,"readOnlyHint":false}before
—after
Who am Ibefore
—after
{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":true}Buy a phone number — Buys a real phone number. It charges the setup fee and the first month now and renews monthly. Call quote_numbers first. Pass the offer's quote_id, country_code, number_type, and confirm_total_cents = monthly_cents + setup_cents from that offer. If the quote expired or the price changed (409) you get an error: quote again. Only buy when your user asked for this number. After buying, call route_number to point it at an agent. A quote buys at most one number. After a timeout, retry with the same quote_id and idempotency_key, or ch…
Cancel a verification — Cancel a verification that has not been sent for review, or dismiss a rejected one (needed before submitting a new one for the same country and number type). The draft is discarded. Works only in state ``awaiting_review`` or ``rejected``. A ``submitting`` or ``submitted`` verification is under review and cannot be cancelled (409): wait for the result with get_verification. Returns the verification with ``state: "cancelled"``, or ``{"error": "<message>"}``.
Delete an agent — Delete a saved agent. DESTRUCTIVE. Ask the user before calling this. Numbers that used the agent stop answering with it: calls ring out and texts reach webhooks only. Reroute them first with ``route_number`` if that matters. ``confirm_name`` must equal the agent's ``name``. The tool reads the agent first and refuses with ``{"error": ...}`` on a mismatch, without deleting anything. To stop an agent without deleting it, use ``update_agent`` with ``status="paused"``. Returns ``{"deleted": true, "agent_id", "name"}``, or `…
Get an agent — Fetch one saved agent by id. ``agent_id`` comes from ``list_agents`` or ``create_agent``. Returns the ``AgentResponse`` as a dict (``name``, ``system_prompt``, ``first_message``, ``ai_disclosure``, ``voice_config``, ``tools``, ``voice_enabled``, ``sms_enabled``, ``status``, ...), or ``{"error": "<message>"}``.
Get a number — Fetch one dedicated number by id: its state, capabilities and which agents answer its calls and texts. ``number_id`` comes from ``list_numbers``. Returns the ``PhoneNumberResponse`` as a dict, or ``{"error": "<message>"}``.
Get a verification — Fetch one verification and its state. Use it to poll. There is no notification, and review takes business days. Poll every few minutes to hours, not every few seconds; the state refreshes from the carrier at most once a minute. On ``approved``: call quote_numbers again. The offer is now ``ready``; then acquire_number. On ``rejected``: read ``rejection_reason``, ask the user, dismiss it with cancel_verification, then submit a new one. ``verification_id`` comes from submit_verification or list_verifications. Returns ``{"…
Get verification requirements — Read what the carrier needs to verify the organization before it can buy a number. Call this when quote_numbers shows an offer with ``readiness == "verification_required"``. Read-only. ``country_code`` is ISO alpha-2 (for example ``"GB"``). ``number_type`` is ``local``, ``mobile``, ``national`` or ``toll_free``. ``subject_type`` is ``person`` (default) or ``business``; the result's ``subject_types`` lists what the carrier accepts. ``provider`` is optional. Returns ``required`` (false means no verification is needed and …
List numbers — List the workspace's dedicated phone numbers, newest first. ``limit`` is 1..200 (default 50). Pass the returned ``next_cursor`` as ``cursor`` for the next page. Returns ``{"items": [{"id", "e164", "provider", "country_code", "number_type", "capabilities", "provisioning_state", "voice_agent_id", "sms_agent_id", ...}], "next_cursor"}``, or ``{"error": "<message>"}``.
List verifications — List the organization's carrier verifications, newest first. Returns ``{"items": [{"id", "provider", "country_code", "number_type", "subject_type", "state", "rejection_reason", "created_at", "updated_at", "submitted_at", "approved_at"}]}``. ``state`` is ``awaiting_review``, ``submitting``, ``submitted``, ``approved``, ``rejected`` or ``cancelled``. Use it to check whether a submission already exists before submitting again. Errors come back as ``{"error": "<message>"}``.
Quote phone numbers — Compare live phone-number offers from the carriers. Read-only: it buys nothing and charges nothing. ``country_code`` is an ISO alpha-2 code such as ``"US"``. ``capabilities`` is ``["voice"]``, ``["sms"]`` or both (default). ``number_type`` is ``local``, ``mobile``, ``national`` or ``toll_free``; omit it to compare all types. ``provider`` is ``auto`` (compare all carriers), ``twilio``, ``telnyx`` or ``didww``. Returns ``{"offers": [...], "recommended_quote_id", "unavailable_providers", "expires_at"}``. Each offer has ``e164``, `…
Release a number — Release a phone number. DESTRUCTIVE and permanent. Calls and texts to the number stop. This month's fee and any earlier months are still billed. There is no refund. The number may not be recoverable. Ask the user before calling this. ``confirm_e164`` must equal the number's ``e164`` (for example ``"+14155550100"``). The tool reads the number first and refuses with ``{"error": ...}`` on a mismatch, without releasing anything. A number whose order is still pending cannot be released (409). A number whose order failed was …
Submit a verification — Send the user's personal or company details and identity documents to the carrier for verification. IRREVERSIBLE: once submitted it cannot be cancelled, and the carrier keeps the documents. ``attest_authorized``: pass true only if the person or company named in these details and documents asked for this submission and gave you the details and files in this conversation. Never invent, guess, infer or reuse personal data or documents. Anything else: pass false (the call then sends nothing). Steps: 1) call get_verification_require…
Update an agent — Change a saved agent. Safe to repeat: the same call gives the same result. Only the fields you pass change; a field left out keeps its value. ``status`` is ``"live"`` or ``"paused"``; a paused agent does not answer. ``language`` is a lowercase ISO 639-1 code. Pass ``language`` or ``voice_id`` alone: the other value is kept. ``max_duration_seconds`` and ``handover_max_duration_seconds`` are 60..3600. ``handover_contacts`` replaces the whole list: ``[{contact_id, note}]`` (max 10) as in ``create_agent``; ``[]`` removes every conta…
⟨31 unchanged words⟩ "voice_config", "tools", "max_duration_seconds", "voice_enabledhandover_max_duration_seconds", "voice_enabled", "sms_enabled", "status", "handover_contacts"}, ...]}``.
Save an agent. Then call ``route_number`` so a number answers with it, or pass its id as ``agent_id`` to ``place_call``. ``system_prompt`` is what the agent follows. ``first_message`` is spoken after the AI line; omit it to let the caller speak first. ``ai_disclosure_line`` replaces the workspace AI line for this agent; ``{org}`` becomes the organization name. ``language`` is a lowercase ISO 639-1 code. ``max_duration_seconds`` is 60..3600. Returns the API's ``AgentResponse`` as a dict, or ``{"error": "<message>"}``.
List the workspace's saved agents: the brains that answer calls and texts on its numbers, and that ``place_call`` can use via ``agent_id``. Returns ``{"items": [{"id", "name", "system_prompt", "first_message", "ai_disclosure", "ai_disclosure_line", "voice_config", "tools", "max_duration_seconds", "voice_enabled", "sms_enabled", "status"}, ...]}``.
Choose which agent answers a number's calls and texts. ``voice_agent_id`` makes the number answer calls with that agent (Hail registers it for inbound at the carrier and LiveKit); ``clear_voice=True`` stops answering calls. ``sms_agent_id`` makes the agent reply to texts; ``clear_sms=True`` stops that. A field left out keeps its value. ``number_id`` comes from GET /numbers. Returns the updated ``PhoneNumberResponse`` as a dict, or ``{"error": "<message>"}``.