Lynkist Developers

Quickstart

Send your first WhatsApp message through the Lynkist API in five minutes.

This guide walks you end-to-end through sending a WhatsApp message via the Lynkist API. By the end you will have a working API key, a connected WhatsApp Business Account (WABA), and a delivered message on a real number.

1. Sign up and connect a WhatsApp Business Account

  1. Sign up at lynkist.io and complete onboarding.
  2. From the dashboard, run the embedded signup flow to connect a verified WhatsApp Business Account. Until a WABA is connected and active, the messages endpoint will return 404 No active WABA account for this tenant.

A free-tier tenant cannot call the Public API at all — see Rate Limits. Upgrade to Starter or higher to enable API access.

2. Generate an API key

  1. Open the dashboard at Settings → API keys (/{tenant}/api/v1/settings/api-keys).
  2. Click Create new key.
  3. Pick a name (visible to your team) and the scopes the key needs. For this walkthrough pick the messaging preset (gives contacts:read, templates:read, media:write, messages:send).
  4. Copy the secret immediately — it is shown once. It looks like lk_sk_live_a1b2c3… (live) or lk_sk_test_… (sandbox).
export LYNKIST_API_KEY="lk_sk_live_..."

See Authentication for the full scope catalogue and key-rotation flow.

3. Pick an approved template

The Public API only sends pre-approved WhatsApp templates (free-form messaging is dashboard- only). List your approved templates to grab a template_name and language:

curl https://api.lynkist.io/api/v1/public/templates \
  -H "Authorization: Bearer $LYNKIST_API_KEY"
{
  "data": [
    {
      "id": "f47ac10b-58cc-4372-a567-0e02b2c3d479",
      "template_name": "order_confirmation",
      "language": "en_US",
      "category": "UTILITY",
      "status": "approved",
      "components": [ /* … */ ],
      "created_at": "2026-04-12T09:00:00Z"
    }
  ],
  "pagination": { "page": 1, "limit": 20, "total_items": 1, "total_pages": 1, "has_next": false, "has_prev": false }
}

4. Send your first message

POST /api/v1/public/messages/template accepts a recipient (E.164 phone number), a template name and language, and the optional components array (only required if the template has variables).

curl -X POST https://api.lynkist.io/api/v1/public/messages/template \
  -H "Authorization: Bearer $LYNKIST_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "to": "+919999999999",
    "template_name": "order_confirmation",
    "language": "en_US",
    "components": [
      {
        "type": "body",
        "parameters": [
          { "type": "text", "text": "Anurag" },
          { "type": "text", "text": "ORD-1042" }
        ]
      }
    ]
  }'

A successful response:

{
  "message_id": "wamid.HBgM…",
  "status": "accepted",
  "to": "+919999999999"
}

status: accepted means we have handed the message to Meta. To know when it is actually delivered or read, you need to subscribe to webhooks.

5. Subscribe to delivery webhooks

curl -X POST https://api.lynkist.io/api/v1/public/webhooks \
  -H "Authorization: Bearer $LYNKIST_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://example.com/lynkist/webhook",
    "events": ["message.sent", "message.delivered", "message.read", "message.failed"]
  }'

The response contains a signing_secret you must store — Lynkist signs every webhook with it (see Webhooks for the signature recipe and the full event catalog).

Next steps

Quickstart — Lynkist Developers | Lynkist