Developer Platform

Built for teams
who like to build

Waqly is built on open standards. Webhooks, HTTP request nodes, the official Meta API and bring-your-own AI key — no black boxes.

Official Meta Cloud API
Waqly is built directly on the Meta WhatsApp Cloud API. All message routing goes through Meta's infrastructure — HMAC-SHA256 signature verified on every webhook.
HTTP Request nodes
Call any REST API from inside a chatbot flow. Pass request body, headers and method. Save the JSON response to a session variable for use in later nodes.
Outbound webhooks
Receive real-time events from Waqly in your own systems. Subscribe to message, status, flow-completion and contact-tag events.
Bring your own AI key
Connect DeepSeek, OpenAI, Anthropic or Gemini with your own API key. Stored encrypted at rest. Zero AI markup — you pay your provider directly.
Supabase backend
Built on Supabase (PostgreSQL). Schema is public and documented. Service-role key bypasses RLS — application layer filters by user_id from JWT.
Fastify + Node 20
The API is a Fastify server on Node 20, deployed to Vercel. All routes are TypeScript. esbuild bundles to a single dist/bundle.js.
SSE real-time events
Server-Sent Events fan out to all connected clients. Events: message, transcription, status, agent_updated, auto_reply_sent, assignment_updated and more.
React Native mobile SDK
Native iOS and Android app built with React Native CLI. Zustand state with manual AsyncStorage persistence. SSE via fetch + ReadableStream.
Open source friendly
The shared package exports all TypeScript types — EcomProduct, FlowNode, FlowPlan, Message and more — for use in your own integrations.

Standard, documented, maintainable

API
Fastify · Node 20 · TypeScript · esbuild · Vercel
Database
Supabase · PostgreSQL · Row-Level Security · Service Role Key
Web App
React 18 · Vite · Zustand · TypeScript · No Router
Mobile
React Native CLI · Zustand · AsyncStorage · TypeScript

HTTP Request node in a flow

Call any external API from inside a chatbot flow — no code required in the UI, just configure the node:

// HTTP Request node config (set in the flow builder UI)
{
  "url": "https://api.mycrm.com/leads",
  "method": "POST",
  "headers": {
    "Authorization": "Bearer {{env.CRM_API_KEY}}",
    "Content-Type": "application/json"
  },
  "body": {
    "name": "{{contact.name}}",
    "phone": "{{contact.phone}}",
    "budget": "{{session.budget_answer}}"
  },
  "saveResponseTo": "crmResponse"
}

// After the node runs, use {{crmResponse.leadId}}
// in any subsequent message node

Read the docs and go live today

Full setup guide, API reference and flow builder documentation — all in one place.