API Reference
Thirteen endpoints, one job each: text, media (by URL or upload), location, contacts, polls, stickers, reactions, edits, group invites, events, marking messages read, and forwarding. Every request needs an API key — create one in API Keys.
Want to try requests without writing code first? Use the API Playground.
Send your API key on every request as a header:
X-API-Key: YOUR_API_KEY/integrations-user/whatsapp/send-message(no /api prefix)Send a plain text message to a WhatsApp number through one of your connected sessions.
| Field | Type | Required | Description |
|---|---|---|---|
| to | string | REQUIRED | Recipient WhatsApp number, digits only with country code (e.g. "971509876543"). No "+" or leading "00". |
| message | string | REQUIRED | Text content to send. |
| mentions | string[] | OPTIONAL | Group chats only — phone numbers or JIDs to @-mention. No-op in a 1:1 chat. |
| sessionId | number | OPTIONAL | Specific WhatsApp session ID to send from. Takes priority over phoneNumber when both are given. |
| phoneNumber | string | OPTIONAL | Your connected session’s phone number, used to pick which session sends the message when your account has more than one connected. Ignored if sessionId is given. If neither is given, the first connected session is used. |
Hello from the API!
curl -X POST 'https://api.chatpingo.com/integrations-user/whatsapp/send-message' \
-H 'X-API-Key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{ "to": "12025550147", "message": "Hello from the API!", "sessionId": null, "phoneNumber": "447476686841" }'/integrations-user/whatsapp/send-media(no /api prefix)Send media (image, video, document, or audio) to a WhatsApp number through one of your connected sessions, by linking to a publicly reachable URL.
| Field | Type | Required | Description |
|---|---|---|---|
| to | string | REQUIRED | Recipient WhatsApp number, digits only with country code (e.g. "971509876543"). No "+" or leading "00". |
| media | object (JSON) | REQUIRED | Shape: { url?, base64?, mimetype (required), fileName?, caption?, viewOnce? } — provide either url or base64. Images/videos only — viewOnce lets the recipient open it once before it disappears. |
| sessionId | number | OPTIONAL | Specific WhatsApp session ID to send from. Takes priority over phoneNumber when both are given. |
| phoneNumber | string | OPTIONAL | Your connected session’s phone number, used to pick which session sends the message when your account has more than one connected. Ignored if sessionId is given. If neither is given, the first connected session is used. |
Check out this image
curl -X POST 'https://api.chatpingo.com/integrations-user/whatsapp/send-media' \
-H 'X-API-Key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{ "to": "12025550147", "media": { "url": "https://www.tropicaltickets.com/cdn/shop/files/download_72.jpg?v=1691659648", "mimetype": "image/jpeg", "fileName": "photo.jpg", "caption": "Check out this image" }, "sessionId": null, "phoneNumber": "447476686841" }'/integrations-user/whatsapp/send-media(no /api prefix)Same endpoint as "Send Media (by URL)". This example shows sending a file straight from your device: switch to the Form tab, click the 📎 attach icon on the "media" row, and pick a file — it's base64-encoded automatically into the shape the API expects.
| Field | Type | Required | Description |
|---|---|---|---|
| to | string | REQUIRED | Recipient WhatsApp number, digits only with country code (e.g. "971509876543"). No "+" or leading "00". |
| media | object (JSON) | REQUIRED | Attach a file via the Form tab's 📎 icon instead of typing this by hand. Shape once attached: { base64, mimetype, fileName }. Add "viewOnce": true (images/videos only) to make it disappear after the recipient opens it once. |
| sessionId | number | OPTIONAL | Specific WhatsApp session ID to send from. Takes priority over phoneNumber when both are given. |
| phoneNumber | string | OPTIONAL | Your connected session’s phone number, used to pick which session sends the message when your account has more than one connected. Ignored if sessionId is given. If neither is given, the first connected session is used. |
Check out this image
curl -X POST 'https://api.chatpingo.com/integrations-user/whatsapp/send-media' \
-H 'X-API-Key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{ "to": "12025550147", "media": { "caption": "Check out this image" }, "sessionId": null, "phoneNumber": "447476686841" }'/integrations-user/whatsapp/send-location(no /api prefix)Send a pinned location to a WhatsApp number through one of your connected sessions.
| Field | Type | Required | Description |
|---|---|---|---|
| to | string | REQUIRED | Recipient WhatsApp number, digits only with country code (e.g. "971509876543"). No "+" or leading "00". |
| latitude | number | REQUIRED | Degrees latitude, between -90 and 90. |
| longitude | number | REQUIRED | Degrees longitude, between -180 and 180. |
| name | string | OPTIONAL | Label shown above the pin (e.g. a venue name). |
| address | string | OPTIONAL | Address text shown under the pin. |
| sessionId | number | OPTIONAL | Specific WhatsApp session ID to send from. Takes priority over phoneNumber when both are given. |
| phoneNumber | string | OPTIONAL | Your connected session’s phone number, used to pick which session sends the message when your account has more than one connected. Ignored if sessionId is given. If neither is given, the first connected session is used. |
ChatPingo HQ
Dubai, UAE
curl -X POST 'https://api.chatpingo.com/integrations-user/whatsapp/send-location' \
-H 'X-API-Key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{ "to": "12025550147", "latitude": 25.2048, "longitude": 55.2708, "name": "ChatPingo HQ", "address": "Dubai, UAE", "sessionId": null, "phoneNumber": "447476686841" }'/integrations-user/whatsapp/send-contact(no /api prefix)Send one or more contact cards (vCards) to a WhatsApp number through one of your connected sessions.
| Field | Type | Required | Description |
|---|---|---|---|
| to | string | REQUIRED | Recipient WhatsApp number, digits only with country code (e.g. "971509876543"). No "+" or leading "00". |
| contacts | array of { name, phone } | REQUIRED | One or more contact cards to send — at least one required. Each needs a display name and phone number. |
| sessionId | number | OPTIONAL | Specific WhatsApp session ID to send from. Takes priority over phoneNumber when both are given. |
| phoneNumber | string | OPTIONAL | Your connected session’s phone number, used to pick which session sends the message when your account has more than one connected. Ignored if sessionId is given. If neither is given, the first connected session is used. |
Jane Doe
+971 50 987 6543
curl -X POST 'https://api.chatpingo.com/integrations-user/whatsapp/send-contact' \
-H 'X-API-Key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{ "to": "12025550147", "contacts": [ { "name": "Jane Doe", "phone": "971509876543" } ], "sessionId": null, "phoneNumber": "447476686841" }'/integrations-user/whatsapp/send-poll(no /api prefix)Send a poll with a question and 2–12 selectable options to a WhatsApp number through one of your connected sessions.
| Field | Type | Required | Description |
|---|---|---|---|
| to | string | REQUIRED | Recipient WhatsApp number, digits only with country code (e.g. "971509876543"). No "+" or leading "00". |
| question | string | REQUIRED | The poll question. |
| options | string[] | REQUIRED | 2 to 12 selectable options. |
| selectableCount | number | OPTIONAL | How many options a voter can pick. Defaults to 1 (single choice) — set higher to allow multiple. |
| mentions | string[] | OPTIONAL | Group chats only — phone numbers or JIDs to @-mention. No-op in a 1:1 chat. |
| sessionId | number | OPTIONAL | Specific WhatsApp session ID to send from. Takes priority over phoneNumber when both are given. |
| phoneNumber | string | OPTIONAL | Your connected session’s phone number, used to pick which session sends the message when your account has more than one connected. Ignored if sessionId is given. If neither is given, the first connected session is used. |
📊 What's your favorite color?
curl -X POST 'https://api.chatpingo.com/integrations-user/whatsapp/send-poll' \
-H 'X-API-Key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{ "to": "12025550147", "question": "What's your favorite color?", "options": [ "Red", "Blue", "Green" ], "selectableCount": 1, "sessionId": null, "phoneNumber": "447476686841" }'/integrations-user/whatsapp/send-sticker(no /api prefix)Send an image as a WhatsApp sticker through one of your connected sessions. Non-webp images are converted automatically.
| Field | Type | Required | Description |
|---|---|---|---|
| to | string | REQUIRED | Recipient WhatsApp number, digits only with country code (e.g. "971509876543"). No "+" or leading "00". |
| media | object (JSON) | REQUIRED | Shape: { url?, base64?, mimetype? } — provide either url or base64. Attach a file via the Form tab's 📎 icon, or paste a URL. Anything that isn't already image/webp is converted server-side. |
| sessionId | number | OPTIONAL | Specific WhatsApp session ID to send from. Takes priority over phoneNumber when both are given. |
| phoneNumber | string | OPTIONAL | Your connected session’s phone number, used to pick which session sends the message when your account has more than one connected. Ignored if sessionId is given. If neither is given, the first connected session is used. |
curl -X POST 'https://api.chatpingo.com/integrations-user/whatsapp/send-sticker' \
-H 'X-API-Key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{ "to": "12025550147", "media": {}, "sessionId": null, "phoneNumber": "447476686841" }'/integrations-user/whatsapp/send-reaction(no /api prefix)React to an existing message with an emoji. messageId, remoteJid, and fromMe identify the target message — you already have these from your inbound webhook payload for that message.
| Field | Type | Required | Description |
|---|---|---|---|
| messageId | string | REQUIRED | The WhatsApp message ID being reacted to (from your webhook payload). |
| remoteJid | string | REQUIRED | The chat the message belongs to (from your webhook payload). |
| fromMe | boolean | REQUIRED | Whether that message was sent by you (true) or received from the other side (false). |
| emoji | string | REQUIRED | The reaction emoji, e.g. "👍". Send an empty string to remove a previously-set reaction. |
| sessionId | number | OPTIONAL | Specific WhatsApp session ID to send from. Takes priority over phoneNumber when both are given. |
| phoneNumber | string | OPTIONAL | Your connected session’s phone number, used to pick which session sends the reaction when your account has more than one connected. Ignored if sessionId is given. If neither is given, the first connected session is used. |
Hello from the API!
curl -X POST 'https://api.chatpingo.com/integrations-user/whatsapp/send-reaction' \
-H 'X-API-Key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{ "messageId": "ABCD1234EF567890", "remoteJid": "12025550147@s.whatsapp.net", "fromMe": false, "emoji": "👍", "sessionId": null, "phoneNumber": "447476686841" }'/integrations-user/whatsapp/send-edit-message(no /api prefix)Edit a text message your session already sent. messageId and remoteJid identify it — you get these back in the "messageId" field of that message's send response. WhatsApp only allows editing within about 15 minutes of sending.
| Field | Type | Required | Description |
|---|---|---|---|
| messageId | string | REQUIRED | The WhatsApp message ID of the message to edit — must be one your session sent (from that send's response). |
| remoteJid | string | REQUIRED | The chat the message belongs to. |
| newText | string | REQUIRED | The corrected text. |
| sessionId | number | OPTIONAL | Specific WhatsApp session ID to send from. Takes priority over phoneNumber when both are given. |
| phoneNumber | string | OPTIONAL | Your connected session’s phone number, used to pick which session sends from when your account has more than one connected. Ignored if sessionId is given. If neither is given, the first connected session is used. |
Corrected text!
curl -X POST 'https://api.chatpingo.com/integrations-user/whatsapp/send-edit-message' \
-H 'X-API-Key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{ "messageId": "ABCD1234EF567890", "remoteJid": "12025550147@s.whatsapp.net", "newText": "Corrected text!", "sessionId": null, "phoneNumber": "447476686841" }'/integrations-user/whatsapp/send-group-invite(no /api prefix)Send a rich "join this group" message with a live invite link. Your session must already be a member/admin of the group.
| Field | Type | Required | Description |
|---|---|---|---|
| to | string | REQUIRED | Recipient WhatsApp number to send the invite message to. |
| groupJid | string | REQUIRED | The group's JID (e.g. "123456789@g.us"). Your session must already be a member/admin. |
| text | string | OPTIONAL | Optional message text shown alongside the invite. Defaults to "Join {group name}". |
| sessionId | number | OPTIONAL | Specific WhatsApp session ID to send from. Takes priority over phoneNumber when both are given. |
| phoneNumber | string | OPTIONAL | Your connected session’s phone number, used to pick which session sends from when your account has more than one connected. Ignored if sessionId is given. If neither is given, the first connected session is used. |
Sales Team
Group invite
Join Sales Team
curl -X POST 'https://api.chatpingo.com/integrations-user/whatsapp/send-group-invite' \
-H 'X-API-Key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{ "to": "12025550147", "groupJid": "123456789@g.us", "sessionId": null, "phoneNumber": "447476686841" }'/integrations-user/whatsapp/send-event(no /api prefix)Send a calendar-invite-style event message to a WhatsApp number through one of your connected sessions.
| Field | Type | Required | Description |
|---|---|---|---|
| to | string | REQUIRED | Recipient WhatsApp number, digits only with country code (e.g. "971509876543"). No "+" or leading "00". |
| name | string | REQUIRED | The event name. |
| description | string | OPTIONAL | Event description. |
| startDate | string (ISO 8601) | REQUIRED | Start date/time, e.g. "2026-08-01T18:00:00Z". |
| endDate | string (ISO 8601) | OPTIONAL | End date/time. Omit for an open-ended event. |
| sessionId | number | OPTIONAL | Specific WhatsApp session ID to send from. Takes priority over phoneNumber when both are given. |
| phoneNumber | string | OPTIONAL | Your connected session’s phone number, used to pick which session sends the message when your account has more than one connected. Ignored if sessionId is given. If neither is given, the first connected session is used. |
Launch Party
Aug 1, 6:00 PM
curl -X POST 'https://api.chatpingo.com/integrations-user/whatsapp/send-event' \
-H 'X-API-Key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{ "to": "12025550147", "name": "Launch Party", "description": "Come celebrate with us", "startDate": "2026-08-01T18:00:00Z", "endDate": "2026-08-01T20:00:00Z", "sessionId": null, "phoneNumber": "447476686841" }'/integrations-user/whatsapp/mark-read(no /api prefix)Mark a message your session received as read — turns on the blue ticks. messageId and remoteJid come from your inbound webhook payload for that message.
| Field | Type | Required | Description |
|---|---|---|---|
| messageId | string | REQUIRED | The WhatsApp message ID to mark read (from your webhook payload). |
| remoteJid | string | REQUIRED | The chat the message belongs to (from your webhook payload). |
| fromMe | boolean | REQUIRED | Whether that message was sent by you (true) or received (false — the usual case here). |
| sessionId | number | OPTIONAL | Specific WhatsApp session ID to act on. Takes priority over phoneNumber when both are given. |
| phoneNumber | string | OPTIONAL | Your connected session’s phone number, used to pick which session acts when your account has more than one connected. Ignored if sessionId is given. If neither is given, the first connected session is used. |
Hey, are we still on for tomorrow?
curl -X POST 'https://api.chatpingo.com/integrations-user/whatsapp/mark-read' \
-H 'X-API-Key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{ "messageId": "ABCD1234EF567890", "remoteJid": "12025550147@s.whatsapp.net", "fromMe": false, "sessionId": null, "phoneNumber": "447476686841" }'/integrations-user/whatsapp/forward-message(no /api prefix)Re-sends the given text to a new recipient, marked "Forwarded" in the WhatsApp UI. This sends the text you provide — it doesn't replay an arbitrary original message you only have the ID of.
| Field | Type | Required | Description |
|---|---|---|---|
| to | string | REQUIRED | Recipient WhatsApp number, digits only with country code (e.g. "971509876543"). No "+" or leading "00". |
| text | string | REQUIRED | The text content to forward. |
| sessionId | number | OPTIONAL | Specific WhatsApp session ID to send from. Takes priority over phoneNumber when both are given. |
| phoneNumber | string | OPTIONAL | Your connected session’s phone number, used to pick which session sends from when your account has more than one connected. Ignored if sessionId is given. If neither is given, the first connected session is used. |
Forwarded content
curl -X POST 'https://api.chatpingo.com/integrations-user/whatsapp/forward-message' \
-H 'X-API-Key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{ "to": "12025550147", "text": "Forwarded content", "sessionId": null, "phoneNumber": "447476686841" }'Every endpoint on this page returns the same status codes.
| 201 | Created | Message accepted and sent. |
| 400 | Bad Request | The body failed validation — check the field table above. |
| 401 | Unauthorized | Missing or invalid API key. |
| 429 | Too Many Requests | Rate limit is 30 requests/minute per API key. |
| 503 | Service Unavailable | No connected WhatsApp session was available to send from. |