Rendered body text.
Get WhatsApp message details
Returns the complete details of a single WhatsApp message, including the rendered message content and the delivery event timeline. Requires an API token with the WhatsApp scope.
Endpoint
get /whatsapp/logs/{message_id}
Request URL
https://cpaas.zoho.com/v1.1/whatsapp/logs/{message_id} Copied!
Request Parameters
- Request Headers
API key of an agent. Send the header as Authorization: Zoho-enczapikey {apiKey}. The agent and account are derived from the key.
- Path Parameters
Unique identifier of the WhatsApp message, as returned by the send API (data.message_id) or the logs API.
Sample Request
curl --request GET \
--url https://cpaas.zoho.com/v1.1/whatsapp/logs/1ba7d8d0-b680-11f1-91b5-d2a30e0412c2 \
--header 'Authorization: REPLACE_KEY_VALUE'Response Parameters
- HTTP code 200
Response Body - application/json
Response containing the details of a single WhatsApp message.
Show Sub-Attributes
A WhatsApp message log entry.
Unique identifier of the message.
Identifier of the send request.
Client reference supplied at send time, if any.
Key of the WhatsApp template used.
Identifier of the sending agent.
Identifier of the WhatsApp channel the message was sent through.
Name of the WhatsApp channel.
WhatsApp Business Account id of the channel.
Sender phone number, with country code.
Recipient phone number, with country code.
Message status (e.g. delivered, read, sent, undelivered, failed, process_failed).
Processing state of the request.
IP address the send request was made from.
When the send request was received (ISO 8601).
Processing time in milliseconds.
Name of the WhatsApp template used.
The message content that was sent, with template variables resolved.
Show Sub-Attributes
Type of the template's media header (e.g. IMAGE), when the template defines one.
Media attachments of the message header, when the template defines a media header.
Show Sub-Attributes
Identifier of the stored file.
Original file name.
MIME type of the file.
File size in bytes.
Chronological delivery events (e.g. processed, sent to meta, delivered, read). Present once the message has entered delivery; absent for messages that failed processing (status process_failed).
Error response wrapper. The top-level code identifies the error class: TM_3201 mandatory field missing (400), TM_3301 bad syntax (400), TM_4001 access denied (401), TM_3601 request denied (403).
Show Sub-Attributes
Show Sub-Attributes
Show Sub-Attributes
A single validation or denial detail inside the error envelope.
Show Sub-Attributes
Detail-level error code, e.g. SERR_110 (required parameter missing), GE_102 (mandatory field missing), WA_103 (invalid template), WSE_107 (sender number belongs to a different agent), SERR_157 (invalid API token).
The field the detail refers to, when applicable (e.g. from, to, template_key | template_alias).
The offending value, when applicable.
Identifier of the failed request, when available.
The same failure information serialized as a JSON string.
- HTTP code 401
Response Body - application/json
Error response wrapper. The top-level code identifies the error class: TM_3201 mandatory field missing (400), TM_3301 bad syntax (400), TM_4001 access denied (401), TM_3601 request denied (403).
Show Sub-Attributes
Show Sub-Attributes
Show Sub-Attributes
A single validation or denial detail inside the error envelope.
Detail-level error code, e.g. SERR_110 (required parameter missing), GE_102 (mandatory field missing), WA_103 (invalid template), WSE_107 (sender number belongs to a different agent), SERR_157 (invalid API token).
The field the detail refers to, when applicable (e.g. from, to, template_key | template_alias).
The offending value, when applicable.
Identifier of the failed request, when available.
- HTTP code 403
Response Body - application/json
Error response wrapper. The top-level code identifies the error class: TM_3201 mandatory field missing (400), TM_3301 bad syntax (400), TM_4001 access denied (401), TM_3601 request denied (403).
Show Sub-Attributes
Show Sub-Attributes
Show Sub-Attributes
A single validation or denial detail inside the error envelope.
Detail-level error code, e.g. SERR_110 (required parameter missing), GE_102 (mandatory field missing), WA_103 (invalid template), WSE_107 (sender number belongs to a different agent), SERR_157 (invalid API token).
The field the detail refers to, when applicable (e.g. from, to, template_key | template_alias).
The offending value, when applicable.
Identifier of the failed request, when available.
Sample Response: HTTP 200
{
"data": {
"message_id": "1ba7d8d0-b680-11f1-91b5-d2a30e0412c2",
"request_id": "1ba7d8d0-b680-11f1-91b5-d2a30e0412c2",
"template_key": "d0109d00-b191-11f1-95b1-aaa8828ce996",
"template_name": "OTP Verification",
"agent_id": "28bc4428feb773",
"channel_id": "21144000000003001",
"channel_name": "Example WhatsApp Channel",
"waba_id": "1102793358413684",
"from": "+14155550142",
"to": "+919876543210",
"status": "delivered",
"process_state": "processed",
"is_batch_request": false,
"content": {
"body_text": "234234 is your verification code. For your security, do not share this code.",
"footer_text": "This code expires in 1 minutes."
},
"events": [
{
"event_name": "processed",
"event_time": "2026-09-22T17:51:16+05:30"
},
{
"event_name": "sent to meta",
"event_time": "2026-09-22T17:51:18+05:30"
},
{
"event_name": "delivered",
"event_time": "2026-09-22T17:51:31+05:30"
}
],
"request_time": "2026-09-22T17:51:16+05:30",
"time_taken": 1112
},
"status": "success"
}
{
"data": {
"message_id": "380d2251-b680-11f1-b0ad-b6d94062a427",
"request_id": "380d2251-b680-11f1-b0ad-b6d94062a427",
"template_key": "d0109d00-b191-11f1-95b1-aaa8828ce996",
"template_name": "OTP Verification",
"agent_id": "28bc4428feb773",
"channel_id": "21144000000003001",
"channel_name": "Example WhatsApp Channel",
"waba_id": "1102793358413684",
"from": "+14155550142",
"to": "+919876543210",
"status": "process_failed",
"process_state": "processed",
"is_batch_request": false,
"remote_ip": "10.61.232.23",
"content": {
"body_text": " is your verification code. For your security, do not share this code.",
"footer_text": "This code expires in 1 minutes."
},
"error_message": {
"error": {
"code": "TM_3201",
"details": [
{
"code": "GE_102",
"message": "Mandatory field found empty",
"target": "code"
}
],
"message": "Mandatory Field missing",
"request_id": "2d6f.14350939.wa1.380d2251-b680-11f1-b0ad-b6d94062a427.1a0c910e8f5"
}
},
"error_msg": "{\"error\": {\"code\": \"TM_3201\", \"details\": [{\"code\": \"GE_102\", \"message\": \"Mandatory field found empty\", \"target\": \"code\"}], \"message\": \"Mandatory Field missing\", \"request_id\": \"2d6f.14350939.wa1.380d2251-b680-11f1-b0ad-b6d94062a427.1a0c910e8f5\"}}",
"request_time": "2026-09-22T17:52:03+05:30",
"time_taken": 456
},
"status": "success"
}
Sample Response: HTTP 401
{
"error": {
"code": "TM_4001",
"details": [
{
"code": "SERR_157",
"message": "Invalid API Token found"
}
],
"message": "Access Denied"
}
}
Sample Response: HTTP 403
{
"error": {
"code": "TM_3601",
"details": [
{
"code": "SERR_120",
"message": "This URL does not exist"
}
],
"message": "Request Denied"
}
}
© 2026, Zoho Corporation Pvt. Ltd. All Rights Reserved.