Every WhatsApp capability, and whether Ghala exposes it through the API, the dashboard, a raw Meta override, or not at all.
How to read this page
The point of this page is that you should never have to contact support to find out whether something is possible. Every capability below carries one of five verdicts.
| Verdict |
Meaning |
| API |
Supported through the Ghala Developer API (/api/v2) |
| Dashboard |
Available in the Ghala dashboard, but not through the public API |
| Meta override |
Only reachable by taking the number's WhatsApp callback override and dealing with Meta directly |
| Planned |
Declared by the API or on the roadmap, but not usable today |
| Unsupported |
Not available through Ghala in any form |
"Meta override" is not a Ghala feature so much as an escape hatch. The access token Ghala hands you is a Meta-issued token, so it can be used against Meta's Graph API directly. That works, but nothing about it is supported, tested, or covered by this documentation, and combining it with Ghala's own sending is how you end up with two systems answering one customer.
Sending messages
All of these are POST /api/v2/messages with a different type.
| Capability |
Verdict |
Notes |
| Text |
API |
type: "text", max 4096 characters |
| Templates (sending) |
API |
type: "template", with template_components for variables |
| Images |
API |
type: "image", public HTTPS media_url |
| Video |
API |
type: "video" |
| Documents |
API |
type: "document", with media_filename |
| Audio / voice notes |
API |
type: "audio". WhatsApp allows no caption on audio |
| Interactive reply buttons |
API |
interactive.type: "buttons", up to 3 |
| Interactive lists |
API |
interactive.type: "list", up to 10 rows total |
| Interactive URL button |
API |
interactive.type: "cta_url" |
| Location |
Unsupported |
Not in the type enum. No Ghala equivalent |
| Contacts (vCard) |
Unsupported |
Not in the type enum |
| Reactions |
Unsupported |
Cannot be sent through Ghala |
| Stickers |
Unsupported |
Not in the type enum |
| Replying to a specific message (quoted reply) |
Unsupported |
No context / reply_to field on the send body |
| Typing indicators, read receipts you send |
Unsupported |
Not exposed |
| WhatsApp Flows |
Unsupported |
Neither sending nor receiving Flow responses |
| Products / catalogue messages |
Unsupported |
Meta catalogue product messages are not exposed. Ghala's own Shop is a separate, dashboard-managed feature |
Receiving messages
Inbound message types are what your endpoint receives, not what you send.
| Capability |
Verdict |
Notes |
message.received events |
API |
Delivered to an endpoint registered in Developer → Events |
message.status events |
API |
sent, delivered, read, failed |
| Interactive button / list taps |
API |
The id you set when sending comes back on message.received |
| Full raw WhatsApp envelope |
Meta override |
The only way to get Meta's exact entry[].changes[].value shape |
| Inbound message types Ghala does not model |
Meta override |
If you need a field Ghala's event payload does not carry |
Templates
| Capability |
Verdict |
Notes |
| List templates |
API |
GET /api/v2/templates |
| Filter to sendable templates |
API |
?sendable=true, with unsendable_reason when false |
| Read approved components and variables |
API |
The components array, as Meta approved it |
| Template quality score |
API |
quality_score: GREEN, YELLOW, RED, UNKNOWN |
| Create and submit a template |
Dashboard |
Templates in the dashboard |
| Edit and resubmit a template |
Dashboard |
|
| Delete a template |
Dashboard |
|
| Upload a media header sample |
Dashboard |
Meta requires a header_handle from its resumable upload; the dashboard does this for you |
| Sync templates from Meta |
Dashboard |
|
template.status change events |
Planned |
The event name is declared but is not confirmed to publish today |
| Capability |
Verdict |
Notes |
| Send media by public URL |
API |
Meta fetches the URL directly, so it must be publicly reachable |
| Upload to Ghala's media library |
Dashboard |
The library backs product listings and template headers |
| Upload to Meta's media store, send by media id |
Unsupported |
Ghala sends by URL only |
| Retrieve inbound media |
Dashboard |
Inbound media is visible in the inbox |
| Download media from Meta by media id |
Meta override |
Requires calling Meta directly |
Numbers, accounts, and profiles
| Capability |
Verdict |
Notes |
| Connect a number (Embedded Signup) |
Dashboard |
See Connecting and Onboarding a Number |
| Connect a number by pasting credentials |
Dashboard |
|
| Reconnect a number / refresh its token |
Dashboard |
Issues a new token and invalidates the old one |
| Retry number registration with the PIN |
Dashboard |
|
| Read the two-step verification PIN |
Dashboard |
Explicit reveal action |
| Check a number's live state |
Dashboard |
connection_status, registration_status, live |
| Disconnect a number |
Dashboard |
|
| List connected numbers programmatically |
Unsupported |
A v2 token authenticates exactly one number; there is no cross-number listing |
| WABA management (create, share, subscribe) |
Unsupported |
Ghala reads the WABA id; it does not manage WABAs |
| Business Portfolio management |
Unsupported |
|
| WhatsApp Business profile (the public one customers see) |
Unsupported |
Manage it in WhatsApp Manager. Ghala's Settings → Business profile is a separate, internal profile that configures the AI agent |
| Display-name change and review |
Unsupported |
WhatsApp Manager |
| Messaging-limit tier and quality rating |
Unsupported |
WhatsApp Manager |
Events and webhooks
| Capability |
Verdict |
Notes |
| Register an event subscription |
Dashboard |
Developer → Events. There is no /api/v2/webhooks endpoint |
| List / delete event subscriptions |
Dashboard |
|
| Signed deliveries with replay protection |
API |
X-Ghala-Signature, X-Ghala-Timestamp, X-Ghala-Delivery |
| Inspect delivery attempts and failures |
Dashboard |
Per-subscription attempt history, including HTTP status and error |
| Browse the number's event log |
Dashboard |
Retained 30 days |
| Read one event's exact delivered payload |
Dashboard |
The same envelope a subscriber is sent |
| Point the number's callback at your own server |
Dashboard |
Developer → Webhooks. Pauses the Ghala inbox and agent for that number |
| Replay a failed delivery from the API |
Unsupported |
The event log is browsable, but re-delivery is not exposed |
Commerce, campaigns, and CRM
Everything here is a Ghala product feature rather than a WhatsApp platform capability, and none of it is on the public API.
| Capability |
Verdict |
Notes |
| Shop, products, variants |
Dashboard |
Ghala's own catalogue; not Meta's |
| Orders |
Dashboard |
order.paid is declared as an event but not confirmed publishing |
| Payments |
Dashboard |
Via a connected Snippe account |
| Campaigns and drip sequences |
Dashboard |
|
| Contacts, tags, custom fields |
Dashboard |
|
| Analytics |
Dashboard |
Commerce and app analytics |
| AI agent configuration |
Dashboard |
Model, prompt, temperature, human takeover |
| Audit log |
Dashboard |
|
| Capability |
Verdict |
Notes |
| Idempotent sends |
API |
Idempotency-Key header |
| 24-hour window enforced before the send |
API |
409 outside_messaging_window rather than Meta's 131047 |
| Automatic AI stand-down when you send |
API |
Resumes after the takeover window, or when the customer texts BOT |
| Retrieve a message by id after the fact |
Unsupported |
No GET /api/v2/messages/{id}. See Errors and Retries for the reconciliation workaround |
| Structured upstream Meta error codes |
Unsupported |
A rejected send returns 502 with Meta's reason as prose, not a numeric meta_code |
| Published per-plan rate limits |
Unsupported |
429 is returned when WhatsApp rate-limits the number; Ghala does not publish its own numeric quotas |
If something you need is unsupported
Three options, in the order worth trying:
- Check whether the dashboard does it. Most "missing" capabilities are dashboard features that simply are not on the public API. A one-off setup step does not need to be automated.
- Take the callback override and talk to Meta directly. You keep sending through Ghala or move entirely to Meta, but understand what pauses: no Ghala inbox, no AI agent, no order capture for that number.
- Ask for it. The API is deliberately narrow rather than accidentally incomplete, and the shape of what integrations actually need is what decides what gets built next.
What's next