# Quickstart Part of the InboxWA API reference: https://inboxwa.online/docs/api . Full reference as one document: https://inboxwa.online/docs/api.md . OpenAPI: https://inboxwa.online/openapi.json Three steps from nothing to a sent message. The API is included in the Growth and Scale plans. - **Create a key.** Open **API Keys** in the sidebar and choose Create key. To send messages the key needs the `whatsapp_api` scope (or full access), and the workspace must have the WhatsApp Cloud API connected. For reporting, choose the read-only scopes. Copy the key now: it is shown once. [How keys work](https://inboxwa.online/docs/api/guide/keys.md). - **Check it.** `GET /api/reporting/v1/whoami` returns the workspace, the scopes and what your plan includes (`api_tier`). It is part of the core API, so it works on Growth and Scale, and it tells you why another call is refused. - **Send a message.** `POST /api/send-message` with a template, or with text inside the 24-hour window. It needs the `whatsapp_api` scope. **Check the key, then send a message** ### curl ```bash # 1. Check the key curl https://inboxwa.online/api/reporting/v1/whoami \ -H "Authorization: Bearer iwk_yourkeyhere" # 2. Send a template message curl -X POST https://inboxwa.online/api/send-message \ -H "Authorization: Bearer iwk_yourkeyhere" \ -H "Content-Type: application/json" \ -d '{"to":"919876543210","type":"template","template":{"name":"order_confirmation","language":"en_US","parameters":["ORD-4271","2026-10-05"]}}' ``` ### Node.js ```javascript const headers = { Authorization: "Bearer " + process.env.INBOXWA_KEY, "Content-Type": "application/json", }; const who = await fetch("https://inboxwa.online/api/reporting/v1/whoami", { headers }); console.log(await who.json()); const res = await fetch("https://inboxwa.online/api/send-message", { method: "POST", headers, body: JSON.stringify({ to: "919876543210", type: "template", template: { name: "order_confirmation", language: "en_US", parameters: ["ORD-4271", "2026-10-05"] }, }), }); const out = await res.json(); if (!res.ok) throw new Error(out.error); console.log(out.messageId); ``` ### Python ```python import os, requests headers = {"Authorization": "Bearer " + os.environ["INBOXWA_KEY"]} print(requests.get("https://inboxwa.online/api/reporting/v1/whoami", headers=headers, timeout=30).json()) r = requests.post( "https://inboxwa.online/api/send-message", headers=headers, json={ "to": "919876543210", "type": "template", "template": {"name": "order_confirmation", "language": "en_US", "parameters": ["ORD-4271", "2026-10-05"]}, }, timeout=30, ) r.raise_for_status() print(r.json()["messageId"]) ``` ### PHP ```php function inboxwa(string $method, string $path, ?array $body = null): array { $ch = curl_init("https://inboxwa.online" . $path); curl_setopt_array($ch, [ CURLOPT_CUSTOMREQUEST => $method, CURLOPT_RETURNTRANSFER => true, CURLOPT_HTTPHEADER => ["Authorization: Bearer " . getenv("INBOXWA_KEY"), "Content-Type: application/json"], CURLOPT_POSTFIELDS => $body ? json_encode($body) : null, ]); return json_decode(curl_exec($ch), true); } print_r(inboxwa("GET", "/api/reporting/v1/whoami")); $out = inboxwa("POST", "/api/send-message", [ "to" => "919876543210", "type" => "template", "template" => ["name" => "order_confirmation", "language" => "en_US", "parameters" => ["ORD-4271", "2026-10-05"]], ]); echo $out["messageId"]; ``` ## Then ask a real question On the Scale plan, list the chats where a customer has been waiting more than 30 minutes. **Unanswered chats** ### curl ```bash curl "https://inboxwa.online/api/reporting/v1/conversations/unanswered?older_than=30m" \ -H "Authorization: Bearer iwk_yourkeyhere" ``` ### Node.js ```javascript const res = await fetch( "https://inboxwa.online/api/reporting/v1/conversations/unanswered?older_than=30m", { headers: { Authorization: "Bearer " + process.env.INBOXWA_KEY } }, ); if (!res.ok) throw new Error((await res.json()).message); const { data } = await res.json(); for (const chat of data) { console.log(chat.phone, chat.waiting_seconds + "s", chat.assigned_to?.name ?? "unassigned"); } ``` ### Python ```python import os, requests r = requests.get( "https://inboxwa.online/api/reporting/v1/conversations/unanswered", params={"older_than": "30m"}, headers={"Authorization": "Bearer " + os.environ["INBOXWA_KEY"]}, timeout=30, ) r.raise_for_status() for chat in r.json()["data"]: print(chat["phone"], chat["waiting_seconds"], (chat["assigned_to"] or {}).get("name")) ``` ### PHP ```php $ch = curl_init("https://inboxwa.online/api/reporting/v1/conversations/unanswered?older_than=30m"); curl_setopt_array($ch, [ CURLOPT_RETURNTRANSFER => true, CURLOPT_HTTPHEADER => ["Authorization: Bearer " . getenv("INBOXWA_KEY")], ]); $body = json_decode(curl_exec($ch), true); foreach ($body["data"] as $chat) { echo $chat["phone"], " ", $chat["waiting_seconds"], "s\n"; } ```