Send Text Message
Use for core text messaging. Required params: instance_id, access_token, chatId, message.
Authentication Required
Login to swap the placeholders with your real Instance ID and Access Token.
Log InNo query parameters required
This endpoint doesn't expect data in the URL.
Best practices
Include a clear way for users to opt-out of communications.
Use webhooks to track delivery status if your application requires confirmation.
Implement a retry strategy with exponential backoff for 'wawp_upstream_error' scenarios.
Narrative Power: Mastering the Core Text Engine
The /v2/send/text endpoint is the most fundamental and frequently used tool in the Wawp arsenal. While it may seem simple to "just send text," this endpoint is powered by a high-performance rendering engine that manages character encoding, markdown parsing, and delivery synchronization. For businesses, this is the primary channel for notifications, support responses, and conversational marketing.
🏗️ Technical Architecture of the Text Pipeline
When a POST request hits this endpoint, Wawp initiates a stateless workflow:
- Normalization: The
chatIdis sanitized (removing+or extraneous spaces) and verified against the WhatsApp network routing table. - Text Bufferings: The
messagestring is buffered to prevent memory overflow. WhatsApp supports up to 4,096 characters, and our proxy enforces this limit to ensure upstream delivery remains atomic. - Markdown Pre-processing: Wawp preserves WhatsApp-specific markdown (e.g.,
*bold*,_italic_,~strikethrough~, andcode blocks). This allows you to send rich, structured text without needing complex HTML or XML wrappers.
🛡️ Strategic Best Practices for Developers
1. The Optimistic UI Pattern
For high-quality user experiences, don't make the user wait for the API response before showing the message in your frontend.
- Implementation: When the user clicks "Send," immediately render the message in your chat UI with a "Sending..." indicator. Call
/v2/send/start-typinga few seconds before the actual POST to mimic human behavior. Once the/send/textreturns amessage_id, update the UI state to "Sent."
2. Handling Character Complexity
If you are sending technical logs, code snippets, or non-Latin character sets (Arabic, Mandarin, etc.), note that:
- Encoding: Wawp uses UTF-8 encoding by default. Ensure your application server sends the correct
Content-Type: application/jsonheaders to prevent character corruption. - Truncation Safety: If your text exceeds 4,000 characters, we recommend splitting it into multiple logical messages or using the CLIP (Copy Link in Profile) strategy to host longer content on a web page.
3. Error Recovery and Upstream Reliability
Occasionally, the WhatsApp network (Upstream) may experience transient lag.
- The "2xx vs Delivery" Fallacy: A
200 OKfrom Wawp means the message was successfully accepted and queued for delivery to the engine. It does not guarantee the recipient's phone is on. - Monitoring: Always use Webhooks (
message.ack) to track when the status moves from "Sent" (1 checkmark) to "Delivered" (2 checkmarks) and finally "Read" (blue checkmarks).
🧩 Advanced Use Cases
Variable Injection and Templating
Because Wawp is stateless, you can easily build a templating engine on your side.
- Example: "Hi {{name}}, your order #{{order_id}} is ready!"
- Technique: Perform the string replacement in your backend before sending the final string to Wawp. This keeps the logic localized to your business rules while Wawp handles the heavy lifting of delivery.
Threaded Conversations (Reply-to)
By including the reply_to parameter (the message_id of a previous message), you can create structured threads. This is crucial for:
- Support systems where the agent needs to clarify a specific customer question.
- Group chats where multiple topics are being discussed simultaneously.
🛠️ Common Pitfalls and Solutions
- Forbidden Characters: While emojis are fully supported, stay away from low-level control characters (
\x00-\x1F) which can trigger security flags or cause the engine to crash. - Empty Messages: Sending an empty
messageor one consisting only of whitespace will return a400 Bad Request. Always validate your input fields. - Rate Overload: Sending 1,000 text messages to the same user in 60 seconds is a guaranteed "spam" flag. Use a sane "Consumer Protection" delay (minimum 1 second between messages to the same recipient).
Summary of Capabilities:
- Send structured, rich text with full support for WhatsApp Markdown.
- High-concurrency support for notification and alert systems.
- Seamless integration with threading/replies via
reply_to. - Real-time event tracking through consistent
message_idgeneration. - Support for all global languages and emoji sets via UTF-8.
Request Parameters
Configure the parameters required to interact with this endpoint. All query and body arguments are listed below with their details.
Request Body
Sent as a JSON objectstring | Unique ID of the WhatsApp session Example: | ||
string | API access token Example: | ||
string | Recipient's WhatsApp ID (JID). Supports Individuals (@c.us), Groups (@g.us), and Newsletters (@newsletter). Example: | ||
string | Message text to be sent Example: | ||
string | — | The ID of the message you are replying to Example: |
Request Samples
Use these ready-to-go code snippets to integrate our API into your project quickly and efficiently. Choose your preferred language and library.
Expected Responses
Explore all possible responses and outcomes from the server. We have documented each status code with data examples to make success and error handling easier.
Example
{
"_data": {
"id": {
"fromMe": true,
"remote": "000000000000@c.us",
"id": "MSG_ID_123456",
"_serialized": "true_000000000000@c.us_MSG_ID_123456"
},
"viewed": false,
"body": "BASE64_IMAGE_DATA",
"type": "image",
"t": 1759108866,
"from": {
"server": "c.us",
"user": "111111111111",
"_serialized": "111111111111@c.us"
},
"to": {
"server": "c.us",
"user": "000000000000",
"_serialized": "000000000000@c.us"
},
"ack": 0,
"isNewMsg": true,
"star": false,
"kicNotified": false,
"caption": "Here's your requested image.",
"deprecatedMms3Url": "https://example.com/media-url",
"directPath": "/media/direct/path/example",
"mimetype": "image/jpeg",
"filehash": "FILE_HASH_PLACEHOLDER",
"encFilehash": "ENC_FILE_HASH_PLACEHOLDER",
"size": 192487,
"mediaKey": "MEDIA_KEY_PLACEHOLDER",
"mediaKeyTimestamp": 1759108865,
"streamable": false,
"mediaHandle": null,
"isFromTemplate": false,
"pollInvalidated": false,
"isSentCagPollCreation": false,
"latestEditMsgKey": null,
"latestEditSenderTimestampMs": null,
"mentionedJidList": {
},
"groupMentions": {
},
"isEventCanceled": false,
"eventInvalidated": false,
"isVcardOverMmsDocument": false,
"isForwarded": false,
"isQuestion": false,
"questionReplyQuotedMessage": null,
"questionResponsesCount": 0,
"readQuestionResponsesCount": 0,
"labels": {
},
"hasReaction": false,
"disappearingModeInitiator": "chat",
"disappearingModeTrigger": "chat_settings",
"productHeaderImageRejected": false,
"lastPlaybackProgress": 0,
"isDynamicReplyButtonsMsg": false,
"isCarouselCard": false,
"parentMsgId": null,
"callSilenceReason": null,
"isVideoCall": false,
"callDuration": null,
"callCreator": null,
"callParticipants": null,
"isCallLink": null,
"callLinkToken": null,
"isMdHistoryMsg": false,
"stickerSentTs": 0,
"lastUpdateFromServerTs": 0,
"invokedBotWid": null,
"bizBotType": null,
"botResponseTargetId": null,
"botPluginType": null,
"botPluginReferenceIndex": null,
"botPluginSearchProvider": null,
"botPluginSearchUrl": null,
"botPluginSearchQuery": null,
"botPluginMaybeParent": false,
"botReelPluginThumbnailCdnUrl": null,
"botMessageDisclaimerText": null,
"botMsgBodyType": null,
"requiresDirectConnection": false,
"bizContentPlaceholderType": null,
"hostedBizEncStateMismatch": false,
"senderOrRecipientAccountTypeHosted": false,
"placeholderCreatedWhenAccountIsHosted": false,
"galaxyFlowDisabled": false,
"links": {
}
},
"mediaKey": "MEDIA_KEY_PLACEHOLDER",
"id": {
"fromMe": true,
"remote": "000000000000@c.us",
"id": "MSG_ID_123456",
"_serialized": "true_000000000000@c.us_MSG_ID_123456"
},
"ack": 0,
"hasMedia": true,
"body": "Here's your requested image.",
"type": "image",
"timestamp": 1759108866,
"from": "111111111111@c.us",
"to": "000000000000@c.us",
"deviceType": "android",
"isForwarded": false,
"forwardingScore": 0,
"isStatus": false,
"isStarred": false,
"fromMe": true,
"hasQuotedMsg": false,
"hasReaction": false,
"vCards": {
},
"mentionedIds": {
},
"groupMentions": {
},
"isGif": false,
"links": {
}
}Command Palette
Search for a command to run...