WAY API Documentation

Dokumentasi ini hanya menampilkan endpoint umum/customer. Endpoint administrator tidak dipublikasikan.

153 endpoint 19 kategori Catalog 2026-10-18T06:40 UTC

Authentication

Customer API menggunakan Bearer API key WAY.

Authorization: Bearer way_xxxxxxxxx

Universal WAY Gateway

POST /api/v1/way/{instance_id}/execute
{
  "method": "POST",
  "path": "/api/sendText",
  "body": {
    "chatId": "62812xxx@c.us",
    "text": "Hello"
  }
}
153 endpoint

Instances

2 endpoint
GET /api/v1/instances
List WhatsApp instances Menampilkan seluruh instance milik API key customer.
GET /api/v1/instances/{instance_id}
Get WhatsApp instance Mengambil status dan informasi satu instance.

Messaging

2 endpoint
POST /api/v1/messages/image
Send image shortcut Shortcut WAY untuk mengirim pesan gambar.
POST /api/v1/messages/text
Send text shortcut Shortcut WAY untuk mengirim pesan teks.

WAY Core

2 endpoint
GET /api/v1/catalog
Daftar seluruh WAY API Mengembalikan katalog endpoint publik WAY yang tersedia.
GET /api/v1/health
Health check WAY API Memeriksa status layanan WAY.my.id.

WAY Gateway

1 endpoint
POST /api/v1/way/{instance_id}/execute
Universal WAY execute Menjalankan endpoint tenant-safe melalui satu gateway WAY.

✅ Presence

4 endpoint
GET /api/v1/way/{instance_id}/proxy/api/{session}/presence
Get all subscribed presence information.
POST /api/v1/way/{instance_id}/proxy/api/{session}/presence
Set session presence
GET /api/v1/way/{instance_id}/proxy/api/{session}/presence/{chatId}
Get the presence for the chat id. If it hasn't been subscribed - it also subscribes to it.
POST /api/v1/way/{instance_id}/proxy/api/{session}/presence/{chatId}/subscribe
Subscribe to presence events for the chat.

🆔 Profile

5 endpoint
GET /api/v1/way/{instance_id}/proxy/api/{session}/profile
Get my profile
PUT /api/v1/way/{instance_id}/proxy/api/{session}/profile/name
Set my profile name
DELETE /api/v1/way/{instance_id}/proxy/api/{session}/profile/picture
Delete profile picture
PUT /api/v1/way/{instance_id}/proxy/api/{session}/profile/picture
Set profile picture
PUT /api/v1/way/{instance_id}/proxy/api/{session}/profile/status
Set profile status (About)

🏷️ Labels

7 endpoint
GET /api/v1/way/{instance_id}/proxy/api/{session}/labels
Get all labels
POST /api/v1/way/{instance_id}/proxy/api/{session}/labels
Create a new label
GET /api/v1/way/{instance_id}/proxy/api/{session}/labels/chats/{chatId}
Get labels for the chat
PUT /api/v1/way/{instance_id}/proxy/api/{session}/labels/chats/{chatId}
Save labels for the chat
DELETE /api/v1/way/{instance_id}/proxy/api/{session}/labels/{labelId}
Delete a label
PUT /api/v1/way/{instance_id}/proxy/api/{session}/labels/{labelId}
Update a label
GET /api/v1/way/{instance_id}/proxy/api/{session}/labels/{labelId}/chats
Get chats by label

👤 Contacts

13 endpoint
GET /api/v1/way/{instance_id}/proxy/api/contacts
Get contact basic info The method always return result, even if the phone number is not registered in WhatsApp. For that - use /contacts/check-exists endpoint below.
GET /api/v1/way/{instance_id}/proxy/api/contacts/about
Gets the Contact's "about" info Returns null if you do not have permission to read their status.
GET /api/v1/way/{instance_id}/proxy/api/contacts/all
Get all contacts
POST /api/v1/way/{instance_id}/proxy/api/contacts/block
Block contact
GET /api/v1/way/{instance_id}/proxy/api/contacts/check-exists
Check phone number is registered in WhatsApp.
GET /api/v1/way/{instance_id}/proxy/api/contacts/profile-picture
Get contact's profile picture URL If privacy settings do not allow to get the picture, the method will return null.
POST /api/v1/way/{instance_id}/proxy/api/contacts/unblock
Unblock contact
PUT /api/v1/way/{instance_id}/proxy/api/{session}/contacts/{chatId}
Create or update contact Create or update contact on the phone address book. May not work if you have installed many WhatsApp apps on the same phone
GET /api/v1/way/{instance_id}/proxy/api/{session}/contacts/{id}
Get contact basic info The method always return result, even if the phone number is not registered in WhatsApp. For that - use /contacts/check-exists endpoint below.
GET /api/v1/way/{instance_id}/proxy/api/{session}/lids
Get all known lids to phone number mapping
GET /api/v1/way/{instance_id}/proxy/api/{session}/lids/count
Get the number of known lids
GET /api/v1/way/{instance_id}/proxy/api/{session}/lids/pn/{phoneNumber}
Get lid by phone number (chat id)
GET /api/v1/way/{instance_id}/proxy/api/{session}/lids/{lid}
Get phone number by lid

👥 Groups

33 endpoint
GET /api/v1/way/{instance_id}/proxy/api/{session}/groups
Get all groups.
POST /api/v1/way/{instance_id}/proxy/api/{session}/groups
Create a new group.
GET /api/v1/way/{instance_id}/proxy/api/{session}/groups/count
Get the number of groups.
POST /api/v1/way/{instance_id}/proxy/api/{session}/groups/join
Join group via code
GET /api/v1/way/{instance_id}/proxy/api/{session}/groups/join-info
Get info about the group before joining.
POST /api/v1/way/{instance_id}/proxy/api/{session}/groups/refresh
Refresh groups from the server.
DELETE /api/v1/way/{instance_id}/proxy/api/{session}/groups/{id}
Delete the group.
GET /api/v1/way/{instance_id}/proxy/api/{session}/groups/{id}
Get the group.
POST /api/v1/way/{instance_id}/proxy/api/{session}/groups/{id}/admin/demote
Demotes participants to regular users.
POST /api/v1/way/{instance_id}/proxy/api/{session}/groups/{id}/admin/promote
Promote participants to admin users.
PUT /api/v1/way/{instance_id}/proxy/api/{session}/groups/{id}/description
Updates the group description. Returns "true" if the subject was properly updated. This can return "false" if the user does not have the necessary permissions.
GET /api/v1/way/{instance_id}/proxy/api/{session}/groups/{id}/invite-code
Gets the invite code for the group.
POST /api/v1/way/{instance_id}/proxy/api/{session}/groups/{id}/invite-code/revoke
Invalidates the current group invite code and generates a new one.
POST /api/v1/way/{instance_id}/proxy/api/{session}/groups/{id}/leave
Leave the group.
GET /api/v1/way/{instance_id}/proxy/api/{session}/groups/{id}/participants
Get participants
POST /api/v1/way/{instance_id}/proxy/api/{session}/groups/{id}/participants/add
Add participants
GET /api/v1/way/{instance_id}/proxy/api/{session}/groups/{id}/participants/join-requests
Get pending requests to join the group
POST /api/v1/way/{instance_id}/proxy/api/{session}/groups/{id}/participants/join-requests/approve
Approve pending requests to join the group
POST /api/v1/way/{instance_id}/proxy/api/{session}/groups/{id}/participants/join-requests/reject
Reject pending requests to join the group
POST /api/v1/way/{instance_id}/proxy/api/{session}/groups/{id}/participants/remove
Remove participants
GET /api/v1/way/{instance_id}/proxy/api/{session}/groups/{id}/participants/v2
Get group participants.
DELETE /api/v1/way/{instance_id}/proxy/api/{session}/groups/{id}/picture
Delete group picture
GET /api/v1/way/{instance_id}/proxy/api/{session}/groups/{id}/picture
Get group picture
PUT /api/v1/way/{instance_id}/proxy/api/{session}/groups/{id}/picture
Set group picture
GET /api/v1/way/{instance_id}/proxy/api/{session}/groups/{id}/settings/security/info-admin-only
Get the group's 'info admin only' settings. You can allow only admins to edit group info (title, description, photo).
PUT /api/v1/way/{instance_id}/proxy/api/{session}/groups/{id}/settings/security/info-admin-only
Updates the group "info admin only" settings. You can allow only admins to edit group info (title, description, photo).
GET /api/v1/way/{instance_id}/proxy/api/{session}/groups/{id}/settings/security/member-add-mode
Get settings - who can add new members The group settings for who can add new members to the group - all members or admins only.
PUT /api/v1/way/{instance_id}/proxy/api/{session}/groups/{id}/settings/security/member-add-mode
Update settings - who can add new members Updates the group settings for who can add new members to the group - all members or admins only.
GET /api/v1/way/{instance_id}/proxy/api/{session}/groups/{id}/settings/security/membership-approval
Get settings - approve new members Returns whether admin approval is required for users requesting to join the group.
PUT /api/v1/way/{instance_id}/proxy/api/{session}/groups/{id}/settings/security/membership-approval
Update settings - approve new members Enables or disables admin approval for users requesting to join the group.
GET /api/v1/way/{instance_id}/proxy/api/{session}/groups/{id}/settings/security/messages-admin-only
Get settings - who can send messages The group settings to only allow admins to send messages.
PUT /api/v1/way/{instance_id}/proxy/api/{session}/groups/{id}/settings/security/messages-admin-only
Update settings - who can send messages Updates the group settings to only allow admins to send messages.
PUT /api/v1/way/{instance_id}/proxy/api/{session}/groups/{id}/subject
Updates the group subject Returns "true" if the subject was properly updated. This can return "false" if the user does not have the necessary permissions.

💬 Chats

16 endpoint
GET /api/v1/way/{instance_id}/proxy/api/{session}/chats
Get chats
GET /api/v1/way/{instance_id}/proxy/api/{session}/chats/overview
Get chats overview. Includes all necessary things to build UI "your chats overview" page - chat id, name, picture, last message. Sorting by last message timestamp
POST /api/v1/way/{instance_id}/proxy/api/{session}/chats/overview
Get chats overview. Use POST if you have too many "ids" params - GET can limit it
DELETE /api/v1/way/{instance_id}/proxy/api/{session}/chats/{chatId}
Deletes the chat
POST /api/v1/way/{instance_id}/proxy/api/{session}/chats/{chatId}/archive
Archive the chat
DELETE /api/v1/way/{instance_id}/proxy/api/{session}/chats/{chatId}/messages
Clears all messages from the chat
GET /api/v1/way/{instance_id}/proxy/api/{session}/chats/{chatId}/messages
Gets messages in the chat
POST /api/v1/way/{instance_id}/proxy/api/{session}/chats/{chatId}/messages/read
Read unread messages in the chat
DELETE /api/v1/way/{instance_id}/proxy/api/{session}/chats/{chatId}/messages/{messageId}
Deletes a message from the chat
GET /api/v1/way/{instance_id}/proxy/api/{session}/chats/{chatId}/messages/{messageId}
Gets message by id
PUT /api/v1/way/{instance_id}/proxy/api/{session}/chats/{chatId}/messages/{messageId}
Edits a message in the chat
POST /api/v1/way/{instance_id}/proxy/api/{session}/chats/{chatId}/messages/{messageId}/pin
Pins a message in the chat
POST /api/v1/way/{instance_id}/proxy/api/{session}/chats/{chatId}/messages/{messageId}/unpin
Unpins a message in the chat
GET /api/v1/way/{instance_id}/proxy/api/{session}/chats/{chatId}/picture
Gets chat picture
POST /api/v1/way/{instance_id}/proxy/api/{session}/chats/{chatId}/unarchive
Unarchive the chat
POST /api/v1/way/{instance_id}/proxy/api/{session}/chats/{chatId}/unread
Unread the chat

📅 Events

1 endpoint
POST /api/v1/way/{instance_id}/proxy/api/{session}/events
Send an event message

📞 Calls

1 endpoint
POST /api/v1/way/{instance_id}/proxy/api/{session}/calls/reject
Reject incoming call

📢 Channels

14 endpoint
GET /api/v1/way/{instance_id}/proxy/api/{session}/channels
Get list of know channels
POST /api/v1/way/{instance_id}/proxy/api/{session}/channels
Create a new channel.
POST /api/v1/way/{instance_id}/proxy/api/{session}/channels/search/by-text
Search for channels (by text)
POST /api/v1/way/{instance_id}/proxy/api/{session}/channels/search/by-view
Search for channels (by view)
GET /api/v1/way/{instance_id}/proxy/api/{session}/channels/search/categories
Get list of categories for channel search
GET /api/v1/way/{instance_id}/proxy/api/{session}/channels/search/countries
Get list of countries for channel search
GET /api/v1/way/{instance_id}/proxy/api/{session}/channels/search/views
Get list of views for channel search
DELETE /api/v1/way/{instance_id}/proxy/api/{session}/channels/{id}
Delete the channel.
GET /api/v1/way/{instance_id}/proxy/api/{session}/channels/{id}
Get the channel info You can use either id (123@newsletter) OR invite code (https://www.whatsapp.com/channel/123)
POST /api/v1/way/{instance_id}/proxy/api/{session}/channels/{id}/follow
Follow the channel.
GET /api/v1/way/{instance_id}/proxy/api/{session}/channels/{id}/messages/preview
Preview channel messages You can use either invite code (https://www.whatsapp.com/channel/123) or (123)ORChannel ID (123@newsletter).
POST /api/v1/way/{instance_id}/proxy/api/{session}/channels/{id}/mute
Mute the channel.
POST /api/v1/way/{instance_id}/proxy/api/{session}/channels/{id}/unfollow
Unfollow the channel.
POST /api/v1/way/{instance_id}/proxy/api/{session}/channels/{id}/unmute
Unmute the channel.

📤 Chatting

26 endpoint
GET /api/v1/way/{instance_id}/proxy/api/checkNumberStatus
Check number status DEPRECATED. Use "POST /contacts/check-exists" instead
POST /api/v1/way/{instance_id}/proxy/api/forwardMessage
ChattingController_forwardMessage
GET /api/v1/way/{instance_id}/proxy/api/messages
Get messages in a chat DEPRECATED. Use "GET /api/chats/{id}/messages" instead
PUT /api/v1/way/{instance_id}/proxy/api/reaction
React to a message with an emoji
POST /api/v1/way/{instance_id}/proxy/api/reply
DEPRECATED - you can set "reply_to" field when sending text, image, etc
POST /api/v1/way/{instance_id}/proxy/api/send/buttons/reply
Reply on a button message
POST /api/v1/way/{instance_id}/proxy/api/send/link-custom-preview
Send a text message with a CUSTOM link preview. You can use regular /api/sendText if you wanna send auto-generated link preview.
POST /api/v1/way/{instance_id}/proxy/api/sendButtons
Send buttons message (interactive) Send Buttons
POST /api/v1/way/{instance_id}/proxy/api/sendContactVcard
ChattingController_sendContactVcard
POST /api/v1/way/{instance_id}/proxy/api/sendFile
Send a file Either from an URL or base64 data - look at the request schemas for details.
POST /api/v1/way/{instance_id}/proxy/api/sendImage
Send an image Either from an URL or base64 data - look at the request schemas for details.
POST /api/v1/way/{instance_id}/proxy/api/sendLinkPreview
POST /api/v1/way/{instance_id}/proxy/api/sendList
Send a list message (interactive) Send a List message with sections and rows
POST /api/v1/way/{instance_id}/proxy/api/sendLocation
ChattingController_sendLocation
POST /api/v1/way/{instance_id}/proxy/api/sendPoll
Send a poll with options You can use it as buttons or list replacement
POST /api/v1/way/{instance_id}/proxy/api/sendPollVote
Vote on a poll Cast vote(s) on an existing poll message
POST /api/v1/way/{instance_id}/proxy/api/sendSeen
ChattingController_sendSeen
POST /api/v1/way/{instance_id}/proxy/api/sendSticker
Send a sticker The image will not be converted. It must already be in WebP format. PNG and JPEG are not supported.
GET /api/v1/way/{instance_id}/proxy/api/sendText
Send a text message
POST /api/v1/way/{instance_id}/proxy/api/sendText
Send a text message
POST /api/v1/way/{instance_id}/proxy/api/sendVideo
Send a video Either from an URL or base64 data - look at the request schemas for details.
POST /api/v1/way/{instance_id}/proxy/api/sendVoice
Send an voice message Either from an URL or base64 data - look at the request schemas for details.
PUT /api/v1/way/{instance_id}/proxy/api/star
Star or unstar a message
POST /api/v1/way/{instance_id}/proxy/api/startTyping
ChattingController_startTyping
POST /api/v1/way/{instance_id}/proxy/api/stopTyping
ChattingController_stopTyping
GET /api/v1/way/{instance_id}/proxy/api/{session}/new-message-id
Generate a new message ID

📱 Pairing

7 endpoint
GET /api/v1/way/{instance_id}/proxy/api/screenshot
Get a screenshot of the current WhatsApp session (**WEBJS/WPP** only)
POST /api/v1/way/{instance_id}/proxy/api/{session}/auth/passkey
Submit a WebAuthn passkey assertion to finish pairing.
GET /api/v1/way/{instance_id}/proxy/api/{session}/auth/passkey/challenge
Get the pending passkey (WebAuthn) challenge. Available while the session is in PASSKEY_REQUIRED status. Pass the challenge to navigator.credentials.get({ publicKey: challenge }) on the https://web.whatsapp.com origin.
POST /api/v1/way/{instance_id}/proxy/api/{session}/auth/passkey/confirm
Confirm passkey pairing (only needed for the manual code case).
GET /api/v1/way/{instance_id}/proxy/api/{session}/auth/passkey/confirmation
Get the pending passkey confirmation code. Available while the session is in PASSKEY_CONFIRMATION_REQUIRED status. Most pairings skip this step - WhatsApp confirms them right after the assertion.
GET /api/v1/way/{instance_id}/proxy/api/{session}/auth/qr
Get QR code for pairing WhatsApp API.
POST /api/v1/way/{instance_id}/proxy/api/{session}/auth/request-code
Request authentication code.

🔍 Observability

1 endpoint
GET /api/v1/way/{instance_id}/proxy/api/version
Get the server version Use 'GET /api/server/version' instead

🖥️ Sessions

10 endpoint
DELETE /api/v1/way/{instance_id}/proxy/api/sessions/{session}
Delete the session Delete the session with the given name. Stop and logout as well. Idempotent operation.
GET /api/v1/way/{instance_id}/proxy/api/sessions/{session}
Get session information
PUT /api/v1/way/{instance_id}/proxy/api/sessions/{session}
Update a session
GET /api/v1/way/{instance_id}/proxy/api/sessions/{session}/capping
Fetch the account new-chat message capping (per-cycle quota) Fetch a fresh new-chat message capping (quota) state from WhatsApp. The same value is also available under me.messageCapping in the session info, and changes are pushed through the session.status event.
POST /api/v1/way/{instance_id}/proxy/api/sessions/{session}/logout
Logout from the session Logout the session, restart a session if it was not STOPPED
GET /api/v1/way/{instance_id}/proxy/api/sessions/{session}/me
Get information about the authenticated account
POST /api/v1/way/{instance_id}/proxy/api/sessions/{session}/restart
Restart the session Restart the session with the given name.
POST /api/v1/way/{instance_id}/proxy/api/sessions/{session}/start
Start the session Start the session with the given name. The session must exist. Idempotent operation.
POST /api/v1/way/{instance_id}/proxy/api/sessions/{session}/stop
Stop the session Stop the session with the given name. Idempotent operation.
GET /api/v1/way/{instance_id}/proxy/api/sessions/{session}/timelock
Fetch the account reachout timelock state Fetch a fresh reachout timelock state from WhatsApp - the restriction behind "server returned error 463" when messaging new contacts. The same value is also available under me.reachoutTimelock in the session info, and changes are pushed through the session.status event.

🖼️ Media

2 endpoint
POST /api/v1/way/{instance_id}/proxy/api/{session}/media/convert/video
Convert video to WhatsApp format (mp4)
POST /api/v1/way/{instance_id}/proxy/api/{session}/media/convert/voice
Convert voice to WhatsApp format (opus)

🟢 Status

6 endpoint
POST /api/v1/way/{instance_id}/proxy/api/{session}/status/delete
DELETE sent status
POST /api/v1/way/{instance_id}/proxy/api/{session}/status/image
Send image status
GET /api/v1/way/{instance_id}/proxy/api/{session}/status/new-message-id
Generate message ID you can use to batch contacts
POST /api/v1/way/{instance_id}/proxy/api/{session}/status/text
Send text status
POST /api/v1/way/{instance_id}/proxy/api/{session}/status/video
Send video status
POST /api/v1/way/{instance_id}/proxy/api/{session}/status/voice
Send voice status

Endpoint tidak ditemukan

Ubah kata pencarian untuk melihat endpoint lain.

✆