Every endpoint below lives under /api/* and works as either a GET (params in the query string) or a POST (params as JSON body) unless noted otherwise â pick whichever is easier to call from your language.
Authenticate every request with your API key, either as a query param or as a header:
?apikey=YOUR_API_KEY
X-Api-Key: YOUR_API_KEY
đĄ Want to try requests live instead of reading examples? Use the API Playground.
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 your connected number, we POST the full event as JSON to your webhook URL. 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
}
}/api/statusRequires a logged-in session cookie (used by the dashboard) rather than an API key.
{"status": "WORKING", "engine": "NOWEB"}/api/sessionSame as above, but authenticated with your API key and includes the connected phone number.
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": [...]}