Connect Shopify order events to SMS and iMessage
Shopify emits webhooks for every order milestone — created, paid, fulfilled, and fulfillment events with tracking numbers. Those webhooks are the natural trigger for customer messaging.
Point Shopify's orders/fulfilled (or fulfillment event) webhook at a small endpoint you host — a serverless function is plenty. The handler verifies Shopify's HMAC, builds the message from the order payload, and posts to the SendiMessage API with the order id embedded in the status_callback URL. Shopify Flow (Plus) can call the same endpoint from richer conditions, and delivery/reply events return on your SendiMessage webhook for order-timeline notes via the Admin API.
What this integration enables
Implementation options
Architecture
- Shopify eventA record changes, a stage moves, or a workflow fires
- Workflow or backendShopify 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
- Shopify timeline updateYour handler writes the event back as activity
Example request
{"number": "{{order.customer_phone}}","content": "Hi {{order.first_name}}, your order #{{order.number}} has shipped. Track it here: {{order.tracking_url}}","status_callback": "https://your-endpoint.example.com/status?order_id={{order.id}}"}
Template variables are examples — use your platform's own merge fields or values resolved by your handler. The API accepts only number, content, and optional media_url / status_callback / line_handle; store the returned message_handle on the order to match later events back.
Delivery events and incoming replies
Delivery events arrive on your status_callback URL with the order id you embedded in it, so your handler can mark the notification delivered on the order timeline; replies arrive on your webhook and can open a support conversation.
// "outbound" event → your shopify 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 order_id in shopify.
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 native Shopify app is not available today; the methods on this page are API-based.
- Send messages only to recipients who expect them. Transactional and operational messaging is the primary use case — unsolicited bulk marketing is not.
Security considerations
- Keep the API key in your server or platform secret store — never in theme code, storefront scripts, or checkout customizations.
- Verify webhook signatures before updating order records.
- Send only what the message needs (phone, first name, order number) — never full order or payment details.
Frequently asked questions
Does SendiMessage have a native Shopify app?
Can order notifications use iMessage?
Are abandoned-cart messages allowed?
Do I need a Shopify app to integrate?
Related integrations
Ready to connect Shopify?
Request a messaging line and a SendiMessage integration specialist will review your Shopify workflow and guide the setup.