Developer Documentation

ZenTalksAI (A Brand of Almighty Creation) API

Send WhatsApp utility messages and capture leads from any website, app, or platform — in any programming language.

Get API Access → Quick Start

Overview

The ZenTalksAI (A Brand of Almighty Creation) API lets any external system — an e-commerce store, CRM, ERP, custom web app, or internal tool — send WhatsApp utility messages and capture leads directly, without using the ZenTalksAI (A Brand of Almighty Creation) dashboard. It's a plain REST API that works over standard HTTPS with JSON, so it works with every programming language: PHP, Python, Node.js, Java, Ruby, Go, and more.

Base URL: https://tirupatikitchen.in/api/v1
All requests must use HTTPS and include your API key in the X-API-Key header.

Authentication

Every request must include your API key in the X-API-Key header. Generate a key from your dashboard under API Portal after signing up.

X-API-Key: wp_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx Content-Type: application/json
Never expose your API key in frontend JavaScript on a public page. Always call the API from your server-side backend.

Quick Start

Get your first message sent in under 5 minutes.

1. Get an API key

Sign up, log in to your dashboard, and generate a key from the API Portal.

2. Create an approved template

Build a UTILITY or AUTHENTICATION template and submit it for Meta approval — usually approved within minutes to a few hours.

3. Make your first request

Python
Node.js
PHP
cURL
import requests response = requests.post( "https://tirupatikitchen.in/api/v1/messages/send", headers={ "X-API-Key": "wp_your_key_here", "Content-Type": "application/json" }, json={ "to": "919876543210", "type": "template", "template": {"name": "order_confirmation", "language": "en"}, "variables": {"customer_name": "Rahul", "order_id": "ORD-1234"} } ) print(response.json())
const res = await fetch("https://tirupatikitchen.in/api/v1/messages/send", { method: "POST", headers: { "X-API-Key": "wp_your_key_here", "Content-Type": "application/json" }, body: JSON.stringify({ to: "919876543210", type: "template", template: { name: "order_confirmation", language: "en" }, variables: { customer_name: "Rahul", order_id: "ORD-1234" } }) }); console.log(await res.json());
$ch = curl_init("https://tirupatikitchen.in/api/v1/messages/send"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_HTTPHEADER, [ "X-API-Key: wp_your_key_here", "Content-Type: application/json" ]); curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode([ "to" => "919876543210", "type" => "template", "template" => ["name" => "order_confirmation", "language" => "en"], "variables" => ["customer_name" => "Rahul", "order_id" => "ORD-1234"] ])); $response = curl_exec($ch); echo $response;
curl -X POST https://tirupatikitchen.in/api/v1/messages/send \ -H "X-API-Key: wp_your_key_here" \ -H "Content-Type: application/json" \ -d '{ "to": "919876543210", "type": "template", "template": {"name": "order_confirmation", "language": "en"}, "variables": {"customer_name": "Rahul", "order_id": "ORD-1234"} }'

Send Message

Send a WhatsApp utility or authentication template message to any phone number.

POST /api/v1/messages/send

Request Body

Field Type Description
to string required Phone number with country code, digits only, no + sign. E.g. 919876543210
type string required Must be template
template.name string required The exact name of an approved template
template.language string optional Defaults to en
variables object optional Named key-value pairs matching your template's variable map
phone_number_id string optional Target a specific WhatsApp number if your account has multiple

Example Request

{ "to": "919876543210", "type": "template", "template": { "name": "order_confirmation", "language": "en" }, "variables": { "customer_name": "Rahul Sharma", "order_id": "ORD-9182", "amount": "1,249" } }

Success Response 200 OK

{ "success": true, "message_id": "wamid.HBgMOTE5ODc2NTQzMjEwFQIAERgSM0RDNTRCOTk5MTc1RENEQzJFAA==", "status": "sent", "to": "919876543210" }

Error Response 4xx / 5xx

{ "success": false, "error": "CATEGORY_NOT_ALLOWED", "message": "Only UTILITY and AUTHENTICATION templates can be sent via the API." }

Capture Contact

Capture a lead from a website form, e-commerce checkout, or any external system. Works with any field structure — unrecognized fields are stored automatically without requiring schema changes on our end.

POST /api/v1/contacts/capture

Request Body

Field Type Description
phone string required Phone number with country code
name string optional Full name
email string optional Email address
company string optional Company name
city / state / country string optional Location fields
tags array or string optional Tag names — created automatically if they don't exist
source string optional Label for where the lead came from, e.g. website_form
send_welcome boolean optional Send a WhatsApp message immediately after capture
any other field any optional Stored automatically — no schema changes needed

Example — Website Lead Form

{ "phone": "919876543210", "name": "Rahul Sharma", "email": "rahul@example.com", "source": "website_contact_form", "tags": ["lead", "website"], "send_welcome": true, "welcome_template": "welcome_lead", "welcome_variables": { "customer_name": "Rahul" } }

Response

{ "success": true, "action": "created", "contact_id": 142, "phone": "919876543210", "name": "Rahul Sharma" }

action is either created or updated — sending the same phone number again updates the existing contact instead of creating a duplicate.

List Contacts

GET /api/v1/contacts

Query Parameters

Param Type Description
limit integer Max results, default 25, max 100
offset integer Pagination offset
phone string Filter by exact phone number
source string Filter by source label
status string Filter by contact status
GET https://tirupatikitchen.in/api/v1/contacts?limit=25&offset=0&source=website_contact_form X-API-Key: wp_your_key_here

Templates & Variables

Only UTILITY and AUTHENTICATION category templates can be sent through the API. Marketing templates are restricted to campaign sending inside the dashboard, in line with WhatsApp's commerce policy.

Each template can have a variable map — a friendly name for each placeholder (e.g. {{'{{1}}'}} = customer_name). Find your template's variable names in your dashboard's API Portal under the Templates tab.

Example template

Template body: "Hi {{'{{1}}'}}, your order {{'{{2}}'}} has shipped!" Variable map: {"1": "customer_name", "2": "order_id"} API call: { "variables": { "customer_name": "Rahul", "order_id": "ORD-1234" } }

Rate Limits

Each API key can have an optional daily message limit set by your account administrator. By default, keys are unlimited. If a limit is reached, requests return a 429 status until the counter resets at midnight.

{ "success": false, "error": "DAILY_LIMIT_REACHED", "message": "Daily message limit (500) reached for this API key. Resets tomorrow." }

Error Codes

HTTP Error Meaning
401 UNAUTHORIZED Missing or invalid API key
403 ROLE_FORBIDDEN Account type not permitted to use the API
403 CATEGORY_NOT_ALLOWED Template is not UTILITY or AUTHENTICATION
422 MISSING_FIELD A required field is missing from the request
422 INVALID_PHONE Phone number format is invalid
422 TEMPLATE_NOT_FOUND Template not found or not approved
422 NO_WHATSAPP_NUMBER No active WhatsApp number connected
422 META_ERROR WhatsApp rejected the request — see meta_code for details
429 DAILY_LIMIT_REACHED Daily message limit reached for this key
500 SEND_FAILED Unexpected server error — retry after a few seconds

Webhooks (Real-Time Events)

In addition to calling our API, you can subscribe to real-time outbound webhooks so your system gets notified instantly when something happens — a message is delivered, read, or a new contact is captured. Configure these in your dashboard under Settings → Webhooks.

Event Fires When
message.sent An outbound message is sent (including via API)
message.delivered WhatsApp confirms delivery
message.read Recipient reads the message
message.failed Message delivery fails
contact.created A new contact is captured

Verifying webhook authenticity

// PHP example $signature = hash_hmac('sha256', $rawBody, $yourSecret); $valid = hash_equals('sha256=' . $signature, $_SERVER['HTTP_X_WEBHOOK_SIGNATURE']);

Frequently Asked Questions

Can I use this with any programming language?

Yes. The API is plain HTTPS + JSON. Any language capable of making an HTTP request can use it — Python, Node.js, PHP, Java, Ruby, Go, C#, and more.

Can I send marketing/promotional messages via API?

No. Only UTILITY and AUTHENTICATION templates are permitted via API, in line with WhatsApp's commerce policy. Marketing campaigns must be sent through the dashboard's campaign tool.

What happens if I send to the same phone number twice via Capture Contact?

The existing contact is updated instead of creating a duplicate. You can safely call this endpoint every time a customer interacts with your form.

Is there a sandbox or test mode?

Use your own WhatsApp test number connected to your account. All API calls go through the same production pipeline as dashboard-sent messages.

Ready to integrate?

Create an account and generate your first API key in under 2 minutes.

Get Started Free →