API Documentation
Welcome to the WAsyik API documentation. Build powerful WhatsApp integrations with our RESTful API. Our API and SDKs enable you to send messages, manage groups, and handle incoming events with ease.
Region Support
Saat ini WAsyik API dioptimalkan hanya untuk nomor tujuan Indonesia (+62). Sistem akan secara otomatis melakukan normalisasi nomor lokal (08xxx) menjadi format internasional (628xxx).
Base URL
All requests should be made to this base URL:
https://wasyik.id/api/v2
# Authentication
All API requests require authentication using an API key. You can generate multiple API keys from your dashboard. Include your API key in the Authorization: Bearer or X-Access-Key header of your requests.
Authorization: Bearer YOUR_API_KEY X-Access-Key: YOUR_API_KEY Content-Type: application/json
Security Note: Keep your API key secure. Never expose it in client-side code (frontend) or public repositories. If a key is compromised, revoke it immediately in the dashboard.
# Rate Limits
To ensure stability and fair usage, the WAsyik API implements rate limiting based on your current plan subscriptions.
Message Limits
Limits apply to the total messages sent per 24-hour period. Free users are limited to 50 msgs/day.
Request Limits
Standard rate limit is 60 requests per minute. Exceeding this will return a 429 status code.
Devices
Scan QR Code
Free+ PlanGenerate and return a QR code for a specific account to link a phone.
Endpoint URL
/api/v2/messaging/whatsapp/accounts/scan-qrcode
{
"accountId": "YOUR_INSTANCE_UUID"
}
{
"data": {
"responseCode": "00",
"QRCode": "data:image\/png;base64,...",
"Timeout": 60
}
}
List Devices
Free+ PlanRetrieve all your registered WhatsApp instances and their current connection status.
Endpoint URL
/api/v2/messaging/whatsapp/accounts
{
"data": {
"responseCode": "00",
"accounts": [
{
"accountId": "uuid",
"accountName": "CS 1",
"whatsapp_number": "628xxx",
"status": "active",
"whatsapp_status": "connected"
}
]
}
}
Device Connection Status
Free+ PlanCheck real-time connection status of a specific device from the WhatsApp backend.
Endpoint URL
/api/v2/messaging/whatsapp/accounts/status?accountId={uuid}
{
"data": {
"responseCode": "00",
"isConnected": true,
"whatsapp_status": "connected"
}
}
Disconnect Device
Free+ PlanForce a logout and disconnect a specific WhatsApp instance.
Endpoint URL
/api/v2/messaging/whatsapp/accounts/disconnect
{
"accountId": "YOUR_INSTANCE_UUID"
}
{
"data": {
"responseCode": "00",
"message": "Device disconnected successfully"
}
}
Messages
Direct Message (Individual)
Free+ PlanSend any type of message (text, image, doc, etc) to a single recipient. Available for all plans.
Endpoint URL
/api/v2/messaging/whatsapp/message
{
"accountId": "uuid",
"to": "628xxx",
"messageType": "text",
"content": "Hello!"
}
{
"data": {
"responseCode": "00",
"message": "success",
"messageId": "msg-123",
"status": "sent"
}
}
Broadcast Message (Multi-Recipient)
Business+ PlanSend a message to multiple recipients at once. Exclusive to the Business plan.
Endpoint URL
/api/v2/messaging/whatsapp/broadcast
{
"accountId": "uuid",
"to": [
"628xxx",
"628yyy"
],
"messageType": "text",
"content": "Hello fans!"
}
{
"data": {
"responseCode": "00",
"message": "Broadcast queued for 2 recipients"
}
}
Send Text
Free+ PlanSend a high-speed text message to a single recipient.
Endpoint URL
/api/v2/messaging/whatsapp/send-text
{
"accountId": "uuid",
"to": "628xxx",
"text": "Hello world!"
}
{
"data": {
"responseCode": "00",
"messageId": "msg-123",
"status": "sent"
}
}
Send Image
Pro+ PlanSend an image via URL to a single recipient.
Endpoint URL
/api/v2/messaging/whatsapp/send-image
{
"accountId": "uuid",
"to": "628xxx",
"url": "https:\/\/domain.com\/photo.jpg",
"caption": "Photo description"
}
{
"data": {
"responseCode": "00",
"messageId": "msg-124",
"status": "sent"
}
}
Send Document
Pro+ PlanSend documents (PDF, Docx, xlsx, etc) to a single recipient.
Endpoint URL
/api/v2/messaging/whatsapp/send-document
{
"accountId": "uuid",
"to": "628xxx",
"url": "https:\/\/domain.com\/file.pdf",
"fileName": "invoice.pdf",
"mimetype": "application\/pdf"
}
{
"data": {
"responseCode": "00",
"messageId": "msg-125",
"status": "sent"
}
}
Groups
List All Groups
Hobby+ PlanFetch all groups where the authenticated instance is a participant.
Endpoint URL
/api/v2/messaging/whatsapp/accounts/groups?accountId={uuid}
{
"data": {
"responseCode": "00",
"groups": [
{
"GroupId": "123@g.us",
"Name": "IT Team"
}
]
}
}
Send to Group
Hobby+ PlanBroadcast a message to an entire WhatsApp group.
Endpoint URL
/api/v2/messaging/whatsapp/send-group
{
"accountId": "uuid",
"groupId": "123@g.us",
"text": "Team Meeting at 10 AM"
}
{
"data": {
"responseCode": "00",
"messageId": "msg-grp-1",
"status": "sent"
}
}
Send Group Media
Business+ PlanSend media files (image, video, or document) to a WhatsApp group. Requires the send_group_media feature in your plan. Supports IMAGE, VIDEO, and DOCUMENT types with optional captions.
Endpoint URL
/api/v2/messaging/whatsapp/send-group-media
{
"accountId": "YOUR_INSTANCE_UUID",
"groupId": "120363xxxx@g.us",
"messageType": "IMAGE",
"url": "https:\/\/domain.com\/promo-banner.jpg",
"caption": "New promo this week!"
}
{
"data": {
"responseCode": "00",
"message": "success",
"messageId": "msg-grp-media-1",
"status": "sent"
}
}
Scheduler & Reminder
Schedule Message
Pro+ PlanSchedule a WhatsApp message for future delivery. Supports Text, Image, and Document types.
Endpoint URL
/api/v2/api/v2/messaging/whatsapp/schedule
{
"accountId": "string (Required)",
"to": "string (Required, e.g. 628123456789)",
"messageType": "TEXT | IMAGE | DOCUMENT",
"content": "string (Message text or caption)",
"scheduled_at": "YYYY-MM-DD HH:mm:ss (WIB)",
"url_file": "string (Required for IMAGE\/DOCUMENT)"
}
{
"data": {
"responseCode": "00",
"message": "Message scheduled successfully",
"scheduleId": 123,
"scheduled_at": "2026-03-30T15:00:00+07:00"
}
}
Get Scheduled Queue
Pro+ PlanRetrieve a list of your pending scheduled messages.
Endpoint URL
/api/v2/api/v2/messaging/whatsapp/scheduled
{
"data": [
{
"id": 123,
"to": "628123456789",
"type": "TEXT",
"scheduled_at": "2026-03-30T15:00:00+07:00",
"status": "pending"
}
]
}
Scheduler
Schedule Media Message
Pro+ PlanSchedule a media message (image, video, document) for future delivery. Include the url field for the media source and specify the messageType accordingly. The fileName and mimetype fields are optional but recommended for DOCUMENT types.
Endpoint URL
/api/v2/messaging/whatsapp/schedule
{
"accountId": "YOUR_INSTANCE_UUID",
"to": "6281234567890",
"messageType": "DOCUMENT",
"content": "Monthly invoice attached",
"url": "https:\/\/domain.com\/invoice-march.pdf",
"fileName": "invoice-march.pdf",
"mimetype": "application\/pdf",
"scheduled_at": "2026-04-01T08:00:00+07:00"
}
{
"data": {
"responseCode": "00",
"message": "Message scheduled successfully",
"scheduleId": 43,
"scheduled_at": "2026-04-01T01:00:00.000000Z"
}
}
List Scheduled Messages
Pro+ PlanRetrieve all scheduled messages for the authenticated user. Returns pending, sent, and failed messages sorted by scheduled delivery time. Use this endpoint to monitor the status of your scheduled campaigns.
Endpoint URL
/api/v2/messaging/whatsapp/scheduled
{
"data": {
"responseCode": "00",
"scheduled_messages": [
{
"id": 42,
"to": "6281234567890@s.whatsapp.net",
"type": "TEXT",
"payload": {
"message": "Hello! Scheduled reminder."
},
"scheduled_at": "2026-04-01T02:00:00.000000Z",
"status": "pending",
"error_message": null,
"created_at": "2026-03-28T16:00:00.000000Z"
}
]
}
}
Cancel Scheduled Message
Pro+ PlanCancel a pending scheduled message before it is sent. Only messages with status "pending" can be cancelled. Once a message has been sent or has failed, it cannot be deleted via this endpoint. Replace {id} with the scheduleId returned from the schedule endpoint.
Endpoint URL
/api/v2/messaging/whatsapp/schedule/{id}
{
"data": {
"responseCode": "00",
"message": "Scheduled message cancelled successfully"
}
}
Webhooks
Incoming Message
Hobby+ PlanWhen a message is received on your WhatsApp account, the system automatically forwards it to the webhook URL configured on your instance. The payload is signed using HMAC-SHA256 with your webhook secret. Verify the signature via the X-Zuwinda-Signature header to ensure authenticity.
Endpoint URL
/api/v2(Your Webhook URL)
{
"data": {
"event": "messaging.whatsapp.message.incoming",
"accountId": "YOUR_INSTANCE_UUID",
"whatsapp_number": "628123xxxx",
"from": "6289876xxxx",
"messageType": "conversation",
"text": {
"body": "Hello, I need help!"
},
"timestamp": "2026-03-28T16:00:00.000000Z"
}
}
Message Status Update
Business+ PlanAdvanced Webhook — Receive real-time status updates for messages you've sent. The system tracks delivery lifecycle events: "sent" (server received), "delivered" (recipient device received), "read" (recipient opened), and "played" (for audio/video messages). Requires the advance_webhook feature in your plan. Payload is HMAC-SHA256 signed.
Endpoint URL
/api/v2(Your Webhook URL)
{
"data": {
"event": "messaging.whatsapp.message.update",
"accountId": "YOUR_INSTANCE_UUID",
"messageId": "BAE5xxxx",
"remoteJid": "6281234567890@s.whatsapp.net",
"status": "read",
"timestamp": "2026-03-28T16:05:00.000000Z"
}
}
Downtime Notification
Business+ PlanReceive instant alerts when your WhatsApp device goes offline unexpectedly. The payload includes the disconnect reason code and whether the system will attempt automatic reconnection. Requires the downtime_notification feature in your plan. Use this to build monitoring dashboards or trigger fallback messaging flows.
Endpoint URL
/api/v2(Your Webhook URL)
{
"data": {
"event": "device.disconnected",
"accountId": "YOUR_INSTANCE_UUID",
"whatsapp_number": "628123xxxx",
"reason": 515,
"shouldReconnect": true,
"timestamp": "2026-03-28T16:10:00.000000Z"
}
}
WEBHOOKS
Signature Verification
To ensure the security of your webhook notifications, WAsyik signs all payloads with an HMAC-SHA256 signature using your account's Webhook Secret.
// PHP Verification Example
$signature = hash_hmac('sha256', json_encode($payload), $webhook_secret);
$headerSignature = $request->header('X-Zuwinda-Signature');
if (hash_equals($signature, $headerSignature)) {
// Request is authentic
}