Developer platform

Build WhatsApp into your application.

Connect your application to WhatsApp Business API through a developer-focused platform for messaging, webhooks, events, and operational visibility.

API access is included with WA Console plans.

Your application
POST /messages
WA Console
WhatsApp Cloud API
WhatsApp
webhook · X-Hub-Signature-256
WA Console
GET /webhooks/events
Your application
REQUEST
POST /messages HTTP/1.1Host: wa.draskenapis.comContent-Type: application/jsonx-access-key: ak_…x-secret-key: sk_… {  "phoneNumberId": "123456789012345",  "to": "919876543210",  "type": "template",  "templateName": "order_update",  "templateLanguage": "en_US"}
200 OK
{  "statusCode": 200,  "message": "Success",  "data": {    "id": 1842,    "metaMessageId": "wamid.HBgLOTE5…",    "phoneNumberId": "123456789012345",    "to": "919876543210",    "type": "template",    "status": "sent",    "templateName": "order_update",    "createdAt": "2026-08-17T12:04:22.000Z"  }}
How it works

One API connection between your application and WhatsApp.

Your application talks to WA Console over the API. WA Console owns the WhatsApp infrastructure layer — sending through Meta, receiving every lifecycle event back, and keeping it queryable.

Your application
POST /messages
WA Console
WhatsApp Cloud API
WhatsApp
webhook · X-Hub-Signature-256
WA Console
GET /webhooks/events
Your application

What an API key reaches

  • POST/messages
  • GET/messages
  • GET/messages/:id
  • GET/messages/analytics

Other routes — including the webhook event list — authenticate with your console session rather than an API key.

Messaging API

Send WhatsApp messages from your application.

Trigger WhatsApp messages from the systems your customers already use. One endpoint covers every message type the platform supports.

REQUEST
POST /messages HTTP/1.1Host: wa.draskenapis.comContent-Type: application/jsonx-access-key: ak_…x-secret-key: sk_… {  "phoneNumberId": "123456789012345",  "to": "919876543210",  "type": "template",  "templateName": "order_update",  "templateLanguage": "en_US"}
200 OK
{  "statusCode": 200,  "message": "Success",  "data": {    "id": 1842,    "metaMessageId": "wamid.HBgLOTE5…",    "phoneNumberId": "123456789012345",    "to": "919876543210",    "type": "template",    "status": "sent",    "templateName": "order_update",    "createdAt": "2026-08-17T12:04:22.000Z"  }}
  • Request received
  • Sent to WhatsApp
  • Accepted
  • Message stored

Supported message types

textimagevideoaudiodocumenttemplateinteractivelocationreactioncontacts
Authentication

Secure access to your WhatsApp infrastructure.

Requests carry a key pair issued by WA Console. Each key is scoped to a single WhatsApp Business Account, so a key can only ever act on the account it was created for.

Both headers are required on every request. Keep the secret key server-side — never ship it in a browser or mobile client.

Required headers

x-access-keyak_…

Public half of the key pair

x-secret-keysk_…

Secret half — server-side only

Your backendauthenticatedWA Console
401
{  "statusCode": 401,  "message": "API key headers missing"}
Webhooks

Every WhatsApp event, verified and kept.

Meta delivers WhatsApp lifecycle events to WA Console, which verifies the signature, acknowledges immediately and processes asynchronously. Your application reads those events back per WABA.

WA Console is the webhook receiver — it does not currently forward events on to your own server. Applications read stored events from GET /webhooks/events, which authenticates with your console session.
EVENT
{  "id": 90412,  "eventType": "messages",  "kind": "status_update",  "title": "Message delivered",  "status": "delivered",  "recipient": "919876543210",  "messageId": "wamid.HBgLOTE5…",  "wabaId": "123456789012345",  "processed": true,  "createdAt": "2026-08-17T12:04:23.000Z"}
READ
GET /webhooks/events?wabaId=…&page=1&limit=20

Verification

Incoming payloads must carry a valid X-Hub-Signature-256 HMAC. Anything without one is rejected, so what lands in your event list is what Meta actually sent.

Events

Build around events, not guesswork.

Every stored event is classified into one of four kinds, with the delivery status, recipient and Meta message id attached — so your application can match an event back to the message it sent.

inbound_message

A customer sent you a message

status_update

sent · delivered · read · failed

template_status

Meta's decision on a template

account_update

Account-level changes from Meta

Errors

When something fails, know why.

Every response uses the same envelope, so a failure is shaped like a success — a status code, a message, and an errors array where one applies. Validation failures name the exact field.

When Meta rejects a send after WA Console has accepted it, Meta's own code, title and detail are recorded against that message rather than collapsed into a generic failure.
422
{  "statusCode": 422,  "message": "Field Validation Failed",  "errors": [    {      "field": "to",      "message": "to should not be empty"    }  ]}
401
{  "statusCode": 401,  "message": "API key headers missing"}
META ERROR
{  "code": 131047,  "title": "Re-engagement message",  "detail": "More than 24 hours since the             customer last replied."}
Workflow

From connection to production.

The path from an empty account to a message your customer receives, and the events that follow it.

  1. 01

    Connect your WABA

    Link the WhatsApp Business Account in the console.

  2. 02

    Sync your phone number

    Register the number you will send from.

  3. 03

    Sync templates

    Pull your approved templates from Meta.

  4. 04

    Create an API key

    Keys are issued per WABA and shown once.

  5. 05

    Send your first message

    POST /messages with both key headers.

  6. 06

    Read the events

    Poll GET /webhooks/events for the lifecycle.

  7. 07

    Monitor in the console

    Delivery, failures and analytics in one view.

Examples

Start with the tools you already use.

Send your first message over plain HTTP — no SDK required.

curl -X POST https://wa.draskenapis.com/messages \  -H "Content-Type: application/json" \  -H "x-access-key: $WA_ACCESS_KEY" \  -H "x-secret-key: $WA_SECRET_KEY" \  -d '{    "phoneNumberId": "123456789012345",    "to": "919876543210",    "type": "template",    "templateName": "order_update",    "templateLanguage": "en_US"  }'
Documentation

Need the complete API reference?

WA Console publishes an OpenAPI reference covering every endpoint, its parameters, its responses and its authentication scheme.

It is served alongside the API at /swagger/docs on deployments that enable it. Ask us for the reference URL for your environment.

Request API access →

Developer FAQ

How do I authenticate API requests?

+

Send both key headers on every request: x-access-key and x-secret-key. Keys are created in the console, issued as a pair (ak_… and sk_…), and each key is scoped to a single WhatsApp Business Account — the WABA it was created for is the account it can act on. A key without a WABA is rejected.

How do I send a WhatsApp message?

+

POST /messages with phoneNumberId, the recipient in E.164 digits, and a type. For a template message add templateName and templateLanguage. The response returns the stored message including metaMessageId, which is the wamid you can match later events against.

How do webhooks work?

+

Meta delivers events to WA Console, not to you: WA Console exposes a receiver that verifies Meta’s X-Hub-Signature-256 HMAC, acknowledges immediately and processes asynchronously. Your application reads those stored events from GET /webhooks/events for a WABA. WA Console does not currently forward events onward to your own server.

Which endpoints can an API key call?

+

The messaging routes: POST /messages, GET /messages, GET /messages/:id and GET /messages/analytics. Other routes, including the webhook events list, authenticate with the console session instead.

What happens when a request fails?

+

Every response uses the same envelope, so failures are shaped like successes: a statusCode, a message, and an errors array where relevant. Validation failures return 422 with per-field messages. Missing or invalid key headers return 401. When Meta rejects a send after it has been accepted, Meta’s own code, title and detail are recorded against the message.

Do Meta messaging charges come through the API?

+

No. Your WA Console subscription is the platform fee. Meta bills its WhatsApp messaging charges separately, based on your usage and Meta’s applicable pricing.

Start building with WA Console.

Connect your application to WhatsApp Business API and build on top of a managed WhatsApp infrastructure layer.

Starting at ₹499/WABA/month