Errors are returned as JSON with an HTTP status code and a detail field, e.g. {"detail": "..."}.
| Status | Meaning |
|---|---|
400 | Missing or invalid required field(s). |
401 | Missing or invalid API key. |
429 | Rate limit exceeded — see the Retry-After response header for how long to wait. |
502 | Could not reach the WhatsApp engine — try again shortly. |
Sending is limited to a sustained 0.5 messages/second with a burst of 3, per account — this keeps your connected number in good standing with WhatsApp.
/api/sendSend a plain text message.
| Param | Required | Description |
|---|---|---|
to | required | Recipient number with country code, e.g. 923001234567 |
text | required | Message body |
curl "http://www.walinkr.com/api/send?apikey=YOUR_KEY&to=923001234567&text=Hello!"
/api/send-imageSend an image from a public URL, with an optional caption.
| Param | Required | Description |
|---|---|---|
to | required | Recipient number |
image | required | Public image URL |
caption | optional | Caption text |
curl "http://www.walinkr.com/api/send-image?apikey=YOUR_KEY&to=923001234567&image=https://example.com/photo.jpg&caption=Nice!"
/api/send-fileSend any document/file from a public URL.
| Param | Required | Description |
|---|---|---|
to | required | Recipient number |
file | required | Public file URL |
filename | optional | Filename shown to the recipient |
curl "http://www.walinkr.com/api/send-file?apikey=YOUR_KEY&to=923001234567&file=https://example.com/doc.pdf&filename=invoice.pdf"
/api/send-locationShare a map location.
| Param | Required | Description |
|---|---|---|
to | required | Recipient number |
lat | required | Latitude |
lng | required | Longitude |
title | optional | Label for the pin |
curl "http://www.walinkr.com/api/send-location?apikey=YOUR_KEY&to=923001234567&lat=24.8607&lng=67.0011&title=Karachi"
/api/send-contactSend a vCard contact card.
| Param | Required | Description |
|---|---|---|
to | required | Recipient number |
contact_name | required | Name shown on the card |
contact_phone | required | Phone number on the card |
curl "http://www.walinkr.com/api/send-contact?apikey=YOUR_KEY&to=923001234567&contact_name=Ali+Khan&contact_phone=+923001234567"
/api/check-numberCheck whether a phone number is registered on WhatsApp before sending.
| Param | Required | Description |
|---|---|---|
phone | required | Number to check |
curl "http://www.walinkr.com/api/check-number?apikey=YOUR_KEY&phone=923001234567"
/api/reactAdd an emoji reaction to a message you sent or received.
| Param | Required | Description |
|---|---|---|
message_id | required | Full message ID, returned as messageId in a send response |
reaction | required | An emoji, e.g. 👍 |
curl "http://www.walinkr.com/api/react?apikey=YOUR_KEY&message_id=true_923001234567@c.us_XXXXXXXX&reaction=👍"
/api/mark-readMark a message as seen (blue ticks).
| Param | Required | Description |
|---|---|---|
to | required | Chat the message belongs to |
message_id | required | Full message ID |
curl "http://www.walinkr.com/api/mark-read?apikey=YOUR_KEY&to=923001234567&message_id=true_923001234567@c.us_XXXXXXXX"
/api/edit-messageEdit the text of a message you already sent.
| Param | Required | Description |
|---|---|---|
to | required | Chat the message belongs to |
message_id | required | Full message ID |
text | required | New message text |
curl "http://www.walinkr.com/api/edit-message?apikey=YOUR_KEY&to=923001234567&message_id=true_923001234567@c.us_XXXXXXXX&text=Updated+text"
/api/delete-messageDelete a message you sent (for everyone).
| Param | Required | Description |
|---|---|---|
to | required | Chat the message belongs to |
message_id | required | Full message ID |
curl "http://www.walinkr.com/api/delete-message?apikey=YOUR_KEY&to=923001234567&message_id=true_923001234567@c.us_XXXXXXXX"
/api/groupsList every group your connected number is a member of. No params needed besides apikey.
curl "http://www.walinkr.com/api/groups?apikey=YOUR_KEY"
/api/groups/create| Param | Required | Description |
|---|---|---|
name | required | Group name |
participants | required | Comma-separated phone numbers |
curl "http://www.walinkr.com/api/groups/create?apikey=YOUR_KEY&name=My+Group&participants=923001234567,923009876543"
/api/groups/{group_id}group_id is part of the URL path, e.g. 123456789@g.us.
curl "http://www.walinkr.com/api/groups/123456789@g.us?apikey=YOUR_KEY"
/api/groups/join| Param | Required | Description |
|---|---|---|
code | required | Invite code from a chat.whatsapp.com/... link |
curl "http://www.walinkr.com/api/groups/join?apikey=YOUR_KEY&code=INVITE_CODE"
/api/groups/previewSee a group's info before joining it.
| Param | Required | Description |
|---|---|---|
code | required | Invite code |
curl "http://www.walinkr.com/api/groups/preview?apikey=YOUR_KEY&code=INVITE_CODE"
/api/groups/{group_id}/leavecurl "http://www.walinkr.com/api/groups/123456789@g.us/leave?apikey=YOUR_KEY"
/api/groups/{group_id}/invite-codeReturns {"code": "...", "link": "https://chat.whatsapp.com/..."}.
curl "http://www.walinkr.com/api/groups/123456789@g.us/invite-code?apikey=YOUR_KEY"
/api/groups/{group_id}/invite-code/revokeInvalidates the old link and generates a new one.
curl "http://www.walinkr.com/api/groups/123456789@g.us/invite-code/revoke?apikey=YOUR_KEY"
/api/groups/{group_id}/subject| Param | Required | Description |
|---|---|---|
subject | required | New group name |
curl "http://www.walinkr.com/api/groups/123456789@g.us/subject?apikey=YOUR_KEY&subject=New+Name"
/api/groups/{group_id}/description| Param | Required | Description |
|---|---|---|
description | required | New group description |
curl "http://www.walinkr.com/api/groups/123456789@g.us/description?apikey=YOUR_KEY&description=Hello"
/api/contact/picture| Param | Required | Description |
|---|---|---|
phone | required | Contact's number |
curl "http://www.walinkr.com/api/contact/picture?apikey=YOUR_KEY&phone=923001234567"
/api/typing/start| Param | Required | Description |
|---|---|---|
to | required | Chat to show "typing..." in |
curl "http://www.walinkr.com/api/typing/start?apikey=YOUR_KEY&to=923001234567"
/api/typing/stop| Param | Required | Description |
|---|---|---|
to | required | Chat to clear the indicator in |
curl "http://www.walinkr.com/api/typing/stop?apikey=YOUR_KEY&to=923001234567"
/api/presenceReal-time online/typing/recording status only — expires within seconds, not the persistent "last seen at..." timestamp.
| Param | Required | Description |
|---|---|---|
to | required | Contact to check |
curl "http://www.walinkr.com/api/presence?apikey=YOUR_KEY&to=923001234567"
/api/profilecurl "http://www.walinkr.com/api/profile?apikey=YOUR_KEY"
/api/profile/name| Param | Required | Description |
|---|---|---|
name | required | New display name |
curl "http://www.walinkr.com/api/profile/name?apikey=YOUR_KEY&name=My+Business"
/api/profile/status| Param | Required | Description |
|---|---|---|
status | required | New about/status text |
curl "http://www.walinkr.com/api/profile/status?apikey=YOUR_KEY&status=Available"
/api/webhookReturns {"webhook_url": "..." | null}.
curl "http://www.walinkr.com/api/webhook?apikey=YOUR_KEY"
/api/webhook/set| Param | Required | Description |
|---|---|---|
webhook_url | required | URL we POST incoming messages to |
curl "http://www.walinkr.com/api/webhook/set?apikey=YOUR_KEY&webhook_url=https://your-app.com/webhook"
/api/webhook/removecurl "http://www.walinkr.com/api/webhook/remove?apikey=YOUR_KEY"
When someone messages one of your connected numbers, we POST the full event as JSON to that number's webhook URL (set separately per number on the dashboard). Try it live in the Webhook Demo.
{
"event": "message",
"session": "your_session",
"payload": {
"id": "true_923001234567@c.us_XXXXXXXX",
"from": "923001234567@c.us",
"fromMe": false,
"body": "Hello!",
"timestamp": 1717000000
}
}The same webhook URL also receives an event when the number drops off WhatsApp (e.g. logged out from Linked Devices) and when it is connected again. event is session.disconnected or session.connected. Numbers that have never been linked don't trigger these.
{
"event": "session.disconnected",
"session": "your_session",
"number": {"id": 12, "label": "Number 1", "phone": "923001234567"},
"status": "SCAN_QR_CODE"
}/api/sessionEach WhatsApp number has its own API key and its own connection status — the key you authenticate with determines which number this returns.
curl "http://www.walinkr.com/api/session?apikey=YOUR_KEY"
{"status": "WORKING", "engine": "NOWEB", "phone": "923001234567@c.us"}/api/session/restartForces a reconnect — use if your session gets stuck.
curl "http://www.walinkr.com/api/session/restart?apikey=YOUR_KEY"
/api/usageMessage counts for today, this week, and all time, plus your success rate.
curl "http://www.walinkr.com/api/usage?apikey=YOUR_KEY"
{"today": 12, "week": 84, "total_sent": 512, "total_received": 201, "success_rate": 98.4, "daily": [...]}