Access
Scoped API credentials
Separate OTP and custom-message clients, rotate secrets, and restrict sender access.
Loading your content
Loading your contentIntegration path
Connect OTP and customer-message workflows through scoped API keys, predictable REST requests, signed webhooks, and delivery diagnostics your team can operate.
await fetch(`${baseUrl}/api/otp/send`, {
method: 'POST',
headers: {
'content-type': 'application/json',
'x-api-key': process.env.WHATSAPP_API_KEY,
},
body: JSON.stringify({ receiver_number, app_name: 'My Store' }),
});Move from credential creation to delivery tracking in four explicit steps.
Choose OTP or message access and assign only the senders this integration needs.
Keep credentials in environment variables and call HookMessage from your backend.
Validate phone formatting, payload fields, idempotency, and the queued response.
Use message status and signed webhooks to reconcile delivered or failed requests.
Integration architecture
Your application owns the customer event. HookMessage owns sender execution, plan enforcement, queue state, and delivery visibility.
Access
Separate OTP and custom-message clients, rotate secrets, and restrict sender access.
Requests
Use REST endpoints from server actions, jobs, controllers, or application services.
Events
Receive lifecycle updates without exposing private credentials in the browser.
Operations
See plan limits, sender state, API errors, and delivery history in one dashboard.
The API contract stays the same across frameworks and background workers.
Fetch, Node.js, Express, Fastify, and server-side framework routes.
Route handlers or server actions keep the API key outside the client bundle.
Use the HTTP client from controllers, jobs, listeners, or service classes.
Call the REST API from Django, Flask, FastAPI, workers, or scheduled tasks.
Working example
Send an OTP from a backend action or API route.
await fetch(`${baseUrl}/api/otp/send`, {
method: 'POST',
headers: {
'content-type': 'application/json',
'x-api-key': process.env.WHATSAPP_API_KEY,
},
body: JSON.stringify({ receiver_number, app_name: 'My Store' }),
});Working example
Trigger a customer confirmation from a PHP app.
$response = Http::withHeaders([
'x-api-key' => env('WHATSAPP_API_KEY'),
])->post($baseUrl.'/api/messages/send', [
'receiver_number' => $phone,
'message' => 'Your order is confirmed',
]);Optional implementation help
Share your stack, expected message volume, sender plan, and first workflow. We can help review the implementation path before customer traffic goes live.
Review checklist
First workflow
Create a sandbox workspace, issue a scoped key, and validate success and failure responses from your backend.