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.

Request Headers
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

POST

Scan QR Code

Free+ Plan

Generate and return a QR code for a specific account to link a phone.

Endpoint URL

/api/v2/messaging/whatsapp/accounts/scan-qrcode
Payload
{
    "accountId": "YOUR_INSTANCE_UUID"
}
Success Response
{
    "data": {
        "responseCode": "00",
        "QRCode": "data:image\/png;base64,...",
        "Timeout": 60
    }
}
GET

List Devices

Free+ Plan

Retrieve all your registered WhatsApp instances and their current connection status.

Endpoint URL

/api/v2/messaging/whatsapp/accounts
Success Response
{
    "data": {
        "responseCode": "00",
        "accounts": [
            {
                "accountId": "uuid",
                "accountName": "CS 1",
                "whatsapp_number": "628xxx",
                "status": "active",
                "whatsapp_status": "connected"
            }
        ]
    }
}
GET

Device Connection Status

Free+ Plan

Check real-time connection status of a specific device from the WhatsApp backend.

Endpoint URL

/api/v2/messaging/whatsapp/accounts/status?accountId={uuid}
Success Response
{
    "data": {
        "responseCode": "00",
        "isConnected": true,
        "whatsapp_status": "connected"
    }
}
POST

Disconnect Device

Free+ Plan

Force a logout and disconnect a specific WhatsApp instance.

Endpoint URL

/api/v2/messaging/whatsapp/accounts/disconnect
Payload
{
    "accountId": "YOUR_INSTANCE_UUID"
}
Success Response
{
    "data": {
        "responseCode": "00",
        "message": "Device disconnected successfully"
    }
}

Messages

POST

Direct Message (Individual)

Free+ Plan

Send any type of message (text, image, doc, etc) to a single recipient. Available for all plans.

Endpoint URL

/api/v2/messaging/whatsapp/message
Payload
{
    "accountId": "uuid",
    "to": "628xxx",
    "messageType": "text",
    "content": "Hello!"
}
Success Response
{
    "data": {
        "responseCode": "00",
        "message": "success",
        "messageId": "msg-123",
        "status": "sent"
    }
}
POST

Broadcast Message (Multi-Recipient)

Business+ Plan

Send a message to multiple recipients at once. Exclusive to the Business plan.

Endpoint URL

/api/v2/messaging/whatsapp/broadcast
Payload
{
    "accountId": "uuid",
    "to": [
        "628xxx",
        "628yyy"
    ],
    "messageType": "text",
    "content": "Hello fans!"
}
Success Response
{
    "data": {
        "responseCode": "00",
        "message": "Broadcast queued for 2 recipients"
    }
}
POST

Send Text

Free+ Plan

Send a high-speed text message to a single recipient.

Endpoint URL

/api/v2/messaging/whatsapp/send-text
Payload
{
    "accountId": "uuid",
    "to": "628xxx",
    "text": "Hello world!"
}
Success Response
{
    "data": {
        "responseCode": "00",
        "messageId": "msg-123",
        "status": "sent"
    }
}
POST

Send Image

Pro+ Plan

Send an image via URL to a single recipient.

Endpoint URL

/api/v2/messaging/whatsapp/send-image
Payload
{
    "accountId": "uuid",
    "to": "628xxx",
    "url": "https:\/\/domain.com\/photo.jpg",
    "caption": "Photo description"
}
Success Response
{
    "data": {
        "responseCode": "00",
        "messageId": "msg-124",
        "status": "sent"
    }
}
POST

Send Document

Pro+ Plan

Send documents (PDF, Docx, xlsx, etc) to a single recipient.

Endpoint URL

/api/v2/messaging/whatsapp/send-document
Payload
{
    "accountId": "uuid",
    "to": "628xxx",
    "url": "https:\/\/domain.com\/file.pdf",
    "fileName": "invoice.pdf",
    "mimetype": "application\/pdf"
}
Success Response
{
    "data": {
        "responseCode": "00",
        "messageId": "msg-125",
        "status": "sent"
    }
}

Groups

GET

List All Groups

Hobby+ Plan

Fetch all groups where the authenticated instance is a participant.

Endpoint URL

/api/v2/messaging/whatsapp/accounts/groups?accountId={uuid}
Success Response
{
    "data": {
        "responseCode": "00",
        "groups": [
            {
                "GroupId": "123@g.us",
                "Name": "IT Team"
            }
        ]
    }
}
POST

Send to Group

Hobby+ Plan

Broadcast a message to an entire WhatsApp group.

Endpoint URL

/api/v2/messaging/whatsapp/send-group
Payload
{
    "accountId": "uuid",
    "groupId": "123@g.us",
    "text": "Team Meeting at 10 AM"
}
Success Response
{
    "data": {
        "responseCode": "00",
        "messageId": "msg-grp-1",
        "status": "sent"
    }
}
POST

Send Group Media

Business+ Plan

Send 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
Payload
{
    "accountId": "YOUR_INSTANCE_UUID",
    "groupId": "120363xxxx@g.us",
    "messageType": "IMAGE",
    "url": "https:\/\/domain.com\/promo-banner.jpg",
    "caption": "New promo this week!"
}
Success Response
{
    "data": {
        "responseCode": "00",
        "message": "success",
        "messageId": "msg-grp-media-1",
        "status": "sent"
    }
}

Scheduler & Reminder

POST

Schedule Message

Pro+ Plan

Schedule a WhatsApp message for future delivery. Supports Text, Image, and Document types.

Endpoint URL

/api/v2/api/v2/messaging/whatsapp/schedule
Payload
{
    "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)"
}
Success Response
{
    "data": {
        "responseCode": "00",
        "message": "Message scheduled successfully",
        "scheduleId": 123,
        "scheduled_at": "2026-03-30T15:00:00+07:00"
    }
}
GET

Get Scheduled Queue

Pro+ Plan

Retrieve a list of your pending scheduled messages.

Endpoint URL

/api/v2/api/v2/messaging/whatsapp/scheduled
Success Response
{
    "data": [
        {
            "id": 123,
            "to": "628123456789",
            "type": "TEXT",
            "scheduled_at": "2026-03-30T15:00:00+07:00",
            "status": "pending"
        }
    ]
}

Scheduler

POST

Schedule Media Message

Pro+ Plan

Schedule 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
Payload
{
    "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"
}
Success Response
{
    "data": {
        "responseCode": "00",
        "message": "Message scheduled successfully",
        "scheduleId": 43,
        "scheduled_at": "2026-04-01T01:00:00.000000Z"
    }
}
GET

List Scheduled Messages

Pro+ Plan

Retrieve 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
Success Response
{
    "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"
            }
        ]
    }
}
DELETE

Cancel Scheduled Message

Pro+ Plan

Cancel 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}
Success Response
{
    "data": {
        "responseCode": "00",
        "message": "Scheduled message cancelled successfully"
    }
}

Webhooks

POST

Incoming Message

Hobby+ Plan

When 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)
Success Response
{
    "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"
    }
}
POST

Message Status Update

Business+ Plan

Advanced 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)
Success Response
{
    "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"
    }
}
POST

Downtime Notification

Business+ Plan

Receive 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)
Success Response
{
    "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
}