Send messages from n8n workflows
n8n is the self-hostable workflow engine developers reach for when flows need version control, credentials management, and code steps alongside no-code nodes.
Use the HTTP Request node with header credentials holding your X-API-Key / X-API-Secret pair — the key stays in n8n's encrypted credential store, out of the workflow JSON. The Webhook node gives you an endpoint URL to register with SendiMessage, so outbound and receive events trigger workflows directly. A Function node in between can apply consent checks or formatting before anything sends.
What this integration enables
Implementation options
Architecture
- n8n eventA record changes, a stage moves, or a workflow fires
- Workflow or backendn8n automation or your middleware prepares the request
- SendiMessage APIPOST /send-message — the message is validated and queued
- Managed messaging lineYour dedicated line sends the message
- SMS or supported iMessageChannel routing picks iMessage where supported, SMS otherwise
- CustomerThe message arrives; the customer can reply
- Delivery or reply eventSendiMessage records what actually happened
- Signed webhookYour endpoint receives outbound or receive
- n8n timeline updateYour handler writes the event back as activity
Example request
{"number": "{{trigger.phone}}","content": "Hi {{trigger.first_name}}, your appointment is tomorrow at 10:00 AM.","status_callback": "https://your-endpoint.example.com/status?record_id={{trigger.id}}"}
Map the {{…}} placeholders from your n8n trigger data — the syntax shown is illustrative. status_callback is optional: it receives this message's delivery events, and because you compose the URL you can embed your own record id for correlation. Store the returned message_handle for the same purpose.
Delivery events and incoming replies
Use a n8n webhook trigger as your SendiMessage event endpoint: delivery confirmations and incoming replies then start flows that update the CRM, notify a channel, or open a ticket.
// "outbound" event → your n8n endpoint// Verify the SendiMessage-Signature header (t={timestamp},v1=HMAC-SHA256 of// "{timestamp}.{raw body}", keyed with your webhook secret), then use// GET /v2/messages/{message_handle} for authoritative state and match it to// your record_id in n8n.
Limitations and honest notes
- iMessage delivery is available on supported messaging lines and destinations. Recipients without iMessage receive SMS when fallback is configured — never assume universal iMessage availability.
- Messages are accepted asynchronously — the API returns status QUEUED and final status arrives via webhook or the message endpoints.
- No official SDK for this ecosystem yet — the example uses plain HTTP against the REST API. Official SDKs are published for JavaScript/TypeScript (npm: sendimessage), Python (PyPI: sendimessage), PHP (Composer: sendimessage/sdk), and Go (github.com/sendimessage/sendimessage-go). Every SDK is dependency-free and covers the full public API surface.
- A published SendiMessage app in the n8n directory is not available today — the integration uses the HTTP Request node (Header Auth credential), which is fully supported.
Security considerations
- Store the API key in n8n's credential/connection store, not in plain text fields inside scenarios.
- Restrict who can edit flows that send customer messages.
- Keep phone numbers and message content out of run logs where the platform allows it.
Frequently asked questions
Is there a SendiMessage app in the n8n directory?
What does a successful send look like?
Can flows react to delivery and replies?
Does self-hosting change anything?
Related integrations
Ready to connect n8n?
Request a messaging line and a SendiMessage integration specialist will review your n8n workflow and guide the setup.