# Changelog

Changes that affect integrations, newest first.

1. 2026-10-25
  AI agent calls: a safe retry, one dial policy, a daily cap
    - `POST /v1/agents/{id}/calls` takes an `Idempotency-Key` header (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 and `reference` within two minutes is the same request.
  - A `502` on 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 `reference` may hold a colon (`ZD:12345`) all the way to the placed-call tag.
  - An agent places at most 50 calls a day (`422` past 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.
2. 2026-10-22
  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.
3. 2026-10-21
  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 `429` text names the allowance, the lines and the pages a line.
4. 2026-10-18
  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 `429` text 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.sent` fires 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.
5. 2026-09-25
  Recordings in parts
    - A call that is parked and picked up again is recorded in parts. Each leg in `GET /v1/calls` lists its parts in the new `recordings` field, oldest first, each with `part`, `parts`, `recording_id`, `start_time`, `duration` and its own `url`.
  - `GET /v1/media/rec_<n>?part=N` fetches one part. Without `?part`, the answer is the latest part, and it now names it: `part`, `parts`, `recording_id`, `start_time`.
  - `recording_url`, `summary` and `transcription` always 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.transcription` events carry `recording_id`, `part`, `parts`, `recording_start_time` and `recording_duration`, so the events of a call recorded in parts can be told apart.
6. 2026-09-24
  Separate limits, clearer errors, safer sending
    - Support tickets take the business the person is calling about: `contact_company` and `contact_company_phone`. Support finds the account on that number first. A `caller_id` or 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 `429` body 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 `503` with `Retry-After: 5`. It used to answer `401`.
  - Text sends that fail say what happened: `503` (not sent, safe to retry), `504` (not confirmed, check `GET /v1/messages` before retrying), the messaging service's own `4xx`, or `502`. They were all `500`.
  - WhatsApp sending through `POST /v1/messages` answers `422`, dry runs included. WhatsApp history stays in `GET /v1/messages`.
  - `GET /v1/calls`, `GET /v1/messages` and `GET /v1/faxes` cover at most 366 days a request (`400` otherwise). 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 `https` on a public internet address (`422` otherwise). Deliveries never follow redirects: a `3xx` is a failed delivery.
  - `POST /v1/users` no longer creates or changes keys. It answers `403`. 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/media` answers 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](https://vocatech.com/developers/reference) is new, with a request console.
7. 2026-09-15
  Knowledge
  `GET` and `POST /v1/knowledge/answer`: a question about Vocatech's service, answered from our knowledge base. New `knowledge` scope. The `support` scope reaches it too.
8. 2026-09-11
  Callers and AI agents
  `GET /v1/callers/{number}`, `GET /v1/contacts/lookup`, `GET /v1/agents` and `POST /v1/agents/{id}/calls`. New `agents` scope.
9. 2026-09-08
  Support tickets
  `POST /v1/support/tickets` opens a ticket with Vocatech support. New `support` scope.
10. 2026-09-02
  Texting pace on main keys
  `POST /v1/messages` on a main key: up to 20 a minute and 200 a day. API Messaging keys carry more.
11. 2026-08-30
  Calls page by call
  A call's journey is never split across two pages of `GET /v1/calls`.
12. 2026-08-26
  Fax history fixed
  `GET /v1/faxes` no longer fails with `500`.
13. 2026-08-12
  Webhooks by number
  `number_filters` limits an endpoint to chosen numbers. An API Messaging key manages its own webhooks, for message events only.
14. 2026-08-07
  One API Messaging key per integrator
  Up to 10 API Messaging keys per account, each with its own label, pace and IP allow-list.
15. 2026-08-06
  Signed attachment links
  `GET /v1/media` answers message attachments with a signed link good for 30 minutes, like recordings and faxes.
16. 2026-08-03
  Parts counted the carriers' way
  `messages_counted` follows the carriers' rules for basic and extended characters.
17. 2026-07-30
  Real numbers only
  A text's `to` must be a valid 10-digit US or Canadian number.
18. 2026-07-28
  The queue
  API Messaging keys hand over a whole batch (`202`) and it goes out in order at the key's pace. `GET` and `DELETE /v1/messages/queue`. An MMS carries every attachment in one message.
19. 2026-07-27
  Scopes, API Messaging and MMS
  Keys can be narrowed to a scope. API Messaging keys, with their own pace. `media` on `POST /v1/messages`, and `messages_counted` in send answers.
20. 2026-07-21
  IP allow-list
  Lock a key to exact addresses. `GET /v1/whoami` shows the address the API sees.
21. 2026-07-16
  Cleaner events
  `call.transcription` carries the clean, speaker-labeled transcript. Message events carry `error`. `POST /v1/messages` returns `message_id`.
22. 2026-06-02
  Faxes
  `POST` and `GET /v1/faxes`, `fax_` media and the `fax.*` events.
23. 2026-03-25
  One media route
  `GET /v1/media/{id}` for message attachments and call recordings.
24. 2026-03-16
  Contacts
  List, create or update, and delete contacts through the API.
25. 2026-03-13
  Message events
  `message.sent`, `message.received` and `message.status_updated` webhooks.
26. 2026-03-11
  Flat paths and dry runs
  `/v1/calls`, `/v1/messages` and `/v1/webhooks`, and dry runs with `"test": true`.
