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.
Tech Stack
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
Quick example
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 nodeStart building
Read the docs and go live today
Full setup guide, API reference and flow builder documentation — all in one place.