Altrnative documentation
Get Started
Introduction
Altrnative turns a plain-words description into an AI agent that talks to your customers on WhatsApp — on your number, in your campaigns, or from your own system.
You describe the job the way you'd brief a new colleague. Altrnative drafts an agent from it — its job, how it talks, what it finds out from each person and when it hands over to you — and you test it in a chat before it talks to anyone. Then you put it to work: on a campaign that messages a list, or on single chats your own system starts through the API.
WhatsApp runs on Meta's Cloud API, on your own WhatsApp Business number. Every reply is recorded, every field the agent captures lands in a results table, and you pay per use.
How it works
WhatsApp only lets a business start a conversation with a template Meta has approved. So a campaign or an API chat opens with one; when the person replies, your agent answers — every reply, in their language — inside WhatsApp's 24-hour window. It captures the fields you asked for, never invents a price or a promise, and hands the conversation to you when it should.
New here? The Quickstart takes you from sign-up to a live agent.
Quickstart
From sign-up to an agent answering on WhatsApp: connect a number, describe the agent, test it, put it to work.
1. Sign up
Create an account at altrnative.space/login with Google, GitHub or email. Once your account is approved, add credits from Billing (₹100 = 40K tokens) to start sending.
2. Connect a WhatsApp number
Open WhatsApp Manager and connect your WhatsApp Business account. Altrnative checks everything with Meta before saving anything — see Connecting a number. You can build and test agents before this step; you need a number only to send.
3. Describe your agent
Open Agents → New agent and describe the job in a few sentences — who it talks to, what it should find out, when a person should take over. Or start from a template. Altrnative drafts the agent; change anything in plain words.
4. Test it in a chat
The builder has a test chat that plays a customer — interested, just browsing, Hinglish, difficult. Nothing is sent to anyone.
5. Put it to work
- A campaign — Campaigns → New campaign: pick the agent, upload a CSV, choose an approved template, send. See Sending a campaign.
- The API — create a key under Developers → API keys and start chats from your own system with POST /api/v1/chats.
Before you send to a list, send a test to your own number from the campaign — the real template, the real agent, and it never counts in the results.
Authentication
The API authenticates with an account API key, sent as a bearer token.
Create a key under Developers → API keys in the dashboard. It looks like alt_ followed by 40 characters and is shown once, when you create it — copy it then. Send it on every request:
bash
export ALTRNATIVE_KEY="alt_…" # shown once, when you create it
Authorization: Bearer $ALTRNATIVE_KEY
What a key can do
- A key belongs to the account (or sub-account) it was created in, and reaches only that account's agents and WhatsApp numbers.
- It works for every number in the account. When the account has more than one, say which one sends with
from.
- There's no limit on how many keys you make. Deleting a key stops it working immediately.
Keep keys secret. A key sends real WhatsApp messages and spends your balance. Keep it on your server, never in a web page or an app, and delete it the moment it leaks.
Checking a key
cURL
curl https://altrnative.space/api/v1/agents \
-H "Authorization: Bearer $ALTRNATIVE_KEY"
# 200 with your agents = the key works · 401 = missing, unknown or deleted key
Core Concepts
Agents
An agent is what answers: its job, how it talks, what it knows, what it captures, and when it hands over.
You build an agent once and use it anywhere — on a campaign or behind the API. It's written in plain words, not a flow chart.
| Part | What it is |
| Its job | What it's for, in a sentence or two. Everything it says follows this. |
| How it talks | Tone (formal, warm or casual), reply length (brief, balanced or detailed), and language — the customer's own, or English only. |
| What it knows | Prices, offers, addresses, policies. It uses these and nothing beyond them. |
| What it captures | The fields it finds out from each person — text, yes/no, number or a choice — one question at a time, merged across replies. |
| Hand over when | Situations where it says a person will follow up, and stops. |
| Never | Things it must not say or promise. |
Changing an agent
Change it in plain words ("be more formal", "ask for the budget first") or edit any part directly, test the change in the chat, then save. Every campaign the agent answers, and every chat started through the API, follows the saved agent from the next reply.
Numbers & WhatsApp accounts
Your WhatsApp Business account (WABA) is Meta's container for your numbers and your approved templates.
Messages go out from a phone number under your WhatsApp Business account on Meta's Cloud API. Templates are approved per account, and each number has its own quality rating and daily messaging limit set by Meta.
WhatsApp Manager
Everything Meta lets you manage, from one screen: numbers (display name, quality, business profile, QR codes, blocked users), message templates (create, edit, review status and preview), WhatsApp Flows, and Meta's own insights on what was sent and what it cost.
Account health
Four checks, read from Meta: Keys (the token and app secret belong together), Token (expiry and permissions), Sending (Meta's health status and approved templates) and Replies (whether replies reach Altrnative). Each one says what to fix, in Meta's words.
Campaigns
A campaign sends an approved template to a list and records what comes back.
Sending runs on Altrnative's servers — close the page and it keeps going. It paces itself to each number's limit, retries temporary failures, stops for anyone who opted out, and pauses with the reason if Meta refuses the template.
When people reply
| Choice | What happens |
| One of your agents | The agent answers every reply and captures its fields. It follows the agent when you change it. |
| Its own prompt | A prompt written for this campaign, answered conversationally at the length you pick. |
| Send only | No conversation. Optionally one line, sent once to anyone who replies. |
Results
Each contact shows as sent, delivered, read, replied, pressed the button, no answer, failed (with Meta's reason) or opted out, with the fields the agent captured. Export to CSV or Excel, or read it with POST /api/campaign/status.
The 24-hour window
WhatsApp's rule for when a business may write freely — and why every first message is a template.
A business can start a WhatsApp conversation only with a template Meta has approved. When the person writes back, a 24-hour window opens: inside it, your agent (or you, from Conversations) can reply with any text. Each new message from the person restarts the 24 hours.
- Campaigns and API chats always open with a template.
- Your agent answers inside the window, however many messages it takes.
- Conversations shows the hours left on each chat, so you can step in before it closes.
Meta charges per template, by category — marketing costs more than utility. Since 1 October 2026 Meta also charges each reply inside the window, at the utility rate.
Guides
Connecting a number
Connect your WhatsApp Business account. Nothing is saved until Meta confirms your details belong together.
Open WhatsApp Manager → Connect and enter three values from Meta:
1. WhatsApp Business Account ID
business.facebook.com → Settings → Accounts → WhatsApp accounts. The ID is under the account name.
2. A permanent access token
Settings → Users → System users → add one as Admin → assign your app and this WhatsApp account with full control → Generate new token, expiry Never, permissions whatsapp_business_management and whatsapp_business_messaging.
The 24-hour token on Meta's API Setup page stops working tomorrow. Use a system-user token.
3. App secret
developers.facebook.com → your app → App settings → Basic → App secret → Show.
What Altrnative checks
- The token can see this WhatsApp account — someone else's account is refused.
- The app secret belongs to the token's app, so messages from WhatsApp can be trusted as yours.
- If the account has more than one number, you pick the one that sends.
Then the account's health shows in WhatsApp Manager. If replies aren't arriving yet, Send replies to Altrnative points your app's webhook here in one click.
Describing an agent
Describe the job like a brief to a new colleague. Concrete beats clever.
- Who it talks to — buyers who saw your listing, customers with an order, candidates who applied.
- What a good conversation ends with — a site visit booked, a delivery slot confirmed, a payment made.
- What to find out — budget, date, quantity. These become the fields it captures.
- What it may say — prices, offers, addresses. It says nothing beyond them.
- When to stop — a discount request, a complaint, a question it can't answer.
"Answer enquiries about Sunrise Residency. 3 BHK from ₹1.18 Cr, site visits daily 10–7. Ask their budget and when they can visit. Never promise a discount — hand those to the sales team." is a complete agent.
For an API chat, anything you pass as context — the order, the plan, the last visit — is given to the agent as facts about that person, never as instructions.
Sending a campaign
Upload a list, fill the template, test on your own number, send.
1. The list
A CSV or TSV with a phone column. A 10-digit Indian number gets +91. Every other column is kept and can fill a template value. Rows that can't be sent are listed with their line number and reason before anything goes out; anyone who opted out is removed.
contacts.csv
phone,name,city,project
9876543210,Ravi,Pune,Sunrise Residency
+91 98200 11122,Meera,Mumbai,Sunrise Residency
2. The template
Pick an approved template on the sending number. Each value it needs — {{1}}, a header image, a button link — comes from a column or a value you type (which can itself use columns, like Hi {name}). The preview shows the message as WhatsApp will.
3. Test, then send
Send a test to your own number, reply to it, and watch the agent answer. Then send now or schedule it. You can pause, resume, stop and retry failures at any time.
Human handoff
Your agent knows when to stop. You pick up in Conversations.
List the situations under Hand over to a person when — "they ask for a discount", "they report a problem with an order". When one comes up, the agent tells the person someone will follow up, and stops.
Conversations shows every chat across your numbers, waiting chats first, with the hours left in WhatsApp's 24-hour window. Reply there yourself while the window is open.
Anyone who replies STOP or asks not to be messaged is opted out of that number — campaigns and API chats skip them from then on.
Languages
Agents answer in the language the customer writes in — English, Hindi, Hinglish and more.
By default an agent replies in the customer's own language and script, and switches when they do. Set Language → English only on the agent if every reply must be in English whatever the customer writes.
Templates are approved per language by Meta; pick the language version when you choose the template, or pass language in an API call when a template exists in more than one.
API Reference
API Reference
JSON over HTTPS. Start chats run by your agent, send templates to a list, and read what came back.
BASEhttps://altrnative.space/api
Authentication
An account API key as a bearer token — see Authentication.
Errors
Errors use HTTP status codes and a detail sentence that says what to fix:
Error
{
"detail": "order_update has no variable 3. It takes: 1, 2"
}
| Status | Meaning |
| 400 | A field is missing or wrong. |
| 401 | Missing, unknown or deleted API key. |
| 402 | Out of credit — add funds to send. |
| 403 | That number isn't in this account. |
| 404 | No such agent, chat or approved template in this account. |
| 409 | The person opted out of messages from this number. |
| 502 | WhatsApp refused the message — its reason is included. |
| 503 | Something couldn't be checked right now (templates, opt-outs) — retry. |
Retries
Send an Idempotency-Key header on sends. A retried request with the same key returns the first result instead of messaging anyone twice.
Start a chat with an agent · POST
Message one person from your own system. Your agent answers every reply and captures what it was built to capture.
POSThttps://altrnative.space/api/v1/chats
WhatsApp lets a business open a conversation only with an approved template, so the chat starts with one. When the person replies, the agent takes over and answers inside WhatsApp's 24-hour window. Every chat also appears under Campaigns as API · agent name, with its captured answers and export.
Body
| Field | Type | Description |
| agent required | string | The agent's id, ag_…. |
| number required | string | Who to message. A 10-digit Indian number gets +91. |
| template_name required | string | An approved template on the sending number. |
| variables | object | Template values by their numbers: {"1": "Ravi"}. Also header_1, header_media, button_1. A list fills 1, 2, … in order. |
| language | string | Only when the template is approved in more than one language. |
| from | string | Which of your numbers sends it. Needed only when the account has more than one. |
| context | string | What the agent should know about this person. Used as facts, never as instructions. |
| name | string | The person's name, for your records. |
Starting a chat again with the same person, agent and number restarts that chat.
Example
cURL
curl https://altrnative.space/api/v1/chats \
-X POST \
-H "Authorization: Bearer $ALTRNATIVE_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: order-4821" \
-d '{
"agent": "ag_1a2b3c4d5e6f",
"number": "98765 43210",
"template_name": "order_update",
"variables": {"1": "Ravi", "2": "#4821"},
"context": "Order #4821, paid by UPI, delivery Friday"
}'
Python
import requests
r = requests.post(
"https://altrnative.space/api/v1/chats",
headers={"Authorization": f"Bearer {ALTRNATIVE_KEY}", "Idempotency-Key": "order-4821"},
json={
"agent": "ag_1a2b3c4d5e6f",
"number": "98765 43210",
"template_name": "order_update",
"variables": {"1": "Ravi", "2": "#4821"},
"context": "Order #4821, paid by UPI, delivery Friday",
},
)
chat = r.json() # {"id": "ch_…", "status": "sent", "message": "Hi Ravi, …"}
Response
{
"id": "ch_d0c622fc8d9a_919876543210",
"status": "sent",
"agent": "ag_1a2b3c4d5e6f",
"from": "+91 98200 41177",
"number": "+919876543210",
"message_id": "wamid.HBgM…",
"message": "Hi Ravi, your order #4821 is ready.",
"campaign_id": "api_d0c622fc8d9a"
}
Read a chat · GET
Where the chat stands, the conversation so far, and what the agent captured.
GEThttps://altrnative.space/api/v1/chats/{id}
status is one of sent, delivered, read, replied, failed, opted_out. captured holds the agent's fields, merged across every reply. messages is null — never empty — when it couldn't be read; ask again.
Example
cURL
curl https://altrnative.space/api/v1/chats/ch_d0c622fc8d9a_919876543210 \
-H "Authorization: Bearer $ALTRNATIVE_KEY"
Response
{
"id": "ch_d0c622fc8d9a_919876543210",
"status": "replied",
"agent": "ag_1a2b3c4d5e6f",
"from": "+91 98200 41177",
"number": "+919876543210",
"started_at": "2026-09-24T10:00:02Z",
"last_reply_at": "2026-09-24T10:05:40Z",
"agent_replies": 2,
"captured": {"delivery_slot": "Friday evening", "wants_call": false},
"messages": [
{"from": "agent", "text": "Hi Ravi, your order #4821 is ready.", "at": "…"},
{"from": "customer", "text": "can it come friday evening?", "at": "…"},
{"from": "agent", "text": "Yes — Friday 6–9 pm works. I've noted it.", "at": "…"}
]
}
List agents · GET
Your agents: id, name, job and the fields each one captures.
GEThttps://altrnative.space/api/v1/agents
Newest first, up to 200. Use an agent's id as agent when you start a chat.
Example
cURL
curl https://altrnative.space/api/v1/agents \
-H "Authorization: Bearer $ALTRNATIVE_KEY"
Response
{
"agents": [
{
"id": "ag_1a2b3c4d5e6f",
"name": "Lead desk",
"goal": "Answer property enquiries, qualify the buyer and book a site visit.",
"captures": ["bhk", "budget", "visit_day"],
"updated_at": "2026-09-23T17:40:11Z"
}
]
}
Send a template to a list · POST
Send an approved template to up to 500 people in one request. One result per person, in the order given.
POSThttps://altrnative.space/api/campaign/send
| Field | Type | Description |
| items required | object[] | Up to 500 of {"phone", "name", "state", "variables"}. Each item is one message. |
| items[].variables | object | Every value the template needs, for this person: "1", "2"… for {{1}}, {{2}}; a named variable by its name; header_1 or header_media for the header; button_1 for a link or code button. A missing value or a name the template doesn't have: that person is not sent and their result says which. Leave variables out only for a template whose single value is the name. |
| template required | string | An approved template on the sending number. |
| lang | string | The template's language, default en. |
| from | string | Which of your numbers sends it, when you have more than one. |
Anyone who opted out is skipped with opted_out. Temporary failures are retried; the rest come back with Meta's reason. To have an agent answer replies, build a campaign in the dashboard or use chats.
Always send an Idempotency-Key. A dropped connection and a retry without one messages everyone twice.
Example
cURL
curl https://altrnative.space/api/campaign/send \
-X POST \
-H "Authorization: Bearer $ALTRNATIVE_KEY" \
-H "Idempotency-Key: diwali-batch-1" \
-H "Content-Type: application/json" \
-d '{
"template": "diwali_offer",
"lang": "en",
"from": "+91 98200 41177",
"items": [
{"phone": "98765 43210", "name": "Ravi", "variables": {"1": "Ravi", "2": "20% off", "button_1": "RAVI20"}},
{"phone": "98200 11122", "name": "Meera", "variables": {"1": "Meera", "2": "15% off", "button_1": "MEERA15"}},
{"phone": "99300 44455", "name": "Arun", "variables": {"1": "Arun"}}
]
}'
Response
{
"results": [
{"phone": "+919876543210", "ok": true, "status": "initiated", "wamid": "wamid.HBgM…", "attempts": 1},
{"phone": "+919820011122", "ok": false, "status": "opted_out", "error": "contact opted out"},
{"phone": "+919930044455", "ok": false, "error": "diwali_offer needs a value for: 2, button_1"}
],
"replayed": false
}
Status per number · POST
Where each person stands — for your CRM, your sheet or your dashboard.
POSThttps://altrnative.space/api/campaign/status
Body: {"phones": [...], "from": "…"}. statuses maps each number to where it stands — such as sent, interested, no_answer, failed, opted_out; errors gives the reason for failures. unread lists numbers whose status could not be read right now — a number there is unknown, not "not sent"; ask again.
Example
cURL
curl https://altrnative.space/api/campaign/status \
-X POST \
-H "Authorization: Bearer $ALTRNATIVE_KEY" \
-H "Content-Type: application/json" \
-d '{"phones": ["+919876543210", "+919820011122"], "from": "+91 98200 41177"}'
Response
{
"statuses": {"+919876543210": "interested", "+919820011122": "failed"},
"errors": {"+919820011122": "Not on WhatsApp"},
"unread": []
}
Who pressed the button · GET
Everyone who pressed your template's quick-reply button, with when and which button.
GEThttps://altrnative.space/api/campaign/interested
Add ?from= when the account has more than one number.
Example
cURL
curl "https://altrnative.space/api/campaign/interested?from=+919820041177" \
-H "Authorization: Bearer $ALTRNATIVE_KEY"
Response
{
"count": 1,
"contacts": [
{"phone": "+919876543210", "name": "Ravi", "state": "MH",
"clicked_at": "2026-09-24T11:02:09Z", "button_text": "Interested"}
]
}
Integrations
Every reply, answer and hand-over in your own systems the moment it happens — and agents that use your systems mid-conversation.
Connect a webhook or Slack under Integrations in the dashboard. Pick which events it should receive; each one is sent as it happens, to every integration that wants it.
Events
| Event | When |
reply.received | A contact replied to one of your campaigns or API chats — text or a button press. data.message has type and text. |
answer.captured | The agent captured new answers. data.fields is everything so far; data.changed is what this reply added. |
agent.handover | The agent handed the conversation to a person. data.message is what the contact wrote, data.reply what the agent answered. |
contact.opted_out | A contact asked to stop. They won't be messaged from that number again. |
message.delivered · message.read | A campaign message reached the phone, or was read. Once per message. data.wamid is WhatsApp's message id. |
message.failed | WhatsApp couldn't deliver a campaign message. data.error says why. |
campaign.started · campaign.completed | A campaign began sending, or finished. Completed carries data.counts (sent, failed). |
chat.started | A chat was started through POST /api/v1/chats or by a store order. data.chat_id, data.source. |
payment.paid | A Razorpay link your agent sent was paid. data.amount_inr, data.purpose. |
Every event carries data.campaign, data.contact, data.number (which of your WhatsApp numbers) and data.test — true for your own test sends. On any integration you can limit events to some campaigns, agents or numbers, and leave test sends out.
What we send
A POST with a JSON body, and these headers: X-Altrnative-Event (the type), X-Altrnative-Delivery (the event id), X-Altrnative-Timestamp (Unix seconds) and X-Altrnative-Signature. Headers you add to the webhook (for example Authorization) are sent too.
JSON
{
"id": "evt_5f2c9a1b7d3e4f60a8b2c1d0",
"type": "answer.captured",
"created_at": "2026-09-26T10:41:07.512Z",
"data": {
"campaign": { "id": "c_7cdf7206ee91", "name": "Sunrise Residency leads" },
"agent_id": "ag_1a2b3c4d5e6f",
"contact": { "phone": "+919812345678", "name": "Riya" },
"test": false,
"fields": { "budget": "90 lakh", "bhk": "3", "visit_date": "Saturday" },
"changed": { "visit_date": "Saturday" }
}
}
Check it came from us
When you connect a webhook you get a signing secret, shown once. The signature is sha256= followed by the HMAC-SHA256, in hex, of the timestamp, a dot, and the raw body. Recompute it with your secret and compare; reject anything older than five minutes.
Node.js
const crypto = require("crypto");
// Use the RAW request body, exactly as received.
function isFromAltrnative(rawBody, headers, secret) {
const ts = headers["x-altrnative-timestamp"];
const expected = "sha256=" + crypto
.createHmac("sha256", secret)
.update(ts + "." + rawBody)
.digest("hex");
const got = headers["x-altrnative-signature"] || "";
const fresh = Math.abs(Date.now() / 1000 - Number(ts)) < 300;
return fresh && got.length === expected.length &&
crypto.timingSafeEqual(Buffer.from(got), Buffer.from(expected));
}
Python
import hashlib, hmac, time
def is_from_altrnative(raw_body: bytes, headers, secret: str) -> bool:
ts = headers.get("X-Altrnative-Timestamp", "")
expected = "sha256=" + hmac.new(secret.encode(), ts.encode() + b"." + raw_body,
hashlib.sha256).hexdigest()
fresh = abs(time.time() - int(ts or 0)) < 300
return fresh and hmac.compare_digest(expected, headers.get("X-Altrnative-Signature", ""))
Delivery and retries
Answer with any 2xx within 10 seconds. Anything else — an error, a timeout, a redirect — is retried after 30 seconds, 2 minutes, 10 minutes, 30 minutes and 2 hours, then given up. The same event can arrive twice in rare cases; use its id to skip repeats.
Only https:// URLs on the public internet are accepted, and redirects are not followed. Each integration's Log shows the last deliveries and why any failed, with Resend to send one again.
Zapier, Make and n8n all accept webhooks: use a “Catch Hook”, “Custom webhook” or Webhook node, and paste its URL as a webhook here.
Slack
In Slack, add Incoming Webhooks to a channel and paste its URL under Integrations → Slack. You get one message per event, such as “Riya needs a person — Sunrise Residency leads”, with the captured answers and an Open in WhatsApp button. Hand-overs mention @here (or @channel, or no one — your choice).
CRMs, Sheets and email
HubSpot, Zoho CRM, Salesforce and LeadSquared get each person as a contact or lead, found by phone number (never duplicated), with every event as a note. Map captured answers to your own fields, one per line: budget = mx_Budget. Google Sheets keeps one row per person with a column for each answer. Email alerts send an email per event — hand-overs by default.
Custom API — your agent calls your system
Give the action a name, say when the agent should use it, and list what it must find out first. When the conversation needs it, the agent calls your endpoint and answers from what you return. It never makes up a result: if your API fails, it says someone will confirm.
A POST carries {"action", "arguments", "contact": {"phone", "name"}, "campaign"}; a GET sends the arguments as a query string. {sku}-style placeholders in the URL are filled from the arguments, and {phone} from the chat. The person's phone always comes from the chat, never from the model. Requests are signed exactly like webhooks, so the same check works. Answer with JSON within 10 seconds.
Payments and stores
Razorpay: the agent sends a payment link (up to the limit you set), checks whether it's paid, and when Razorpay tells us it is, the person gets your thank-you on WhatsApp and a payment.paid event goes to your other integrations.
Shopify and WooCommerce: the agent can look up the person's own orders — status, items, payment, tracking — and never shows an order that isn't under their number. Add WhatsApp messages for new orders, cash-on-delivery orders, shipped or cancelled orders: we send your approved template and your agent answers the reply knowing the order, so a COD confirmation or a “where is my order” is handled in the chat.
Google Calendar
Share a calendar with us, set bookable hours and days, and the agent offers free slots and books the one the person picks.
Billing
Pricing & balance
Pay as you go from a prepaid balance of tokens: ₹100 buys 40K.
| When | Price |
| Every message | Meta's rate + 10%. On your own WhatsApp account Meta bills you directly and Altrnative charges only the 10%. |
| When an agent answers | The AI as it's used, in tokens of ₹0.0025: what it reads and writes for each reply, and any photo or voice note it reads. A typical conversation uses about 90 tokens; the campaign builder shows the estimate for yours before you send. |
No subscription, no seats, no platform fee. Every rate, with a calculator, is on /pricing; the same numbers are at GET https://altrnative.space/api/pricing.
Adding credits
Add credits from Billing → Add credits by UPI, card or netbanking; ₹100 becomes 40K tokens, and a GST invoice is emailed for each payment. Tokens come off as you go and are itemised under Billing. If the balance runs out, sending stops — replies still reach you, and campaigns pick up where they left off when you top up.
Resources
What's new
What's new in Altrnative.
October 2026
- A calmer dashboard. One plain font, one account menu for you, the theme and signing out, and dates written one way everywhere.
- A shorter campaign builder. Who gets it, what they get, then what happens when they reply. A send-only campaign is four steps; the prompt, knowledge and fields appear only when the AI answers.
- Archive campaigns. Old and test campaigns leave the list and the totals; their results stay in Analytics.
- Help in the account menu. These docs, support and this page, one click away.
- Tokens. Your balance is shown in tokens (₹100 = 40K). Messages at Meta's rate + 10%; the AI charged as it's used, with the estimate for a campaign shown before you send.
- A knowledge base for each campaign. Paste or upload what customers ask about; replies use only it and the prompt, and pass anything else to your team.
- Their style or yours. A campaign's replies can match each customer's tone, or keep the voice your prompt sets.
September 2026
- Agents. Build an agent from a description, test it in a chat, use it on campaigns and through the API.
- Campaigns answered by your agents. Pick an agent for a campaign; it follows the agent when you change it.
- Chats API.
POST /api/v1/chats starts a chat your agent runs; GET /api/v1/chats/{id} reads it.
- API keys and sub-accounts. Account keys under Developers → API keys; sub-accounts billed to the main account.
- WhatsApp Manager. Numbers, templates, Flows, business profile and Meta insights from one screen.
- Two prices. Send only at Meta + 10%; agentic at Meta + ₹0.30 per conversation (replaced in October by tokens).
- Conversations and Analytics. Every chat across your numbers; campaign funnels, failure reasons and exports.