WhatsApp, SMS & RCS API Documentation
Production base URLs, authentication, sample requests, webhooks and error handling for integrating Messagify's WhatsApp API, with the current status of the SMS and RCS APIs. You integrate against Messagify's endpoints and authentication.
API Base URLs
Production base URLs for each channel. Call them only from your server, over HTTPS. Email and Voice don't have a public API base URL yet; contact us to integrate them.
Authentication
WhatsApp API requests are authenticated with your API key in the apikey request header. Send JSON bodies with Content-Type: application/json. Your API key is issued during onboarding; keep it on your server and never in a browser or mobile app. The SMS and RCS APIs' authentication details are shared with your credentials, because their reference isn't published yet.
apikey: YOUR_API_KEY
Content-Type: application/jsonWhatsApp API Reference
Base URL https://whatsappapi.messagify.in/v3. Request bodies use the same JSON structure as Meta's WhatsApp Cloud API, so Meta's message API reference describes every message type and field. Templates must be approved before you can send them; see why WhatsApp templates get rejected.
Endpoints
| Method | Path | Purpose |
|---|---|---|
| POST | /{phone_number_id}/messages | Send a template, text, media or interactive message |
| POST | /{waba_id}/message_templates | Create a message template for Meta review |
| GET | /{waba_id}/message_templates | List templates, filterable by status and fields |
| POST | /{template_id} | Edit an existing template |
| DELETE | /{waba_id}/message_templates?name={template_name} | Delete a template by name |
| POST | /{phone_number_id}/media | Upload media to use in messages |
| GET | /{media_id}?phone_number_id={phone_number_id} | Get a media item's details |
| DELETE | /{media_id}?phone_number_id={phone_number_id} | Delete uploaded media |
| POST | /{phone_number_id}/setwebhook | Register your webhook URL and custom headers |
| GET | /{phone_number_id}/getwebhook | Read the current webhook configuration |
Sample request: send a template message
Use an approved template for any message sent outside the 24-hour customer service window. Each parameters entry fills the template's next variable, in order.
curl -X POST "https://whatsappapi.messagify.in/v3/PHONE_NUMBER_ID/messages" \
-H "apikey: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"messaging_product": "whatsapp",
"recipient_type": "individual",
"to": "91XXXXXXXXXX",
"type": "template",
"template": {
"name": "order_update",
"language": { "code": "en" },
"components": [
{
"type": "body",
"parameters": [
{ "type": "text", "text": "Asha" },
{ "type": "text", "text": "MSG-1042" }
]
}
]
}
}'Sample request: reply with a text message
Free-form text messages can only be sent inside an open 24-hour customer service window.
curl -X POST "https://whatsappapi.messagify.in/v3/PHONE_NUMBER_ID/messages" \
-H "apikey: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"messaging_product": "whatsapp",
"to": "91XXXXXXXXXX",
"type": "text",
"text": { "body": "Thanks, your appointment is confirmed." }
}'Response
A successful send returns the message ID. Store it so you can match the delivery and read events your webhook receives. The response can include other fields as well.
{
"messages": [
{ "id": "MESSAGE_ID" }
]
}Webhooks
Register one webhook URL per WhatsApp number. Inbound messages, delivery and read-status events are then pushed to it. Callbacks aren't signed, so set a custom header with a shared secret when you register, and reject any callback that doesn't carry it. Respond quickly and process events idempotently, because the same event can arrive more than once. A field-by-field webhook payload reference isn't published yet; log payloads during UAT.
curl -X POST "https://whatsappapi.messagify.in/v3/PHONE_NUMBER_ID/setwebhook" \
-H "apikey: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"webhook_url": "https://example.com/whatsapp/webhook",
"headers": {
"x-webhook-token": "YOUR_SHARED_SECRET"
}
}'Check the current configuration with GET /{phone_number_id}/getwebhook.
Errors and Retries
Retry only when it's safe to. A blind retry after an ambiguous failure is the most common cause of duplicate messages.
| HTTP status | Meaning | What to do |
|---|---|---|
| 400, 401, 403, 404, 405 | Request or configuration error: invalid body, wrong API key or an ID that doesn't belong to your account | Don't retry. Fix the request or configuration first. |
| 429 | Too many requests | Retry with exponential backoff. |
| 5xx | Temporary server-side error | Retry with exponential backoff, up to a fixed limit. |
| No response / timeout | The outcome is unknown: the message may or may not have been accepted | Don't resend blindly. Wait for a status webhook before retrying, so the customer doesn't get a duplicate. |
SMS and RCS APIs
The SMS API (https://smsapi.messagify.in) and RCS API (https://rcsapi.messagify.in) are production hosts, but their endpoint reference, authentication details and sample requests aren't published on this page yet. We share them, with your credentials, during onboarding. Contact our team for access.
Before your first SMS
Register your entity, header and templates on DLT. Every message must match a registered template. See DLT header registration on Jio, Airtel, Vi and BSNL.
Before your first RCS message
Your RCS agent needs brand verification and launch on Jio, Airtel and Vi. Plan an SMS fallback for numbers that can't receive RCS. See what RCS Business Messaging is.
Product Documentation
Integration Guides
Integration Workflow
Get API credentials
Talk to our team for an API key and a guided UAT setup. Keep keys on your server — never in a mobile app or browser bundle — and use separate keys for test and production.
Complete channel prerequisites
Each channel has its own approvals before the first message: a Meta business and WhatsApp number, DLT entity, header and template registration for SMS, or an approved RCS agent. We guide you through each one.
Send messages
Call the channel's base URL with your API key, the recipient, the approved template and its variables.
Handle webhooks
Receive delivery, read-status and inbound-message events at your endpoint. Process them idempotently, since the same event can arrive more than once.
Test, then go live
Verify template variables, opt-in records, failure handling and webhook processing in UAT, then switch to production credentials and monitor status from the console.
Channel Prerequisites
Each channel has approvals that must be in place before your first production message.
Coming Soon
These are on our roadmap and not yet live — they're listed here so you know what to expect, not as available functionality.
Developer FAQ
https://whatsappapi.messagify.in/v3. Paths are relative to it, for example POST /{phone_number_id}/messages to send a message. The SMS API is at https://smsapi.messagify.in and the RCS API at https://rcsapi.messagify.in.
WhatsApp API requests are authenticated with your API key, sent in the apikey header on every request from your server. Authentication details for the SMS and RCS APIs are shared with your credentials during onboarding. Never put an API key in a browser or mobile app.
No. When you register your webhook with POST /{phone_number_id}/setwebhook, add a custom header such as a shared secret, and reject any callback that doesn't carry it.
Don't retry 400, 401, 403, 404 or 405 responses: fix the request or configuration. Retry 429 and 5xx responses with exponential backoff. If a request times out with no response, don't resend blindly, because the message may already have been accepted; wait for its status webhook first.
Store the message ID returned when you send. Delivery, read and failure events are pushed to your webhook endpoint, and every message also appears in the console's searchable delivery log.
Yes. WhatsApp templates can be created, edited, listed and deleted through the API, and each new or edited template goes to Meta for review. SMS content templates are registered on your operator's DLT portal instead.
A Postman collection for the WhatsApp API is available on request with your API key. SMS and RCS collections and official SDKs are not available yet.
Not as self-service yet. Our team sets up a guided UAT environment for testing before you go live.
Get Your API Key
Talk to our team for API credentials, the WhatsApp Postman collection, SMS and RCS API access and a guided UAT setup.
Talk to Our Team →