Solutions / Developers

Ship WhatsApp features with an API you can reason about.

A versioned REST API, signed webhooks and a real tenant model. Start with a personal workspace, connect a test number through Embedded Signup, and build without learning the Meta Graph API surface.

Versioned /api/v1 contractAPI keys with explicit scopesIdempotency for safe retriesOpenAPI and runnable examples

The problem

The Meta surface is powerful but unforgiving

Graph API versions move, tokens expire, webhooks duplicate, and error payloads vary. Product teams need a stable abstraction without losing delivery truth.

01

Tokens must never reach a browser or a mobile client.

02

Template components have strict shape and category rules.

03

Webhook verification and deduplication are mandatory, not optional.

04

Messaging windows and opt-in requirements are policy, not suggestions.

How it works

An infrastructure API with guard rails

ClickMaker validates requests before they reach Meta, encrypts credentials, queues outbound sends and normalises events back to your application.

1

Create an API key

Choose scopes per application. Keys are shown once and stored as hashes.

2

Connect a number

Use the dashboard or Embedded Signup flow. The resulting phone number ID is used in every send.

3

Send and retry safely

Attach an idempotency key. Message state is persisted so a retry does not create a duplicate send.

4

Consume events

Register a webhook endpoint, verify signatures, and acknowledge quickly. Retries use exponential backoff.

GymavioFitness OS
SchoolOrbitSchool ERP
Builty.inTransport
Your productExternal SaaS
ClickMaker Connect
Scoped API keys
Tenant isolation
Encrypted Meta tokens
Event pipeline
WhatsApp Cloud API

Customer-owned WABA and phone number. Meta policy, templates and delivery remain under Meta's control.

Assets stay with the customer
Meta access tokens never leave the server

Capabilities

What you can build on the platform.

Normalised errors

A stable error envelope with code, message, requestId and optional field details.

Message state machine

queued → sent → delivered → read, with failed and cancelled as explicit terminal states.

Cursor pagination

Stable ordering for contacts, conversations, messages and usage records.

Request tracing

Every response carries a request ID that maps to server logs without exposing payload secrets.

Send a text message

TypeScript
send-message.ts
const response = await fetch(
  "https://connectapi.clickmaker.in/api/v1/messages",
  {
    method: "POST",
    headers: {
      Authorization: `Bearer ${process.env.CLICKMAKER_API_KEY}`,
      "Content-Type": "application/json",
      "Idempotency-Key": "order-4412-confirmation",
    },
    body: JSON.stringify({
      phoneNumberId: "pn_01J...",
      to: "919876543210",
      type: "text",
      text: { body: "Your order is confirmed." },
    }),
  },
)

const message = await response.json()
// { data: { id, status: "queued", ... }, requestId }

Examples reflect the documented API shape. Endpoints marked as planned in the developer portal are not yet available.

FAQ

Common questions.

Do you provide an SDK?

The API is designed to be usable with plain HTTP. Official SDK packages are planned; this site marks anything not yet published as upcoming.

How do I test without sending real messages?

A provider adapter and sandbox application are planned for safe local testing. Until then, use a dedicated Meta test number and restricted recipients.

Are webhooks at-least-once?

Yes. Deliveries are retried, so consumers must deduplicate by event ID and tolerate out-of-order arrival.

ClickMaker Connect

Read the API, then build

The developer portal documents authentication, messaging, templates and webhook verification.

No shared ClickMaker sender · Customers own their assets