We use optional, privacy-safe analytics to understand which pages help visitors. Nothing optional runs until you choose. Privacy policy

Skip to content
API Integration GuideWorkflow + HTTP Request

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.

Request This SetupBook an Integration Review

What this integration enables

Order confirmation
Confirm the order the moment it's placed, on the channel customers actually read.
Shipping and delivery updates
Fulfillment and carrier milestones become short, timely messages.
Payment status notifications
Confirm captured payments and flag failed ones before they become support tickets.
Customer service updates
Returns, exchanges, and inquiry follow-ups stay visible without email chains.
Abandoned checkout reminders
Only where consent rules permit — recover carts with a single respectful reminder.
Two-way order questions
Replies come back on your webhook, ready to route into support.

Implementation options

Shopify webhooks (or Shopify Flow) + HTTP request
Shopify events call the SendiMessage API directly or through a thin handler.
Middleware integration
Your backend receives Shopify webhooks, applies consent checks, sends the message, and records delivery events against the order.
Automation platform
Zapier, Make, or n8n map Shopify triggers to SendiMessage HTTP actions without custom code.
Webhook-based synchronization
Delivery events return to your status_callback URL — embed the order id in it — for order-timeline updates; replies arrive on your webhook with the customer's number.

Architecture

How it fits together: Shopify event, then Workflow or backend, then SendiMessage API, then Managed messaging line, then SMS or supported iMessage, then Customer, then Delivery or reply event, then Signed webhook, then Shopify timeline update.
  1. Shopify eventA record changes, a stage moves, or a workflow fires
  2. Workflow or backendShopify automation or your middleware prepares the request
  3. SendiMessage APIPOST /send-message — the message is validated and queued
  4. Managed messaging lineYour dedicated line sends the message
  5. SMS or supported iMessageChannel routing picks iMessage where supported, SMS otherwise
  6. CustomerThe message arrives; the customer can reply
  7. Delivery or reply eventSendiMessage records what actually happened
  8. Signed webhookYour endpoint receives outbound or receive
  9. Shopify timeline updateYour handler writes the event back as activity

Example request

Order-shipped payload
{
"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.

webhook event
// "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?
Not today. Shopify connects through the SendiMessage REST API using Shopify webhooks (or Shopify Flow), middleware, or an automation platform — this page is an API integration guide.
Can order notifications use iMessage?
Yes — the request is the same either way. The messaging line's configuration routes delivery to iMessage where the line and destination support it, with SMS fallback where configured; the channel actually used appears on the message's history row (GET /v2/messages) and webhook events. Every order update reaches the customer either way.
Are abandoned-cart messages allowed?
Only where your consent basis and local regulations permit them. Transactional order messaging is the primary use case; treat cart recovery as opt-in marketing and honor stop requests immediately.
Do I need a Shopify app to integrate?
No. Store-level webhooks pointed at your own endpoint are enough for notifications. A custom app only becomes relevant if you later want Admin API access for timeline write-backs, in which case a private custom app token covers it.

Ready to connect Shopify?

Request a messaging line and a SendiMessage integration specialist will review your Shopify workflow and guide the setup.