Conversations and Messages API: sending a message and checking delivery status
How to send messages via API to an Omnifox conversation and track their delivery status.
The Conversations and Messages API lets you read, create, and reply to conversations on any connected channel (WhatsApp, Instagram, Messenger, Webchat, etc.) from your own backend or automation tool, without opening the Inbox.
Requirements
- A Bearer token with access to the workspace.
- An existing
conversation_id, or usefind-or-createto get one from a contact + channel pair.
Main endpoints
GET /api/v1/conversations— lists conversations (with?workspace_id=and status filters).POST /api/v1/conversations/find-or-create— gets or creates the conversation for a contact+channel.GET /api/v1/conversations/{conversation}— detail view.POST /api/v1/conversations/{conversation}/messages— sends a message.GET /api/v1/conversations/{conversation}/messages— lists messages.GET /api/v1/conversations/{conversation}/messages/{message}— checks a specific message's status.POST /api/v1/conversations/{conversation}/assign,/close,/reopen— operational flow.
Body to send a message
{
"content": "Hi, how can I help you today?",
"type": "text",
"is_internal_note": false,
"reply_to_message_id": null
}
For WhatsApp templates, use "type": "template" with template_id and template_params.
Message statuses
Every message carries a status field with one of: queued, sent, delivered, read, failed. Check it via a GET on the message, or subscribe to the message.sent, message.delivered, message.read, and message.failed outbound webhook events.
Example: send a text message
curl -X POST "https://app.omnifox.io/api/v1/conversations/101/messages" \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"content": "Your order has shipped."}'
Tips
- Use
is_internal_note: trueto leave context visible only to agents, without sending it to the customer. - On WhatsApp, if more than 24h have passed since the customer's last message, you can only re-open the conversation with an approved template (
type: template).
Troubleshooting
status: failed: check the message detail — this usually means an unapproved template, an expired 24h window, or an invalid number.- 404 on
/messages: theconversation_iddoesn't exist or belongs to a different workspace. - Message sent but the customer doesn't see it: verify
is_internal_notewasn't accidentally set totrue.
Related articles
-
How to connect integrations and external apps
Connect Omnifox with your favorite tools from the integrations catalog in just a few steps.
-
Generate and use API keys and webhooks
Create API keys to access Omnifox programmatically and set up webhooks to receive real-time events.
-
Getting started with integrations (webhook / OAuth / API key)
Connect Omnifox with your other tools. Learn when to use a webhook, a gallery OAuth connection, or an API key.
-
The Omnifox REST API: introduction and plan requirements
What the Omnifox REST API is, which plan you need (Crece and up), how to authenticate with the X-API-Key header, and where the docs live.
-
Create a personal API key (PAT)
Learn how to generate your first personal API key in Omnifox to connect integrations, scripts, or external tools to your workspace.