Vocatech

In depth

Changelog

Written beside the API’s code, and read from it every hour.

Plain text

Changes that affect integrations, newest first.

  1. 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. 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. 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. 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. 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. 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 is new, with a request console.
  7. 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. 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. Support tickets

    POST /v1/support/tickets opens a ticket with Vocatech support. New support scope.

  10. 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. Calls page by call

    A call's journey is never split across two pages of GET /v1/calls.

  12. Fax history fixed

    GET /v1/faxes no longer fails with 500.

  13. Webhooks by number

    number_filters limits an endpoint to chosen numbers. An API Messaging key manages its own webhooks, for message events only.

  14. 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. Signed attachment links

    GET /v1/media answers message attachments with a signed link good for 30 minutes, like recordings and faxes.

  16. Parts counted the carriers' way

    messages_counted follows the carriers' rules for basic and extended characters.

  17. Real numbers only

    A text's to must be a valid 10-digit US or Canadian number.

  18. 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. 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. IP allow-list

    Lock a key to exact addresses. GET /v1/whoami shows the address the API sees.

  21. Cleaner events

    call.transcription carries the clean, speaker-labeled transcript. Message events carry error. POST /v1/messages returns message_id.

  22. Faxes

    POST and GET /v1/faxes, fax_ media and the fax.* events.

  23. One media route

    GET /v1/media/{id} for message attachments and call recordings.

  24. Contacts

    List, create or update, and delete contacts through the API.

  25. Message events

    message.sent, message.received and message.status_updated webhooks.

  26. Flat paths and dry runs

    /v1/calls, /v1/messages and /v1/webhooks, and dry runs with "test": true.