In depth
Changelog
Written beside the API’s code, and read from it every hour.
Changes that affect integrations, newest first.
-
AI agent calls: a safe retry, one dial policy, a daily cap
POST /v1/agents/{id}/callstakes anIdempotency-Keyheader (up to 80 characters). A repeat within a day answers the same call instead of placing a second one; without it, the same agent, number andreferencewithin two minutes is the same request.- A
502on that route now says the platform did not answer and the call may have been placed. Check for the placed-call tag before you retry, or retry with the same key. - A
referencemay hold a colon (ZD:12345) all the way to the placed-call tag. - An agent places at most 50 calls a day (
422past that). The numbers it never dials are one list for the API, the portal and the agent itself: service codes, premium numbers, and the area codes of other countries.
-
API Messaging keys are outside the account's texting limit
- A send from an API Messaging key is paid per message and no longer counts toward the account's included texting limit (50 texts an hour and 150 a day as standard), and that limit no longer stops it. Until today a batch stopped at the account's hourly limit with
Company has reached its hourly message limit. The key's own pace and the carriers' daily room are what pace it now. - Texts sent with the main key count toward that limit as before, together with the texts the account's people send.
- A send to a T-Mobile number (or one whose carrier is not known yet) after the account's 960 T-Mobile messages for the day joins the queue and waits for the next day, as a queued message always did, instead of going out to be rejected. Every number is looked up for its carrier before it is sent, and T-Mobile's day resets at midnight Pacific, as T-Mobile counts it.
- A send from an API Messaging key is paid per message and no longer counts toward the account's included texting limit (50 texts an hour and 150 a day as standard), and that limit no longer stops it. Until today a batch stopped at the account's hourly limit with
-
The monthly fax allowance is per line, pooled
- An account's monthly allowance of outbound fax pages is 1,000 for each fax line on it, pooled across the lines, so an account with three lines may send 3,000 pages a month from any one of them. Until today the whole account shared one 1,000 whatever its line count. The
429text names the allowance, the lines and the pages a line.
- An account's monthly allowance of outbound fax pages is 1,000 for each fax line on it, pooled across the lines, so an account with three lines may send 3,000 pages a month from any one of them. Until today the whole account shared one 1,000 whatever its line count. The
-
Fax limits said the way they are counted
- The monthly fax limit counts pages, the same way the portal and email to fax count it; the API counted whole faxes against it until today. The reference, this guide and the
429text now say pages. - The fax counters have been 3 a minute and 50 sent a day per account since 2026-09-25; the 2026-09-24 entry below named that first day's 10 and 500.
message.sentfires for a text sent through the API or an automation, never for one sent from Webex, by email reply or on WhatsApp; the events table here said otherwise.- An AI agent call is refused outside the agent's own calling hours (its Persona tab), not a fixed Eastern window; the reference said 8 AM to 9 PM Eastern.
- The monthly fax limit counts pages, the same way the portal and email to fax count it; the API counted whole faxes against it until today. The reference, this guide and the
-
Recordings in parts
- A call that is parked and picked up again is recorded in parts. Each leg in
GET /v1/callslists its parts in the newrecordingsfield, oldest first, each withpart,parts,recording_id,start_time,durationand its ownurl. GET /v1/media/rec_<n>?part=Nfetches one part. Without?part, the answer is the latest part, and it now names it:part,parts,recording_id,start_time.recording_url,summaryandtranscriptionalways come from the same recording, the latest part. On a parked call the link used to play the first part while the words came from the second.call.transcriptionevents carryrecording_id,part,parts,recording_start_timeandrecording_duration, so the events of a call recorded in parts can be told apart.
- A call that is parked and picked up again is recorded in parts. Each leg in
-
Separate limits, clearer errors, safer sending
- Support tickets take the business the person is calling about:
contact_companyandcontact_company_phone. Support finds the account on that number first. Acaller_idor business number that is not a 10-digit US number is left out instead of refusing the ticket. - Each kind of request has its own rate-limit counter per key: reports, texts, faxes, AI agent calls, support tickets, knowledge questions and everything else. They used to share one, so a key that polled reports could run out of room to send a text. The
429body now names the counter. - New counters: faxes 10 a minute and 500 a day, AI agent calls 10 and 500, support tickets 10 and 200, knowledge questions 30 and 2,000.
- A request without a live key is limited per source address: 60 a minute and 600 an hour.
- When the API cannot check a key, it answers
503withRetry-After: 5. It used to answer401. - Text sends that fail say what happened:
503(not sent, safe to retry),504(not confirmed, checkGET /v1/messagesbefore retrying), the messaging service's own4xx, or502. They were all500. - WhatsApp sending through
POST /v1/messagesanswers422, dry runs included. WhatsApp history stays inGET /v1/messages. GET /v1/calls,GET /v1/messagesandGET /v1/faxescover at most 366 days a request (400otherwise). Messages and faxes echo the local dates you asked for, and rows that tie on the sort key page in a stable order.- Webhook URLs must be
httpson a public internet address (422otherwise). Deliveries never follow redirects: a3xxis a failed delivery. POST /v1/usersno longer creates or changes keys. It answers403. Keys are made in the portal.- Faxes: documents over 20 MB answer
413, the account's monthly outbound limit is enforced (429), and premium and foreign numbers are refused. - AI agent calls never dial 911 or other service codes, 988, premium numbers or other countries' area codes.
GET /v1/mediaanswers an attachment on a text you sent with the link you sent it with.- Removed:
GET /v1/settings, which never worked, and the stage docs at/st-docs. - The API reference is new, with a request console.
- Support tickets take the business the person is calling about:
-
Knowledge
GETandPOST /v1/knowledge/answer: a question about Vocatech's service, answered from our knowledge base. Newknowledgescope. Thesupportscope reaches it too. -
Callers and AI agents
GET /v1/callers/{number},GET /v1/contacts/lookup,GET /v1/agentsandPOST /v1/agents/{id}/calls. Newagentsscope. -
Support tickets
POST /v1/support/ticketsopens a ticket with Vocatech support. Newsupportscope. -
Texting pace on main keys
POST /v1/messageson a main key: up to 20 a minute and 200 a day. API Messaging keys carry more. -
Calls page by call
A call's journey is never split across two pages of
GET /v1/calls. -
Fax history fixed
GET /v1/faxesno longer fails with500. -
Webhooks by number
number_filterslimits an endpoint to chosen numbers. An API Messaging key manages its own webhooks, for message events only. -
One API Messaging key per integrator
Up to 10 API Messaging keys per account, each with its own label, pace and IP allow-list.
-
Signed attachment links
GET /v1/mediaanswers message attachments with a signed link good for 30 minutes, like recordings and faxes. -
Parts counted the carriers' way
messages_countedfollows the carriers' rules for basic and extended characters. -
Real numbers only
A text's
tomust be a valid 10-digit US or Canadian number. -
The queue
API Messaging keys hand over a whole batch (
202) and it goes out in order at the key's pace.GETandDELETE /v1/messages/queue. An MMS carries every attachment in one message. -
Scopes, API Messaging and MMS
Keys can be narrowed to a scope. API Messaging keys, with their own pace.
mediaonPOST /v1/messages, andmessages_countedin send answers. -
IP allow-list
Lock a key to exact addresses.
GET /v1/whoamishows the address the API sees. -
Cleaner events
call.transcriptioncarries the clean, speaker-labeled transcript. Message events carryerror.POST /v1/messagesreturnsmessage_id. -
Faxes
POSTandGET /v1/faxes,fax_media and thefax.*events. -
One media route
GET /v1/media/{id}for message attachments and call recordings. -
Contacts
List, create or update, and delete contacts through the API.
-
Message events
message.sent,message.receivedandmessage.status_updatedwebhooks. -
Flat paths and dry runs
/v1/calls,/v1/messagesand/v1/webhooks, and dry runs with"test": true.
