All notable changes to the eCommunicate Omnichannel API. This changelog follows Semantic Versioning.
| Version | Released | Highlights |
|---|---|---|
v3.0.19 | July 2026 | PLAYED voice-note status; BSUID on send + chat participant |
v3.0.18 | July 2026 | Alpha usernames (BSUID) on incoming & chatbot webhooks |
v3.0.17 | June 2026 | UserResponse client/status fields + migration guide |
v3.0.16 | June 2026 | Delete a user (soft-delete) via /api/v1/users/{id} |
v3.0.15 | June 2026 | User Management v1 endpoints + credential-free DTOs |
v3.0.14 | June 2026 | Live Chat v2 message fields + optional tempId |
v3.0.13 | June 2026 | Chatbot webhook v2: removed nested chatParticipant |
v3.0.12 | June 2026 | Live Chat v2 endpoints + v1 deprecations |
v3.0.11 | June 2026 | Chatbot webhook v2: quoted/reply message fields |
v3.0.10 | June 2026 | Recipient number format (international, no leading 0) |
v3.0.9 | June 2026 | Clarify call-to-action (CTA) as an umbrella term |
v3.0.8 | May 2026 | SMS segmentation + billing guidance |
v3.0.7 | May 2026 | Chatbot webhook v2 payload (full agent + chat participant) |
v3.0.6 | May 2026 | Chat participant search + open/closed filter |
v3.0.5 | April 2026 | Per-number webhook overrides |
v3.0.4 | April 2026 | Chatbot conversation webhook |
v3.0.3 | April 2026 | Register WhatsApp Lite number |
v3.0.2 | April 2026 | Chat participant pagination |
v3.0.1 | April 2026 | Chatbot conversation flow guide |
v3.0.0 | January 2026 | Omnichannel integration API |
v2.1.0 | November 2025 | Long-lived WhatsApp conversations |
Released July 2026
- New
PLAYEDmessage status for voice notes. When a recipient listens to a voice note (voice/PTT message), the status update webhook now fires withstatus: "PLAYED"and aplayedTime.PLAYEDfollowsREADin the lifecycle and applies only to voice notes. Added to the status enums (latestMessageStatus,eCommValidationMessage) and the v2MessageResponsegainsplayed/playedTime. - BSUID on the send request. Each recipient on
POST /v2/messages/POST /v2/channels/whatsapp(Omnichannel) andPOST /v2/json(Conversations) now acceptscustomerUserId(the recipient's BSUID). Supply it alongsideto(the phone takes precedence, the BSUID rides along as a durable fallback) or on its own to address a recipient that has no phone number. A malformed BSUID is ignored. - BSUID on the chat participant. The
ChatParticipantschema documentsuserId(BSUID),username, andparentUserId, and the lean v2ChatParticipantResponsenow carriesuserIdandusername— fields already returned by the participant and chat endpoints.
Released July 2026
- Incoming message webhooks now carry the customer's alpha username fields.
senderUserId(the durable business-scoped user id / BSUID, e.g.ZA.1021033720668862) andusername(optional display username) are added to the 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. - Chatbot webhook
v2addssenderUserId/recipientUserId/username. OnINCOMINGevents the customer's BSUID is insenderUserId; onOUTGOINGevents it is inrecipientUserId. See thev2field reference. Available on thev2payload only.
Released June 2026
UserResponsenow documents the user's client context and account status. AddedclientId,countryTimezone, andpopiaComplianceEnabled(inherited from the client), plusresetPasswordEmailSent,emailVerified,tempPasswordValid, andvalidToken.- User Management v1 migration guide. The Migrations & Deprecations page now maps every deprecated
/SystemUsers/*endpoint to its credential-free/api/v1/usersreplacement.
Released June 2026
- New credential-free User Management endpoints under
/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 (UserResponse,CreateUserResponse,UpdateUserRequest,CreateUserRequest) that never include password, apiKey, or token fields. - Creating a user returns a one-time temporary password. A user is created without a caller-supplied password; the response carries a single-use
temporaryPasswordto share securely, and the user must set their own password on first login.
- All legacy
/SystemUsers/*user endpoints are deprecated in favour of their/api/v1/usersequivalents (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-bearingSystemUserobjects and will be removed in a future release.
Released June 2026
- New fields on the v2
MessageResponse:senderandreceiver(the message's from/to addresses),ctId(the custom tracking id, when one was supplied on send),fileExtension(extension of attached media), andfacebookMessageId(the Facebook provider message id, alongside the existingwhatsAppMessageId). All are omitted when null.
tempIdon 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.)
Released June 2026
- Nested
chatParticipantobject dropped from thev2chatbot webhook payload. It was redundant — agent identity and conversation lifecycle are already on the flat fields (assignedAgentId,assignedAgentName,lastAssignedAgentId,lastAssignedAgentName,conversationStatus,conversationClosed, …) — and it shipped the fullSystemUser(including credential fields) insidechatParticipant.assignedTo. The v2 payload is now the flat fields plusteamId/teamName/routedToAnotherTeamand the quoted-reply fields. No credentials are sent. The corresponding security warning has been removed from the Webhooks guide. - Why it's safe to drop: the v2 send flow no longer needs the full object — reply with a single call to Send an agent message (v2) using just the
chatParticipantIdfrom the payload.
Breaking for receivers that read
chatParticipant.*. Switch to the flatassignedAgent*/conversation*fields (same values, same top-level payload).
Released June 2026
- Lean v2 live-chat endpoints under
/pl4chat-service/api/v2:GET /api/v2/messages— messages for a participant as a curatedMessageResponse(incl. quoted-reply fields).POST /api/v2/messages— single agent send for all channels, routed by achannelfield (WHATSAPP/WEB/FACEBOOK).POST /api/v2/messages/media— channel-agnostic media upload returning amediaUrlto send.POST /api/v2/messages/typingandPOST /api/v2/messages/read— typing indicator and mark-conversation-read, keyed byparticipantId.GET /api/v2/messages/tracking/{trackingNumber}andGET /api/v2/messages/ctid/{ctId}— message lookups returning leanMessageResponse(tenant-scoped).GET /api/v2/chats— paginated chat list selected by ascopefilter, returningChatParticipantResponse.GET /api/v2/chats/{id},POST /api/v2/chats/{id}/terminate,POST /api/v2/chats/{id}/open— fetch / close / reopen a chat by id (actor resolved from the session).
- Migration guide — new Migrations & Deprecations page mapping each deprecated v1 endpoint to its v2 replacement.
- Marked
deprecated(all remain fully functional — no removal date):getMessagesByChatParticipant,sendAgentMessageWhatsapp,sendAgentMessageWithAttachment,sendChatTypingIndicator,markReadByAgent,getChatParticipantsand the per-tab lists (getMyParticipants,getTeamParticipants,getUnAssignedParticipants,getClosedParticipants,getMissedParticipants,getMissedAfterHoursParticipants,getMyMissedParticipants),getParticipantsByAssignedTo,terminateChatParticipantChat, andgetChatMessagesByTrackingNumber. New integrations should use the v2 endpoints above — see the migration guide.
Released June 2026
quotedMessageIdandquotedTexton thev2chatbot webhook payload — when a customer replies by quoting an earlier message (WhatsApp's reply-to feature),INCOMINGevents now include the quoted message's WhatsApp id (quotedMessageId) and a text snapshot (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.
- 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.
Released June 2026
- International recipient format on WhatsApp sends — the
tofield on send-message recipients now carries an E.164-style validation pattern (^\+?[1-9][0-9]{6,14}$) and a description requiring the country code plus subscriber number, with an optional leading+. Numbers in local format starting with0are explicitly invalid — e.g. South Africa must be+27821234567or27821234567, never0821234567. The rule is country-agnostic: the leading digit after the optional+must be1–9, so any country code is accepted. - Send endpoint guidance — the unified send (
POST /v2/messages) and Send WhatsApp messages (POST /v2/channels/whatsapp) endpoint descriptions now state the recipient number format rule.
Released June 2026
- "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
CTA — …heading. - Renamed the mislabeled create example — the
createTemplateexample 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. - 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.
Released May 2026
- 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).
- 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
—becomes a 3-SMS Unicode send instead of a 2-SMS GSM send). - 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.
Released May 2026
chatbotPayloadVersionfield onWhatsAppClientWebHook— per-webhook switch between the existing flat chatbot payload (v1, default) and the new enriched payload (v2). Defaults tov1when omitted; existing integrations are unaffected.v2chatbot webhook payload — strict superset ofv1. Adds the nestedchatParticipantobject (full chat participant record, with the currently assigned agent nested aschatParticipant.assignedTo) plus three flat team fields:teamId,teamName, androutedToAnotherTeam.routedToAnotherTeamis emitted on assignment events and istruewhen the assignment moved the chat to a different team than its previous assignment. Receivers can render the conversation lifecycle without a follow-upGET /ChatParticipant/{id}call.- 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.
- Security guidance for
v2— Webhooks guide now flags thatchatParticipant.assignedTocarries credential fields (password,apiKey,loginToken,passwordResetKey,emailVerificationKey,applicationKey). Treat receiving endpoints as a sensitive credential store; TLS-only, restrict log retention, rotate on compromise. Stay onv1if you only need agent identity (id/name/role).
POST/PUT /payless4messaging-service/WhatsApp/WhatsAppClientWebHook— request body accepts the optionalchatbotPayloadVersionfield ("v1"or"v2"). Send"v2"to opt that webhook into the enriched payload; reversible at any time with anotherPUT.
- Chatbot webhook payload
v1— Webhooks guide now flagsv1as on the deprecation path. The defaultchatbotPayloadVersionwill switch fromv1tov2, and the field itself will be removed once the migration completes. New integrations should set"v2"explicitly to avoid breaking when the default flips.
- Replying from a
v2chatbot webhook — Webhooks guide now explains that thev2payload carries everything the live-chat send endpoints need, so a real-time reply takes a single API call (no follow-upGET). Added inline links to Send WhatsApp agent reply for text and Send agent reply with attachment for media.
Released May 2026
searchStringquery parameter onGET /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.isOpenquery parameter onGET /pl4chat-service/ChatParticipant— tri-state conversation filter. Omit (or send no value) to return all chats. Passtrueto return only open conversations (conversationClosed = false), orfalseto return only closed conversations (conversationClosed = true). The filter combines withsearchStringso dashboards can drill into "open chats matching +27" in a single call.
GET /pl4chat-service/ChatParticipant—searchStringis 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.
Released April 2026
- Per-number webhook scope on
WhatsAppClientWebHook— webhook configurations now carry an optionalwhatsAppNumberId. Whennullthe row is the client default (today's behavior, applied to every WhatsApp number under your client). When set to one of yourWhatsAppNumbers.idvalues, the row is a 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. whatsAppNumberMsisdnonWhatsAppClientWebHookresponses — read-only convenience field that surfaces the MSISDN of the number a per-number override applies to.nullfor the client default.GET /payless4messaging-service/WhatsApp/WhatsAppClientWebHook/list— paginated list of every webhook configuration belonging to the authenticated user's client (default + per-number overrides). Supportspageandsizequery params; the default sorts first, overrides follow ordered by MSISDN.- Service-layer scope guards — only one default per client and one override per
(client, number)pair are allowed; duplicates return409 Conflict. ThewhatsAppNumberIdsupplied on create must belong to the caller's client; cross-tenant ids return403 Forbidden. - 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 (
/whatsapp-api-service/v2/channels/whatsapp), live chat messages from your server to the Chat Service (/pl4chat-service/Message/sendMessageWhatsapp,/pl4chat-service/Message/sendMessageWithAttachment), and the webhook URLs configured onWhatsAppClientWebHook. - Webhook create/update example dropdowns —
POSTandPUT /payless4messaging-service/WhatsApp/WhatsAppClientWebHookrequest bodies now ship multiple keyed examples (rendered as a dropdown in the API reference) instead of a single inline example.POSTcovers 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).PUTcovers Update All URLs, Disable a Webhook Type (empty-string clearing), and Toggle Chatbot Flags. whatsAppNumberIdlookup hint — thewhatsAppNumberIdfield description in the create-webhook schema, the Per-Number Override example description, and the Webhooks guide now point toGET /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 nestedwhatsAppNumber.id(theWhatsAppNumbersUUID) on eachWhatsAppClientNumberResponserow, not the top-levelid(which is the client–number link).
POST /payless4messaging-service/WhatsApp/WhatsAppClientWebHook— request body accepts an optionalwhatsAppNumberIdto create a per-number override instead of the client default.PUT /payless4messaging-service/WhatsApp/WhatsAppClientWebHook— scope is locked once a row exists;whatsAppNumberIdon the request body is ignored. To convert a default into an override (or vice-versa),DELETEand recreate.GET /payless4messaging-service/WhatsApp/WhatsAppClientWebHook/getForCurrentLoginUser— now returns only the client default (rows wherewhatsAppNumberId IS NULL). Use the new/listendpoint to also retrieve per-number overrides.
DELETE /payless4messaging-service/WhatsApp/WhatsAppClientWebHookis now path-based. The endpoint moves from a request-body shape toDELETE /payless4messaging-service/WhatsApp/WhatsAppClientWebHook/{id}. Update integrations that previously sent the configuration in the request body to put theidin the URL instead.
Released April 2026
chatbotWebhookURLonWhatsAppClientWebHook— new client-configurable webhook URL that emits chatbot conversation events with full chat participant context (chatParticipantId,conversationStatus,conversationClosed, currently and previously assigned agent ids and names). Coexists withincomingMessageURL; both fire independently when a customer message arrives.chatbotIncludeOutgoingflag — opt-in boolean (defaultfalse) onWhatsAppClientWebHook. Whentrue, also emitOUTGOINGevents for bot widget replies (text, button, list, media emitted by flow nodes). Template / notification sends remain onstatusUpdateURL.chatbotStopOnAgentAssignmentflag — opt-in boolean (defaultfalse). Whentrue, suppress chatbot webhook emit while the chat participant has an assigned agent.ECommChatbotWebHookpayload — server-generatedeventId(UUID) for receiver-side idempotency,direction(INCOMING/OUTGOING), participant context, agent context, and message details (messageId,ctId,messageType,messageText,mediaUrl, sender/receiver MSISDNs).- Chatbot conversation payload section — added to the Webhooks guide with incoming / outgoing / post-handover example payloads, gating-flag table, coexistence note with
incomingMessageURL, and Node.js / Python / Java handler examples.
POSTandPUT /payless4messaging-service/WhatsApp/WhatsAppClientWebHook— request/response examples and schema descriptions updated to includechatbotWebhookURL,chatbotIncludeOutgoing, andchatbotStopOnAgentAssignment.
Released April 2026
POST /payless4messaging-service/WhatsApp/WhatsAppClientNumbers/registerWLNumber— register a WhatsApp Lite number and link it to the authenticated user's client. Request body acceptsnumber(required) andhostingType(defaults toWHATSAPP_GO). Provider is set toWLand billing model tomessage. Returns the linkedWhatsAppClientNumbersrecord on201 Created; returns400 Bad Requestwhen the number is missing or already registered to the caller's client.RegisterWLNumberRequestschema — added to the OpenAPI spec.
PUT /pl4chat-service/ChatParticipant/terminateChatParticipantChat— request body example now shows the fullChatParticipantpayload rather than a partial set of fields. Description now explains the merge semantics: omittingassignedToclears the agent assignment, and omitting any of the boolean flags (conversationClosed,missedConversation,afterHoursConversation,sendRatingWidget,chatBotConversation) resets them tofalse. Recommended practice is to fetch the participant first and echo the complete object back withconversationClosedtoggled.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 tofalseif omitted. Notes that the user is looked up byemail+client.clientRefand thatroleis always force-set to"client"server-side.PUT /payless4messaging-service/WhatsApp/api/v1/groups/{id}— added an Important callout noting this is a true full-entity save (saveAndFlushwith no merge), so omitted fields will be persisted asnull. Recommends fetching the group first with the matchingGETand sending the complete object back.
Released April 2026
- Pagination on
GET /pl4chat-service/ChatParticipant— the default chat participant endpoint now acceptspage(zero-based, default0) andsize(default10) query parameters. Example:GET /pl4chat-service/ChatParticipant?page=0&size=10. Live Chat guide examples (cURL, Node.js, Python, Java) updated to use the new parameters.
Released April 2026
- 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.
- Endpoint selection table — choose from all, assigned, unassigned, closed, missed, or after-hours participant endpoints with
searchStringfiltering. - Cross-references to chatbot flow — added links from the Conversations guide and the Live Chat API reference to the chatbot conversation flow guide.
- Code examples for chat endpoints — cURL, Node.js, Python, and Java examples for
ChatParticipant,getMessagesByChatParticipant, andMessage/trackingNumber.
Released January 2026
A major release introducing the unified messaging endpoint, dedicated channel endpoints, and comprehensive platform management capabilities.
- Unified messaging endpoint (
POST /v2/messages) — single endpoint that routes to WhatsApp or SMS based on thechannelfield. - Dedicated channel endpoints —
POST /v2/channels/whatsappandPOST /v2/channels/smsfor channel-specific integrations. - Typing indicator — show a typing bubble before sending messages via WhatsApp.
- Carousel templates — multi-card scrollable template component type.
- Call to Action templates — interactive button templates with
conversationStatetracking. - Batch execution control — pause, resume, and cancel batch message jobs.
- Message processing configuration — daily send schedules, throttling, and batch size controls per number.
- Contact management — full CRUD operations for customer contact records.
- Block & blacklist management — block/unblock numbers and manage blacklists via API.
- Ticket management — support tickets with status workflows (
OPEN,AWAITING_AGENT,AWAITING_CUSTOMER,RESOLVED,CLOSED). - Report downloads — export notification, interaction, and MAU reports as XLSX or CSV.
- SMS fallback — now supports custom fallback text and per-message encoding options (
unicodefield). - Template management — expanded to 11 template types including authentication, flow, and carousel templates.
- Message status tracking — enhanced delivery reports with detailed failure codes and reasons.
- Error responses — standardized error format with
requestIdfor all endpoints.
Released November 2025
Introduces persistent WhatsApp conversations that stay open beyond the standard 24-hour session window.
- Long-lived conversations — create WhatsApp conversations that persist for days, weeks, or months until explicitly closed.
- Five conversation message types — Text Only, Text + Media, Call to Action, Card, Quick Reply.
- Conversation lifecycle management — create, send messages, check remaining time, and close conversations via API.
- Conversation analytics — track submitted, sent, delivered, read, and failed counts per conversation.
- Quick Reply buttons —
conversationStateparameter controls whether buttons keep the conversation open (start) or close it (end). - Conversation listing — list conversations by user or client reference with pagination.
The eCommunicate API uses URL path versioning (/v2/). When breaking changes are introduced, a new version path is created. Previous versions continue to function during the deprecation period.
| Version | Status | Base path |
|---|---|---|
v2 | Current | /whatsapp-api-service/v2/ |
Subscribe to release notifications by contacting support@ecommunicate.co.za. We announce breaking changes at least 90 days in advance.