API Documentation
Full reference for every WALinkr endpoint
Overview
Send Messages
Message Actions
Groups
Contacts & Presence
Profile
Webhooks
Session & Usage

Errors & Rate Limits

Errors are returned as JSON with an HTTP status code and a detail field, e.g. {"detail": "..."}.

StatusMeaning
400Missing or invalid required field(s).
401Missing or invalid API key.
429Rate limit exceeded — see the Retry-After response header for how long to wait.
502Could 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.

Send Text

GET / POST/api/send

Send a plain text message.

ParamRequiredDescription
torequiredRecipient number with country code, e.g. 923001234567
textrequiredMessage body
curl "http://www.walinkr.com/api/send?apikey=YOUR_KEY&to=923001234567&text=Hello!"

Send Image

GET / POST/api/send-image

Send an image from a public URL, with an optional caption.

ParamRequiredDescription
torequiredRecipient number
imagerequiredPublic image URL
captionoptionalCaption text
curl "http://www.walinkr.com/api/send-image?apikey=YOUR_KEY&to=923001234567&image=https://example.com/photo.jpg&caption=Nice!"

Send File

GET / POST/api/send-file

Send any document/file from a public URL.

ParamRequiredDescription
torequiredRecipient number
filerequiredPublic file URL
filenameoptionalFilename 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"

Send Location

GET / POST/api/send-location

Share a map location.

ParamRequiredDescription
torequiredRecipient number
latrequiredLatitude
lngrequiredLongitude
titleoptionalLabel for the pin
curl "http://www.walinkr.com/api/send-location?apikey=YOUR_KEY&to=923001234567&lat=24.8607&lng=67.0011&title=Karachi"

Send Contact

GET / POST/api/send-contact

Send a vCard contact card.

ParamRequiredDescription
torequiredRecipient number
contact_namerequiredName shown on the card
contact_phonerequiredPhone number on the card
curl "http://www.walinkr.com/api/send-contact?apikey=YOUR_KEY&to=923001234567&contact_name=Ali+Khan&contact_phone=+923001234567"

Check Number on WhatsApp

GET / POST/api/check-number

Check whether a phone number is registered on WhatsApp before sending.

ParamRequiredDescription
phonerequiredNumber to check
curl "http://www.walinkr.com/api/check-number?apikey=YOUR_KEY&phone=923001234567"

React to a Message

GET / POST/api/react

Add an emoji reaction to a message you sent or received.

ParamRequiredDescription
message_idrequiredFull message ID, returned as messageId in a send response
reactionrequiredAn emoji, e.g. 👍
curl "http://www.walinkr.com/api/react?apikey=YOUR_KEY&message_id=true_923001234567@c.us_XXXXXXXX&reaction=👍"

Mark as Read

GET / POST/api/mark-read

Mark a message as seen (blue ticks).

ParamRequiredDescription
torequiredChat the message belongs to
message_idrequiredFull message ID
curl "http://www.walinkr.com/api/mark-read?apikey=YOUR_KEY&to=923001234567&message_id=true_923001234567@c.us_XXXXXXXX"

Edit Message

GET / POST/api/edit-message

Edit the text of a message you already sent.

ParamRequiredDescription
torequiredChat the message belongs to
message_idrequiredFull message ID
textrequiredNew 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"

Delete Message

GET / POST/api/delete-message

Delete a message you sent (for everyone).

ParamRequiredDescription
torequiredChat the message belongs to
message_idrequiredFull message ID
curl "http://www.walinkr.com/api/delete-message?apikey=YOUR_KEY&to=923001234567&message_id=true_923001234567@c.us_XXXXXXXX"

List My Groups

GET/api/groups

List every group your connected number is a member of. No params needed besides apikey.

curl "http://www.walinkr.com/api/groups?apikey=YOUR_KEY"

Create Group

GET / POST/api/groups/create
ParamRequiredDescription
namerequiredGroup name
participantsrequiredComma-separated phone numbers
curl "http://www.walinkr.com/api/groups/create?apikey=YOUR_KEY&name=My+Group&participants=923001234567,923009876543"

Get Group Info

GET/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"

Join via Invite Code

GET / POST/api/groups/join
ParamRequiredDescription
coderequiredInvite code from a chat.whatsapp.com/... link
curl "http://www.walinkr.com/api/groups/join?apikey=YOUR_KEY&code=INVITE_CODE"

Preview Invite Code

GET/api/groups/preview

See a group's info before joining it.

ParamRequiredDescription
coderequiredInvite code
curl "http://www.walinkr.com/api/groups/preview?apikey=YOUR_KEY&code=INVITE_CODE"

Leave Group

GET / POST/api/groups/{group_id}/leave
curl "http://www.walinkr.com/api/groups/123456789@g.us/leave?apikey=YOUR_KEY"

Get Invite Code

GET/api/groups/{group_id}/invite-code

Returns {"code": "...", "link": "https://chat.whatsapp.com/..."}.

curl "http://www.walinkr.com/api/groups/123456789@g.us/invite-code?apikey=YOUR_KEY"

Revoke Invite Code

GET / POST/api/groups/{group_id}/invite-code/revoke

Invalidates the old link and generates a new one.

curl "http://www.walinkr.com/api/groups/123456789@g.us/invite-code/revoke?apikey=YOUR_KEY"

Set Group Subject

GET / POST/api/groups/{group_id}/subject
ParamRequiredDescription
subjectrequiredNew group name
curl "http://www.walinkr.com/api/groups/123456789@g.us/subject?apikey=YOUR_KEY&subject=New+Name"

Set Group Description

GET / POST/api/groups/{group_id}/description
ParamRequiredDescription
descriptionrequiredNew group description
curl "http://www.walinkr.com/api/groups/123456789@g.us/description?apikey=YOUR_KEY&description=Hello"

Get Contact Picture

GET/api/contact/picture
ParamRequiredDescription
phonerequiredContact's number
curl "http://www.walinkr.com/api/contact/picture?apikey=YOUR_KEY&phone=923001234567"

Start Typing Indicator

GET / POST/api/typing/start
ParamRequiredDescription
torequiredChat to show "typing..." in
curl "http://www.walinkr.com/api/typing/start?apikey=YOUR_KEY&to=923001234567"

Stop Typing Indicator

GET / POST/api/typing/stop
ParamRequiredDescription
torequiredChat to clear the indicator in
curl "http://www.walinkr.com/api/typing/stop?apikey=YOUR_KEY&to=923001234567"

Get Real-Time Online Status

GET/api/presence

Real-time online/typing/recording status only — expires within seconds, not the persistent "last seen at..." timestamp.

ParamRequiredDescription
torequiredContact to check
curl "http://www.walinkr.com/api/presence?apikey=YOUR_KEY&to=923001234567"

Get My Profile

GET/api/profile
curl "http://www.walinkr.com/api/profile?apikey=YOUR_KEY"

Set Display Name

GET / POST/api/profile/name
ParamRequiredDescription
namerequiredNew display name
curl "http://www.walinkr.com/api/profile/name?apikey=YOUR_KEY&name=My+Business"

Set Status / About

GET / POST/api/profile/status
ParamRequiredDescription
statusrequiredNew about/status text
curl "http://www.walinkr.com/api/profile/status?apikey=YOUR_KEY&status=Available"

Get Webhook URL

GET/api/webhook

Returns {"webhook_url": "..." | null}.

curl "http://www.walinkr.com/api/webhook?apikey=YOUR_KEY"

Set Webhook URL

GET / POST/api/webhook/set
ParamRequiredDescription
webhook_urlrequiredURL we POST incoming messages to
curl "http://www.walinkr.com/api/webhook/set?apikey=YOUR_KEY&webhook_url=https://your-app.com/webhook"

Remove Webhook

GET / POST/api/webhook/remove
curl "http://www.walinkr.com/api/webhook/remove?apikey=YOUR_KEY"

Incoming Payload Format

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
  }
}
Connection events

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"
}

Session Info

GET/api/session

Each 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"
Example response
{"status": "WORKING", "engine": "NOWEB", "phone": "923001234567@c.us"}

Restart Session

GET / POST/api/session/restart

Forces a reconnect — use if your session gets stuck.

curl "http://www.walinkr.com/api/session/restart?apikey=YOUR_KEY"

Usage Stats

GET/api/usage

Message counts for today, this week, and all time, plus your success rate.

curl "http://www.walinkr.com/api/usage?apikey=YOUR_KEY"
Example response
{"today": 12, "week": 84, "total_sent": 512, "total_received": 201, "success_rate": 98.4, "daily": [...]}