{"templateId":"markdown","sharedDataIds":{"sidebar":"sidebar-sidebars.yaml"},"props":{"metadata":{"markdoc":{"tagList":["admonition"]},"type":"markdown"},"seo":{"title":"Changelog","description":"Complete developer documentation for the eCommunicate Omnichannel platform. WhatsApp Cloud, WhatsApp Lite, SMS, Live Chat, and Conversations APIs. Send messages, manage templates, configure webhooks, and build customer engagement at scale.","siteUrl":"https://docs.ecommunicate.co.za","keywords":["eCommunicate API","WhatsApp Business API","SMS API","omnichannel messaging","WhatsApp templates","messaging platform","South Africa messaging API"],"llmstxt":{"hide":false,"sections":[{"title":"Table of contents","includeFiles":["**/*"],"excludeFiles":[]}],"excludeFiles":[]}},"dynamicMarkdocComponents":[],"compilationErrors":[],"ast":{"$$mdtype":"Tag","name":"article","attributes":{},"children":[{"$$mdtype":"Tag","name":"Heading","attributes":{"level":1,"id":"changelog","__idx":0},"children":["Changelog"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["All notable changes to the eCommunicate Omnichannel API. This changelog follows ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"https://semver.org/"},"children":["Semantic Versioning"]},"."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"releases-at-a-glance","__idx":1},"children":["Releases at a glance"]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Version"},"children":["Version"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Released"},"children":["Released"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Highlights"},"children":["Highlights"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["v3.0.19"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["July 2026"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["PLAYED"]}," voice-note status; BSUID on send + chat participant"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["v3.0.18"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["July 2026"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Alpha usernames (BSUID) on incoming & chatbot webhooks"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["v3.0.17"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["June 2026"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["UserResponse"]}," client/status fields + migration guide"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["v3.0.16"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["June 2026"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Delete a user (soft-delete) via ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["/api/v1/users/{id}"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["v3.0.15"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["June 2026"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["User Management v1 endpoints + credential-free DTOs"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["v3.0.14"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["June 2026"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Live Chat v2 message fields + optional ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["tempId"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["v3.0.13"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["June 2026"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Chatbot webhook v2: removed nested ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["chatParticipant"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["v3.0.12"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["June 2026"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Live Chat v2 endpoints + v1 deprecations"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["v3.0.11"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["June 2026"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Chatbot webhook v2: quoted/reply message fields"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["v3.0.10"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["June 2026"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Recipient number format (international, no leading 0)"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["v3.0.9"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["June 2026"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Clarify call-to-action (CTA) as an umbrella term"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["v3.0.8"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["May 2026"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["SMS segmentation + billing guidance"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["v3.0.7"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["May 2026"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Chatbot webhook v2 payload (full agent + chat participant)"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["v3.0.6"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["May 2026"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Chat participant search + open/closed filter"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["v3.0.5"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["April 2026"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Per-number webhook overrides"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["v3.0.4"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["April 2026"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Chatbot conversation webhook"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["v3.0.3"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["April 2026"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Register WhatsApp Lite number"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["v3.0.2"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["April 2026"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Chat participant pagination"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["v3.0.1"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["April 2026"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Chatbot conversation flow guide"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["v3.0.0"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["January 2026"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Omnichannel integration API"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["v2.1.0"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["November 2025"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Long-lived WhatsApp conversations"]}]}]}]}]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"v3019--voice-note-played-status--more-bsuid-surfaces","__idx":2},"children":["v3.0.19 — Voice-note ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["PLAYED"]}," status & more BSUID surfaces"]},{"$$mdtype":"Tag","name":"blockquote","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Released July 2026"]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"added-in-v3019","__idx":3},"children":["Added in v3.0.19"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["New ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["PLAYED"]}," message status for voice notes."]}," When a recipient listens to a voice note (voice/PTT message), the ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"https://ecommunicate-api-docs.redocly.app/guides/webhooks#status-update-payload"},"children":["status update webhook"]}," now fires with ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["status: \"PLAYED\""]}," and a ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["playedTime"]},". ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["PLAYED"]}," follows ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["READ"]}," in the lifecycle and applies only to voice notes. Added to the status enums (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["latestMessageStatus"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["eCommValidationMessage"]},") and the v2 ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["MessageResponse"]}," gains ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["played"]}," / ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["playedTime"]},"."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["BSUID on the send request."]}," Each recipient on ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["POST /v2/messages"]}," / ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["POST /v2/channels/whatsapp"]}," (Omnichannel) and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["POST /v2/json"]}," (Conversations) now accepts ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["customerUserId"]}," (the recipient's ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["BSUID"]},"). Supply it alongside ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["to"]}," (the phone takes precedence, the BSUID rides along as a durable fallback) ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["or on its own"]}," to address a recipient that has no phone number. A malformed BSUID is ignored."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["BSUID on the chat participant."]}," The ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["ChatParticipant"]}," schema documents ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["userId"]}," (BSUID), ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["username"]},", and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["parentUserId"]},", and the lean v2 ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["ChatParticipantResponse"]}," now carries ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["userId"]}," and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["username"]}," — fields already returned by the participant and chat endpoints."]}]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"v3018--alpha-usernames-bsuid-on-webhooks","__idx":4},"children":["v3.0.18 — Alpha usernames (BSUID) on webhooks"]},{"$$mdtype":"Tag","name":"blockquote","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Released July 2026"]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"added-in-v3018","__idx":5},"children":["Added in v3.0.18"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Incoming message webhooks now carry the customer's alpha username fields."]}," ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["senderUserId"]}," (the durable business-scoped user id / ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["BSUID"]},", e.g. ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["ZA.1021033720668862"]},") and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["username"]}," (optional display username) are added to the ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"https://ecommunicate-api-docs.redocly.app/guides/webhooks#incoming-message-payload"},"children":["incoming message payload"]},". The BSUID is stable across phone-number changes and present even when the phone number is withheld; the phone number stays the primary identifier for now. Both are omitted when the provider doesn't supply them."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Chatbot webhook ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["v2"]}," adds ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["senderUserId"]}," / ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["recipientUserId"]}," / ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["username"]},"."]}," On ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["INCOMING"]}," events the customer's BSUID is in ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["senderUserId"]},"; on ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["OUTGOING"]}," events it is in ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["recipientUserId"]},". See the ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"https://ecommunicate-api-docs.redocly.app/guides/webhooks#v2-field-reference"},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["v2"]}," field reference"]},". Available on the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["v2"]}," payload only."]}]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"v3017--userresponse-fields--migration-guide","__idx":6},"children":["v3.0.17 — UserResponse fields & migration guide"]},{"$$mdtype":"Tag","name":"blockquote","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Released June 2026"]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"added-in-v3017","__idx":7},"children":["Added in v3.0.17"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["UserResponse"]}," now documents the user's client context and account status."]}," Added ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["clientId"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["countryTimezone"]},", and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["popiaComplianceEnabled"]}," (inherited from the client), plus ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["resetPasswordEmailSent"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["emailVerified"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["tempPasswordValid"]},", and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["validToken"]},"."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["User Management v1 migration guide."]}," The ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"https://ecommunicate-api-docs.redocly.app/guides/migrations"},"children":["Migrations & Deprecations"]}," page now maps every deprecated ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["/SystemUsers/*"]}," endpoint to its credential-free ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["/api/v1/users"]}," replacement."]}]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"v3015--user-management-v1","__idx":8},"children":["v3.0.15 — User Management v1"]},{"$$mdtype":"Tag","name":"blockquote","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Released June 2026"]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"added-in-v3015","__idx":9},"children":["Added in v3.0.15"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["New credential-free ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"https://ecommunicate-api-docs.redocly.app/apis/omnichannel/user-management"},"children":["User Management"]}," endpoints under ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["/api/v1/users"]},":"]}," create a user, update a user, delete a user, get my profile, list users (paginated), change availability, set agent chat limit, change my password, and get my WhatsApp credits. Responses use new credential-free schemas (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["UserResponse"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["CreateUserResponse"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["UpdateUserRequest"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["CreateUserRequest"]},") that never include password, apiKey, or token fields."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Creating a user returns a one-time temporary password."]}," A user is created without a caller-supplied password; the response carries a single-use ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["temporaryPassword"]}," to share securely, and the user must set their own password on first login."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"deprecated-in-v3015","__idx":10},"children":["Deprecated in v3.0.15"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["All legacy ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["/SystemUsers/*"]}," user endpoints are deprecated"]}," in favour of their ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["/api/v1/users"]}," equivalents (create, update, get current user, paginated list, change availability, update agent chat limit, change password, get WhatsApp credits). They continue to work but expose credential-bearing ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["SystemUser"]}," objects and will be removed in a future release."]}]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"v3014--live-chat-v2-message-fields","__idx":11},"children":["v3.0.14 — Live Chat v2 Message Fields"]},{"$$mdtype":"Tag","name":"blockquote","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Released June 2026"]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"added-in-v3014","__idx":12},"children":["Added in v3.0.14"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["New fields on the v2 ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["MessageResponse"]},":"]}," ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["sender"]}," and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["receiver"]}," (the message's from/to addresses), ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["ctId"]}," (the custom tracking id, when one was supplied on send), ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["fileExtension"]}," (extension of attached media), and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["facebookMessageId"]}," (the Facebook provider message id, alongside the existing ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["whatsAppMessageId"]},"). All are omitted when null."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"changed-in-v3014","__idx":13},"children":["Changed in v3.0.14"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["tempId"]}," on ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"https://ecommunicate-api-docs.redocly.app/apis/omnichannel/live-chat/sendmessagev2"},"children":["Send an agent message (v2)"]}," is now documented as an optional plain string."]}," Supply a client-generated id only if you want it echoed back to reconcile an optimistic UI message; otherwise omit it. (No longer constrained to UUID format.)"]}]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"v3013--chatbot-webhook-v2-slimmed","__idx":14},"children":["v3.0.13 — Chatbot Webhook v2 Slimmed"]},{"$$mdtype":"Tag","name":"blockquote","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Released June 2026"]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"removed-in-v3013","__idx":15},"children":["Removed in v3.0.13"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Nested ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["chatParticipant"]}," object dropped from the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["v2"]}," chatbot webhook payload."]}," It was redundant — agent identity and conversation lifecycle are already on the flat fields (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["assignedAgentId"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["assignedAgentName"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["lastAssignedAgentId"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["lastAssignedAgentName"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["conversationStatus"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["conversationClosed"]},", …) — and it shipped the full ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["SystemUser"]}," (including credential fields) inside ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["chatParticipant.assignedTo"]},". The v2 payload is now the flat fields plus ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["teamId"]}," / ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["teamName"]}," / ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["routedToAnotherTeam"]}," and the quoted-reply fields. ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["No credentials are sent."]}," The corresponding security warning has been removed from the Webhooks guide."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Why it's safe to drop:"]}," the v2 send flow no longer needs the full object — reply with a single call to ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"https://ecommunicate-api-docs.redocly.app/apis/omnichannel/live-chat/sendmessagev2"},"children":["Send an agent message (v2)"]}," using just the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["chatParticipantId"]}," from the payload."]}]},{"$$mdtype":"Tag","name":"blockquote","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Breaking for receivers that read ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["chatParticipant.*"]},"."]}," Switch to the flat ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["assignedAgent*"]}," / ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["conversation*"]}," fields (same values, same top-level payload)."]}]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"v3012--live-chat-v2-endpoints","__idx":16},"children":["v3.0.12 — Live Chat v2 Endpoints"]},{"$$mdtype":"Tag","name":"blockquote","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Released June 2026"]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"added-in-v3012","__idx":17},"children":["Added in v3.0.12"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Lean v2 live-chat endpoints"]}," under ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["/pl4chat-service/api/v2"]},":",{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["GET /api/v2/messages"]}," — messages for a participant as a curated ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["MessageResponse"]}," (incl. quoted-reply fields)."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["POST /api/v2/messages"]}," — ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["single"]}," agent send for all channels, routed by a ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["channel"]}," field (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["WHATSAPP"]},"/",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["WEB"]},"/",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["FACEBOOK"]},")."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["POST /api/v2/messages/media"]}," — channel-agnostic media upload returning a ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["mediaUrl"]}," to send."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["POST /api/v2/messages/typing"]}," and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["POST /api/v2/messages/read"]}," — typing indicator and mark-conversation-read, keyed by ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["participantId"]},"."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["GET /api/v2/messages/tracking/{trackingNumber}"]}," and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["GET /api/v2/messages/ctid/{ctId}"]}," — message lookups returning lean ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["MessageResponse"]}," (tenant-scoped)."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["GET /api/v2/chats"]}," — paginated chat list selected by a ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["scope"]}," filter, returning ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["ChatParticipantResponse"]},"."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["GET /api/v2/chats/{id}"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["POST /api/v2/chats/{id}/terminate"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["POST /api/v2/chats/{id}/open"]}," — fetch / close / reopen a chat by id (actor resolved from the session)."]}]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Migration guide"]}," — new ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/guides/migrations"},"children":["Migrations & Deprecations"]}," page mapping each deprecated v1 endpoint to its v2 replacement."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"deprecated-in-v3012","__idx":18},"children":["Deprecated in v3.0.12"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Marked ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["deprecated"]}," (all remain fully functional — no removal date): ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["getMessagesByChatParticipant"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["sendAgentMessageWhatsapp"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["sendAgentMessageWithAttachment"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["sendChatTypingIndicator"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["markReadByAgent"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["getChatParticipants"]}," and the per-tab lists (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["getMyParticipants"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["getTeamParticipants"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["getUnAssignedParticipants"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["getClosedParticipants"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["getMissedParticipants"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["getMissedAfterHoursParticipants"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["getMyMissedParticipants"]},"), ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["getParticipantsByAssignedTo"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["terminateChatParticipantChat"]},", and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["getChatMessagesByTrackingNumber"]},". New integrations should use the v2 endpoints above — see the migration guide."]}]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"v3011--chatbot-webhook-v2-quoted-reply-fields","__idx":19},"children":["v3.0.11 — Chatbot Webhook v2 Quoted-Reply Fields"]},{"$$mdtype":"Tag","name":"blockquote","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Released June 2026"]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"added-in-v3011","__idx":20},"children":["Added in v3.0.11"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["quotedMessageId"]}," and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["quotedText"]}," on the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["v2"]}," chatbot webhook payload"]}," — when a customer replies by quoting an earlier message (WhatsApp's reply-to feature), ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["INCOMING"]}," events now include the quoted message's WhatsApp id (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["quotedMessageId"]},") and a text snapshot (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["quotedText"]},"), so receivers can render the reply in context without having stored the original. Both fields are omitted when the incoming message is not a reply/quote."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"documentation-in-v3011","__idx":21},"children":["Documentation in v3.0.11"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Webhooks guide"]}," — added an \"Incoming message (customer quoting a message)\" example to the chatbot conversation payload section, and documented the two new fields in the field reference."]}]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"v3010--recipient-number-format-documented","__idx":22},"children":["v3.0.10 — Recipient Number Format Documented"]},{"$$mdtype":"Tag","name":"blockquote","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Released June 2026"]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"documentation-in-v3010","__idx":23},"children":["Documentation in v3.0.10"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["International recipient format on WhatsApp sends"]}," — the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["to"]}," field on send-message recipients now carries an E.164-style validation pattern (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["^\\+?[1-9][0-9]{6,14}$"]},") and a description requiring the country code plus subscriber number, with an optional leading ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["+"]},". Numbers in local format starting with ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["0"]}," are explicitly invalid — e.g. South Africa must be ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["+27821234567"]}," or ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["27821234567"]},", never ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["0821234567"]},". The rule is country-agnostic: the leading digit after the optional ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["+"]}," must be ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["1–9"]},", so any country code is accepted."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Send endpoint guidance"]}," — the unified send (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["POST /v2/messages"]},") and Send WhatsApp messages (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["POST /v2/channels/whatsapp"]},") endpoint descriptions now state the recipient number format rule."]}]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"v309--call-to-action-terminology-clarified","__idx":24},"children":["v3.0.9 — Call-to-Action Terminology Clarified"]},{"$$mdtype":"Tag","name":"blockquote","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Released June 2026"]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"documentation-in-v309","__idx":25},"children":["Documentation in v3.0.9"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["\"Call-to-action (CTA)\" defined as an umbrella term"]}," — the Template Management section now states explicitly that CTA is not a single template type but covers any template carrying interactive buttons (quick-reply, static/dynamic URL, phone-number, flow, and OTP), matching how the send examples already group them under the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["CTA — …"]}," heading."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Renamed the mislabeled create example"]}," — the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["createTemplate"]}," example previously listed as \"Call to Action\" (which contained only quick-reply buttons) is now \"Quick-reply Buttons\", and its summary notes it is a call-to-action variant. This removes the contradiction of CTA appearing both as the umbrella and as a sibling of the URL/phone/flow button examples."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Aligned the WhatsApp Lite limitation lists"]}," — the unsupported-types lists no longer list \"quick-reply buttons\" and \"call-to-action\" as separate items, since quick-reply is one of the call-to-action button variants."]}]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"v308--sms-segmentation--billing-guidance","__idx":26},"children":["v3.0.8 — SMS Segmentation + Billing Guidance"]},{"$$mdtype":"Tag","name":"blockquote","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Released May 2026"]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"documentation-in-v308","__idx":27},"children":["Documentation in v3.0.8"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Segments and billing section in the SMS Messaging guide"]}," — new section explaining how SMS messages over 160 characters are automatically split into 153-character segments, each billed as a separate SMS. Includes a length-to-cost lookup table covering 1–918 GSM 7-bit characters (1–6 segments) and a parallel table for Unicode (UCS-2) covering 1–268 characters (1–4 segments)."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Boundary-crossing warning"]}," — guide now flags that a 161-character message costs 2 SMS (not 1), and that a single curly quote, em dash, or emoji forces the entire message onto Unicode encoding (e.g. a 161-character \"English\" message with one ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["—"]}," becomes a 3-SMS Unicode send instead of a 2-SMS GSM send)."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Client-side length calculation guidance"]}," — guide reiterates that the platform does not pre-flight cost and clients should measure the message length before sending if they need to predict the SMS charge."]}]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"v307--chatbot-webhook-v2-payload","__idx":28},"children":["v3.0.7 — Chatbot Webhook v2 Payload"]},{"$$mdtype":"Tag","name":"blockquote","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Released May 2026"]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"added-in-v307","__idx":29},"children":["Added in v3.0.7"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["chatbotPayloadVersion"]}," field on ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["WhatsAppClientWebHook"]}]}," — per-webhook switch between the existing flat chatbot payload (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["v1"]},", default) and the new enriched payload (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["v2"]},"). Defaults to ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["v1"]}," when omitted; existing integrations are unaffected."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["v2"]}," chatbot webhook payload"]}," — strict superset of ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["v1"]},". Adds the nested ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["chatParticipant"]}," object (full chat participant record, with the currently assigned agent nested as ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["chatParticipant.assignedTo"]},") plus three flat team fields: ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["teamId"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["teamName"]},", and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["routedToAnotherTeam"]},". ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["routedToAnotherTeam"]}," is emitted on assignment events and is ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["true"]}," when the assignment moved the chat to a different team than its previous assignment. Receivers can render the conversation lifecycle without a follow-up ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["GET /ChatParticipant/{id}"]}," call."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Per-webhook scope"]}," — payload version is set independently on the client default and on each per-number override, so different numbers can run on different versions during migration."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Security guidance for ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["v2"]}]}," — Webhooks guide now flags that ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["chatParticipant.assignedTo"]}," carries credential fields (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["password"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["apiKey"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["loginToken"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["passwordResetKey"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["emailVerificationKey"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["applicationKey"]},"). Treat receiving endpoints as a sensitive credential store; TLS-only, restrict log retention, rotate on compromise. Stay on ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["v1"]}," if you only need agent identity (id/name/role)."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"changed-in-v307","__idx":30},"children":["Changed in v3.0.7"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["POST"]}," / ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["PUT /payless4messaging-service/WhatsApp/WhatsAppClientWebHook"]}]}," — request body accepts the optional ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["chatbotPayloadVersion"]}," field (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["\"v1\""]}," or ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["\"v2\""]},"). Send ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["\"v2\""]}," to opt that webhook into the enriched payload; reversible at any time with another ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["PUT"]},"."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"deprecated-in-v307","__idx":31},"children":["Deprecated in v3.0.7"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Chatbot webhook payload ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["v1"]}]}," — Webhooks guide now flags ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["v1"]}," as on the deprecation path. The default ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["chatbotPayloadVersion"]}," will switch from ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["v1"]}," to ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["v2"]},", and the field itself will be removed once the migration completes. New integrations should set ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["\"v2\""]}," explicitly to avoid breaking when the default flips."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"documentation-in-v307","__idx":32},"children":["Documentation in v3.0.7"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Replying from a ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["v2"]}," chatbot webhook"]}," — Webhooks guide now explains that the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["v2"]}," payload carries everything the live-chat send endpoints need, so a real-time reply takes a single API call (no follow-up ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["GET"]},"). Added inline links to ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"https://ecommunicate-api-docs.redocly.app/apis/omnichannel/live-chat/sendagentmessagewhatsapp"},"children":["Send WhatsApp agent reply"]}," for text and ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"https://ecommunicate-api-docs.redocly.app/apis/omnichannel/live-chat/sendagentmessagewithattachment"},"children":["Send agent reply with attachment"]}," for media."]}]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"v306--chat-participant-search--openclosed-filter","__idx":33},"children":["v3.0.6 — Chat Participant Search + Open/Closed Filter"]},{"$$mdtype":"Tag","name":"blockquote","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Released May 2026"]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"added-in-v306","__idx":34},"children":["Added in v3.0.6"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["searchString"]}," query parameter on ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["GET /pl4chat-service/ChatParticipant"]}]}," — case-insensitive substring filter applied to the participant's phone number and full name. Partial matches are supported. Omit to return unfiltered results."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["isOpen"]}," query parameter on ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["GET /pl4chat-service/ChatParticipant"]}]}," — tri-state conversation filter. Omit (or send no value) to return all chats. Pass ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["true"]}," to return only open conversations (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["conversationClosed = false"]},"), or ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["false"]}," to return only closed conversations (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["conversationClosed = true"]},"). The filter combines with ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["searchString"]}," so dashboards can drill into \"open chats matching +27\" in a single call."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"changed-in-v306","__idx":35},"children":["Changed in v3.0.6"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["GET /pl4chat-service/ChatParticipant"]}]}," — ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["searchString"]}," is now honored on this endpoint (previously the parameter was accepted but ignored, always returning the unfiltered page). Existing integrations that omitted the parameter continue to behave the same."]}]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"v305--per-number-webhook-overrides","__idx":36},"children":["v3.0.5 — Per-number Webhook Overrides"]},{"$$mdtype":"Tag","name":"blockquote","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Released April 2026"]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"added-in-v305","__idx":37},"children":["Added in v3.0.5"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Per-number webhook scope on ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["WhatsAppClientWebHook"]}]}," — webhook configurations now carry an optional ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["whatsAppNumberId"]},". When ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["null"]}," the row is the ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["client default"]}," (today's behavior, applied to every WhatsApp number under your client). When set to one of your ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["WhatsAppNumbers.id"]}," values, the row is a ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["per-number override"]}," applied only to events tied to that specific number. At dispatch time the platform looks up an override for the event's WhatsApp number first and falls back to the default when none exists."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["whatsAppNumberMsisdn"]}," on ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["WhatsAppClientWebHook"]}," responses"]}," — read-only convenience field that surfaces the MSISDN of the number a per-number override applies to. ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["null"]}," for the client default."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["GET /payless4messaging-service/WhatsApp/WhatsAppClientWebHook/list"]}]}," — paginated list of every webhook configuration belonging to the authenticated user's client (default + per-number overrides). Supports ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["page"]}," and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["size"]}," query params; the default sorts first, overrides follow ordered by MSISDN."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Service-layer scope guards"]}," — only one default per client and one override per ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["(client, number)"]}," pair are allowed; duplicates return ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["409 Conflict"]},". The ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["whatsAppNumberId"]}," supplied on create must belong to the caller's client; cross-tenant ids return ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["403 Forbidden"]},"."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Architecture section in the Webhooks guide"]}," — Mermaid diagram illustrating the end-to-end message flow between Customer, API Service, Chat Service, and your server. Includes a path-to-endpoint reference table covering notification messages from your server to the API Service (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["/whatsapp-api-service/v2/channels/whatsapp"]},"), live chat messages from your server to the Chat Service (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["/pl4chat-service/Message/sendMessageWhatsapp"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["/pl4chat-service/Message/sendMessageWithAttachment"]},"), and the webhook URLs configured on ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["WhatsAppClientWebHook"]},"."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Webhook create/update example dropdowns"]}," — ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["POST"]}," and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["PUT /payless4messaging-service/WhatsApp/WhatsAppClientWebHook"]}," request bodies now ship multiple keyed examples (rendered as a dropdown in the API reference) instead of a single inline example. ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["POST"]}," covers Client Default (All Webhooks), Per-Number Override, Incoming Messages Only, Status Updates Only, Chatbot — Auto-Stop on Handover, Chatbot — Always On (Incoming Only), and WhatsApp Lite (with Session Status). ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["PUT"]}," covers Update All URLs, Disable a Webhook Type (empty-string clearing), and Toggle Chatbot Flags."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["whatsAppNumberId"]}," lookup hint"]}," — the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["whatsAppNumberId"]}," field description in the create-webhook schema, the Per-Number Override example description, and the Webhooks guide now point to ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["GET /payless4messaging-service/WhatsApp/WhatsAppClientNumbers/getForCurrentLoginUser?searchString=…"]}," for fetching the id with a partial-MSISDN search. The guidance is explicit that the value to send is the ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["nested"]}," ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["whatsAppNumber.id"]}," (the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["WhatsAppNumbers"]}," UUID) on each ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["WhatsAppClientNumberResponse"]}," row, not the top-level ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["id"]}," (which is the client–number link)."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"changed-in-v305","__idx":38},"children":["Changed in v3.0.5"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["POST /payless4messaging-service/WhatsApp/WhatsAppClientWebHook"]}]}," — request body accepts an optional ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["whatsAppNumberId"]}," to create a per-number override instead of the client default."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["PUT /payless4messaging-service/WhatsApp/WhatsAppClientWebHook"]}]}," — scope is locked once a row exists; ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["whatsAppNumberId"]}," on the request body is ignored. To convert a default into an override (or vice-versa), ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["DELETE"]}," and recreate."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["GET /payless4messaging-service/WhatsApp/WhatsAppClientWebHook/getForCurrentLoginUser"]}]}," — now returns only the ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["client default"]}," (rows where ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["whatsAppNumberId IS NULL"]},"). Use the new ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["/list"]}," endpoint to also retrieve per-number overrides."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"breaking-changes-in-v305","__idx":39},"children":["Breaking changes in v3.0.5"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["DELETE /payless4messaging-service/WhatsApp/WhatsAppClientWebHook"]}," is now path-based."]}," The endpoint moves from a request-body shape to ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["DELETE /payless4messaging-service/WhatsApp/WhatsAppClientWebHook/{id}"]},". Update integrations that previously sent the configuration in the request body to put the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["id"]}," in the URL instead."]}]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"v304--chatbot-conversation-webhook","__idx":40},"children":["v3.0.4 — Chatbot Conversation Webhook"]},{"$$mdtype":"Tag","name":"blockquote","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Released April 2026"]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"added-in-v304","__idx":41},"children":["Added in v3.0.4"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["chatbotWebhookURL"]}," on ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["WhatsAppClientWebHook"]}]}," — new client-configurable webhook URL that emits chatbot conversation events with full chat participant context (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["chatParticipantId"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["conversationStatus"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["conversationClosed"]},", currently and previously assigned agent ids and names). Coexists with ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["incomingMessageURL"]},"; both fire independently when a customer message arrives."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["chatbotIncludeOutgoing"]}," flag"]}," — opt-in boolean (default ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["false"]},") on ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["WhatsAppClientWebHook"]},". When ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["true"]},", also emit ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["OUTGOING"]}," events for bot widget replies (text, button, list, media emitted by flow nodes). Template / notification sends remain on ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["statusUpdateURL"]},"."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["chatbotStopOnAgentAssignment"]}," flag"]}," — opt-in boolean (default ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["false"]},"). When ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["true"]},", suppress chatbot webhook emit while the chat participant has an assigned agent."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["ECommChatbotWebHook"]}," payload"]}," — server-generated ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["eventId"]}," (UUID) for receiver-side idempotency, ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["direction"]}," (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["INCOMING"]}," / ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["OUTGOING"]},"), participant context, agent context, and message details (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["messageId"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["ctId"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["messageType"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["messageText"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["mediaUrl"]},", sender/receiver MSISDNs)."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Chatbot conversation payload section"]}," — added to the Webhooks guide with incoming / outgoing / post-handover example payloads, gating-flag table, coexistence note with ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["incomingMessageURL"]},", and Node.js / Python / Java handler examples."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"changed-in-v304","__idx":42},"children":["Changed in v3.0.4"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["POST"]}," and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["PUT /payless4messaging-service/WhatsApp/WhatsAppClientWebHook"]}]}," — request/response examples and schema descriptions updated to include ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["chatbotWebhookURL"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["chatbotIncludeOutgoing"]},", and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["chatbotStopOnAgentAssignment"]},"."]}]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"v303--register-whatsapp-lite-wl-number","__idx":43},"children":["v3.0.3 — Register WhatsApp Lite (WL) Number"]},{"$$mdtype":"Tag","name":"blockquote","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Released April 2026"]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"added-in-v303","__idx":44},"children":["Added in v3.0.3"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["POST /payless4messaging-service/WhatsApp/WhatsAppClientNumbers/registerWLNumber"]}]}," — register a WhatsApp Lite number and link it to the authenticated user's client. Request body accepts ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["number"]}," (required) and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["hostingType"]}," (defaults to ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["WHATSAPP_GO"]},"). Provider is set to ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["WL"]}," and billing model to ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["message"]},". Returns the linked ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["WhatsAppClientNumbers"]}," record on ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["201 Created"]},"; returns ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["400 Bad Request"]}," when the number is missing or already registered to the caller's client."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["RegisterWLNumberRequest"]}," schema"]}," — added to the OpenAPI spec."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"fixed-in-v303","__idx":45},"children":["Fixed in v3.0.3"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["PUT /pl4chat-service/ChatParticipant/terminateChatParticipantChat"]}]}," — request body example now shows the full ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["ChatParticipant"]}," payload rather than a partial set of fields. Description now explains the merge semantics: omitting ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["assignedTo"]}," clears the agent assignment, and omitting any of the boolean flags (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["conversationClosed"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["missedConversation"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["afterHoursConversation"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["sendRatingWidget"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["chatBotConversation"]},") resets them to ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["false"]},". Recommended practice is to fetch the participant first and echo the complete object back with ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["conversationClosed"]}," toggled."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["PUT /payless4messaging-service/WhatsApp/SystemUsers"]}]}," — description rewritten: removed the incorrect claim that the endpoint updates assigned WhatsApp numbers (it does not), clarified that reference-typed fields are partial-merge safe, and lists the 14 Java primitive boolean fields that still reset to ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["false"]}," if omitted. Notes that the user is looked up by ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["email"]}," + ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["client.clientRef"]}," and that ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["role"]}," is always force-set to ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["\"client\""]}," server-side."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["PUT /payless4messaging-service/WhatsApp/api/v1/groups/{id}"]}]}," — added an ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Important"]}," callout noting this is a true full-entity save (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["saveAndFlush"]}," with no merge), so omitted fields will be persisted as ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["null"]},". Recommends fetching the group first with the matching ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["GET"]}," and sending the complete object back."]}]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"v302--chat-participant-pagination","__idx":46},"children":["v3.0.2 — Chat Participant Pagination"]},{"$$mdtype":"Tag","name":"blockquote","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Released April 2026"]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"added-in-v302","__idx":47},"children":["Added in v3.0.2"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Pagination on ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["GET /pl4chat-service/ChatParticipant"]}]}," — the default chat participant endpoint now accepts ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["page"]}," (zero-based, default ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["0"]},") and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["size"]}," (default ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["10"]},") query parameters. Example: ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["GET /pl4chat-service/ChatParticipant?page=0&size=10"]},". Live Chat guide examples (cURL, Node.js, Python, Java) updated to use the new parameters."]}]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"v301--live-chat-documentation","__idx":48},"children":["v3.0.1 — Live Chat Documentation"]},{"$$mdtype":"Tag","name":"blockquote","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Released April 2026"]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"added-in-v301","__idx":49},"children":["Added in v3.0.1"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Chatbot conversation flow guide"]}," — three-step walkthrough for chatbot integrations: receive webhook, look up chat participant by sender number, and retrieve full message history including tracking number and mark-as-read alternatives."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Endpoint selection table"]}," — choose from all, assigned, unassigned, closed, missed, or after-hours participant endpoints with ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["searchString"]}," filtering."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Cross-references to chatbot flow"]}," — added links from the Conversations guide and the Live Chat API reference to the chatbot conversation flow guide."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Code examples for chat endpoints"]}," — cURL, Node.js, Python, and Java examples for ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["ChatParticipant"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["getMessagesByChatParticipant"]},", and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["Message/trackingNumber"]},"."]}]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"v300--omnichannel-integration-api","__idx":50},"children":["v3.0.0 — Omnichannel Integration API"]},{"$$mdtype":"Tag","name":"blockquote","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Released January 2026"]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["A major release introducing the unified messaging endpoint, dedicated channel endpoints, and comprehensive platform management capabilities."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"added-in-v300","__idx":51},"children":["Added in v3.0.0"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Unified messaging endpoint"]}," (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["POST /v2/messages"]},") — single endpoint that routes to WhatsApp or SMS based on the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["channel"]}," field."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Dedicated channel endpoints"]}," — ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["POST /v2/channels/whatsapp"]}," and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["POST /v2/channels/sms"]}," for channel-specific integrations."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Typing indicator"]}," — show a typing bubble before sending messages via WhatsApp."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Carousel templates"]}," — multi-card scrollable template component type."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Call to Action templates"]}," — interactive button templates with ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["conversationState"]}," tracking."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Batch execution control"]}," — pause, resume, and cancel batch message jobs."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Message processing configuration"]}," — daily send schedules, throttling, and batch size controls per number."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Contact management"]}," — full CRUD operations for customer contact records."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Block & blacklist management"]}," — block/unblock numbers and manage blacklists via API."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Ticket management"]}," — support tickets with status workflows (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["OPEN"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["AWAITING_AGENT"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["AWAITING_CUSTOMER"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["RESOLVED"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["CLOSED"]},")."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Report downloads"]}," — export notification, interaction, and MAU reports as XLSX or CSV."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"improved-in-v300","__idx":52},"children":["Improved in v3.0.0"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["SMS fallback"]}," — now supports custom fallback text and per-message encoding options (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["unicode"]}," field)."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Template management"]}," — expanded to 11 template types including authentication, flow, and carousel templates."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Message status tracking"]}," — enhanced delivery reports with detailed failure codes and reasons."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Error responses"]}," — standardized error format with ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["requestId"]}," for all endpoints."]}]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"v210--conversations-api","__idx":53},"children":["v2.1.0 — Conversations API"]},{"$$mdtype":"Tag","name":"blockquote","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Released November 2025"]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Introduces persistent WhatsApp conversations that stay open beyond the standard 24-hour session window."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"added-in-v210","__idx":54},"children":["Added in v2.1.0"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Long-lived conversations"]}," — create WhatsApp conversations that persist for days, weeks, or months until explicitly closed."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Five conversation message types"]}," — Text Only, Text + Media, Call to Action, Card, Quick Reply."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Conversation lifecycle management"]}," — create, send messages, check remaining time, and close conversations via API."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Conversation analytics"]}," — track submitted, sent, delivered, read, and failed counts per conversation."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Quick Reply buttons"]}," — ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["conversationState"]}," parameter controls whether buttons keep the conversation open (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["start"]},") or close it (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["end"]},")."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Conversation listing"]}," — list conversations by user or client reference with pagination."]}]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"api-versioning","__idx":55},"children":["API versioning"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The eCommunicate API uses URL path versioning (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["/v2/"]},"). When breaking changes are introduced, a new version path is created. Previous versions continue to function during the deprecation period."]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Version"},"children":["Version"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Status"},"children":["Status"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Base path"},"children":["Base path"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["v2"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Current"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["/whatsapp-api-service/v2/"]}]}]}]}]}]},{"$$mdtype":"Tag","name":"Admonition","attributes":{"type":"info","name":"Stay updated"},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Subscribe to release notifications by contacting ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"mailto:support@ecommunicate.co.za"},"children":["support@ecommunicate.co.za"]},". We announce breaking changes at least 90 days in advance."]}]}]},"headings":[{"value":"Changelog","id":"changelog","depth":1},{"value":"Releases at a glance","id":"releases-at-a-glance","depth":2},{"value":"v3.0.19 — Voice-note PLAYED status & more BSUID surfaces","id":"v3019--voice-note-played-status--more-bsuid-surfaces","depth":2},{"value":"Added in v3.0.19","id":"added-in-v3019","depth":3},{"value":"v3.0.18 — Alpha usernames (BSUID) on webhooks","id":"v3018--alpha-usernames-bsuid-on-webhooks","depth":2},{"value":"Added in v3.0.18","id":"added-in-v3018","depth":3},{"value":"v3.0.17 — UserResponse fields & migration guide","id":"v3017--userresponse-fields--migration-guide","depth":2},{"value":"Added in v3.0.17","id":"added-in-v3017","depth":3},{"value":"v3.0.15 — User Management v1","id":"v3015--user-management-v1","depth":2},{"value":"Added in v3.0.15","id":"added-in-v3015","depth":3},{"value":"Deprecated in v3.0.15","id":"deprecated-in-v3015","depth":3},{"value":"v3.0.14 — Live Chat v2 Message Fields","id":"v3014--live-chat-v2-message-fields","depth":2},{"value":"Added in v3.0.14","id":"added-in-v3014","depth":3},{"value":"Changed in v3.0.14","id":"changed-in-v3014","depth":3},{"value":"v3.0.13 — Chatbot Webhook v2 Slimmed","id":"v3013--chatbot-webhook-v2-slimmed","depth":2},{"value":"Removed in v3.0.13","id":"removed-in-v3013","depth":3},{"value":"v3.0.12 — Live Chat v2 Endpoints","id":"v3012--live-chat-v2-endpoints","depth":2},{"value":"Added in v3.0.12","id":"added-in-v3012","depth":3},{"value":"Deprecated in v3.0.12","id":"deprecated-in-v3012","depth":3},{"value":"v3.0.11 — Chatbot Webhook v2 Quoted-Reply Fields","id":"v3011--chatbot-webhook-v2-quoted-reply-fields","depth":2},{"value":"Added in v3.0.11","id":"added-in-v3011","depth":3},{"value":"Documentation in v3.0.11","id":"documentation-in-v3011","depth":3},{"value":"v3.0.10 — Recipient Number Format Documented","id":"v3010--recipient-number-format-documented","depth":2},{"value":"Documentation in v3.0.10","id":"documentation-in-v3010","depth":3},{"value":"v3.0.9 — Call-to-Action Terminology Clarified","id":"v309--call-to-action-terminology-clarified","depth":2},{"value":"Documentation in v3.0.9","id":"documentation-in-v309","depth":3},{"value":"v3.0.8 — SMS Segmentation + Billing Guidance","id":"v308--sms-segmentation--billing-guidance","depth":2},{"value":"Documentation in v3.0.8","id":"documentation-in-v308","depth":3},{"value":"v3.0.7 — Chatbot Webhook v2 Payload","id":"v307--chatbot-webhook-v2-payload","depth":2},{"value":"Added in v3.0.7","id":"added-in-v307","depth":3},{"value":"Changed in v3.0.7","id":"changed-in-v307","depth":3},{"value":"Deprecated in v3.0.7","id":"deprecated-in-v307","depth":3},{"value":"Documentation in v3.0.7","id":"documentation-in-v307","depth":3},{"value":"v3.0.6 — Chat Participant Search + Open/Closed Filter","id":"v306--chat-participant-search--openclosed-filter","depth":2},{"value":"Added in v3.0.6","id":"added-in-v306","depth":3},{"value":"Changed in v3.0.6","id":"changed-in-v306","depth":3},{"value":"v3.0.5 — Per-number Webhook Overrides","id":"v305--per-number-webhook-overrides","depth":2},{"value":"Added in v3.0.5","id":"added-in-v305","depth":3},{"value":"Changed in v3.0.5","id":"changed-in-v305","depth":3},{"value":"Breaking changes in v3.0.5","id":"breaking-changes-in-v305","depth":3},{"value":"v3.0.4 — Chatbot Conversation Webhook","id":"v304--chatbot-conversation-webhook","depth":2},{"value":"Added in v3.0.4","id":"added-in-v304","depth":3},{"value":"Changed in v3.0.4","id":"changed-in-v304","depth":3},{"value":"v3.0.3 — Register WhatsApp Lite (WL) Number","id":"v303--register-whatsapp-lite-wl-number","depth":2},{"value":"Added in v3.0.3","id":"added-in-v303","depth":3},{"value":"Fixed in v3.0.3","id":"fixed-in-v303","depth":3},{"value":"v3.0.2 — Chat Participant Pagination","id":"v302--chat-participant-pagination","depth":2},{"value":"Added in v3.0.2","id":"added-in-v302","depth":3},{"value":"v3.0.1 — Live Chat Documentation","id":"v301--live-chat-documentation","depth":2},{"value":"Added in v3.0.1","id":"added-in-v301","depth":3},{"value":"v3.0.0 — Omnichannel Integration API","id":"v300--omnichannel-integration-api","depth":2},{"value":"Added in v3.0.0","id":"added-in-v300","depth":3},{"value":"Improved in v3.0.0","id":"improved-in-v300","depth":3},{"value":"v2.1.0 — Conversations API","id":"v210--conversations-api","depth":2},{"value":"Added in v2.1.0","id":"added-in-v210","depth":3},{"value":"API versioning","id":"api-versioning","depth":2}],"frontmatter":{"title":"Changelog","description":"Release history for the eCommunicate Omnichannel API platform.","seo":{"title":"Changelog"}},"lastModified":"2026-07-16T09:46:36.000Z","pagePropGetterError":{"message":"","name":""}},"slug":"/changelog","userData":{"isAuthenticated":false,"teams":["anonymous"]},"isPublic":true}