textbee Logotextbee.dev
Save 44% with yearly billing.View Plans

E-commerce

Shopify SMS integration: order and shipping texts from your own phone with Shopify Flow

Published and updated

A Shopify store can text customers through textbee with nothing installed in the store. On the Grow, Advanced and Plus plans, a Shopify Flow workflow adds a Send HTTP request action that posts the order details to the textbee send endpoint when an order is created, paid or fulfilled. On every plan, a Zapier, Make or n8n flow with a Shopify trigger does the same job. Shopify itself sends one order confirmation text, only when the customer gave no email, and that text cannot be edited. This route covers every other event and sends from a number your customers can reply to.

Send
HTTP POST
to the textbee send endpoint
Receive
Webhook
MESSAGE_RECEIVED, flat JSON
Pace
10 to 15 / min
per Android phone
textbee code
None
uses what the tool ships today

What you need

  • A Shopify store on the Grow, Advanced or Plus plan for the Shopify Flow route. Any plan works with the Zapier, Make or n8n route.
  • A textbee account with the Android app installed on the phone that holds the SIM, and an API key from the dashboard.
  • A checkout that collects a phone number: in Settings, then Checkout, set the shipping address phone number to Optional or Required. Shopify stores it in E.164 form, which is what the send endpoint expects.
  • The textbee app on the phone. Download the app, then create an API key in the dashboard.

Send SMS from Shopify

Shopify Flow runs the workflow when the order event fires and fills the request body from the order with Liquid. The steps below build an order confirmation; the shipping text swaps the trigger and the body.

  1. Create the workflow

    Open Shopify Flow from Apps and create a workflow. Pick the trigger: Order created for a confirmation text, Order paid if you capture payment by hand, or Fulfillment created for a shipping text with the tracking link.

  2. Skip orders with no phone

    Add a condition that checks the phone field is not empty: order.shippingAddress.phone, or order.phone when customers use a phone as their contact method. A request with an empty recipients array is rejected with 400, and this condition keeps it out of the run log.

  3. Add the Send HTTP request action

    Add the action and fill the request. Flow can store the key as a secret so it is hidden in the editor and the run logs; the Send HTTP request reference explains how.

    FieldValue
    HTTP methodPost
    URLhttps://api.textbee.dev/api/v1/gateway/send-sms
    Headerx-api-key: YOUR_TEXTBEE_API_KEY
    HeaderContent-Type: application/json
  4. Write the body

    The json filter wraps each value in quotes and escapes it, so the body stays valid JSON whatever the customer typed. For the Fulfillment created trigger, read the order through fulfillment.order and add the first tracking link.

    Order created body
    {% assign phone = order.shippingAddress.phone | default: order.phone %}
    {% capture text %}Hi {{ order.customer.firstName | default: "there" }}, order {{ order.name }} is confirmed. Total {{ order.totalPriceSet.shopMoney.amount }} {{ order.totalPriceSet.shopMoney.currencyCode }}. We will text you when it ships.{% endcapture %}
    {
      "recipients": [{{ phone | json }}],
      "message": {{ text | json }}
    }
  5. Set the error handling

    For On client error (4XX response) choose Fail, so a wrong key or a bad number shows in the run log instead of retrying for a day. Leave On server error (5XX or 429 response) on Retry.

  6. Test with one order

    Turn the workflow on and place a test order with your own number. The run log shows the request and the textbee response with its smsBatchId, and the text arrives within seconds. Fulfillment created runs once per fulfillment, so a split shipment sends one text per package.

Receive SMS in Shopify

Flow has no trigger for an incoming webhook. A reply goes through a workflow tool that can both receive the textbee webhook and write to Shopify.

  1. Catch the reply

    In Make, Zapier or n8n create a webhook trigger and register its URL in the textbee dashboard for the MESSAGE_RECEIVED event. Each delivery carries sender, message and receivedAt.

  2. Find the order

    Use the tool’s Shopify module to search customers by phone with the sender value, then read that customer’s latest order.

  3. Write it back

    Add the message as a note or a tag on the order, or post it where your support team works. A reply to a shipping text is nearly always a question about that order, so put it next to the order.

  4. Answer from the same number

    A second HTTP step that posts to the send endpoint with recipients set to sender keeps the conversation on the number the customer already texted.

Ask your AI agent to set it up

The prompt below carries the endpoints, the payloads and the Shopify details from this page. Change the line that starts with What I want, paste the prompt into your agent, and it walks you through the setup with your own field names and numbers.

Prompt for your AI agent

Paste it into Claude, ChatGPT, Cursor or any coding agent. It carries the textbee API facts and the Shopify details the agent needs, so it does not guess.

I want to connect textbee to Shopify. textbee is an SMS gateway that sends and receives SMS through my own Android phone. Help me set it up step by step.

Facts about the textbee API. Use only these. Do not invent endpoints or fields.
- Send an SMS: POST https://api.textbee.dev/api/v1/gateway/send-sms with the header x-api-key: <TEXTBEE_API_KEY> and a JSON body like {"recipients": ["+12015550123"], "message": "Hello"}. recipients must be a JSON array of E.164 numbers, even for one number. Optional fields: deviceId, simSubscriptionId, scheduledAt (ISO 8601, in the future). The response is {"data": {"success": true, "smsBatchId": "..."}}.
- Check delivery or read replies: GET https://api.textbee.dev/api/v1/gateway/messages with the same header. Filters: direction=received, smsBatchId=<id from the send>, from and to as ISO timestamps. Each row has a status such as sent, delivered, failed or received.
- Receive an SMS: textbee posts JSON to a webhook URL I register in the dashboard. A MESSAGE_RECEIVED delivery has these top-level fields: smsId, message, deviceId, webhookSubscriptionId, webhookEvent, idempotencyKey, sender, receivedAt. The header X-Signature holds an HMAC-SHA256 hex digest of the raw body, keyed with the signing secret I set on the webhook. Retries reuse the same idempotencyKey.
- Limits: One Android phone sends roughly 10 to 15 messages a minute. Text only, no MMS. Messages over 160 characters are split into segments.

What I want: Text the customer from my own phone when a Shopify order is placed and again when it ships, with the tracking link, and get their replies onto the order.

Shopify specifics you should know:
- Shopify Flow is the automation app inside Shopify. Its Send HTTP request action (Grow, Advanced and Plus plans) takes an HTTP method, a URL, key and value headers, and a body written in Liquid. Variables use the Admin GraphQL field names in camelCase: order.name, order.customer.firstName, order.shippingAddress.phone, order.totalPriceSet.shopMoney.amount, fulfillment.order, fulfillment.trackingInfo (a list with url, number and company).
- Apply the json Liquid filter to every value placed in the JSON body, for example {{ phone | json }}, so quotes and line breaks are escaped. Flow supports assign, capture, if and for.
- Shopify stores checkout phone numbers in E.164, but the field is empty unless the checkout collects it (Settings, Checkout, shipping address phone number). Add a condition that the phone is not empty before the action.
- Useful triggers: Order created, Order paid, Order fulfilled, Fulfillment created, Fulfillment order line items prepared for pickup. Flow also has a Wait action for a delayed follow-up.
- Flow cannot receive a webhook. Replies need Make, Zapier or n8n with their Shopify module to add a note or tag to the order.
- On the Basic plan, use a Shopify trigger in Zapier, Make or n8n and the same POST from those tools.

Give me:
1. The exact clicks and field values in Shopify, using its real field labels.
2. The request body or field mapping, with placeholders for my API key and phone numbers. Never ask me to paste the real key into this chat.
3. A test with one number and what a correct result looks like.
4. The three most likely failure causes and how to check each one.

Automations that work well

Order confirmation
Order created trigger, the phone condition, then the request with the order name and total. Shopify sends its own confirmation text only when the customer gave no email, so most customers get nothing without this.
Shipped, with tracking
Fulfillment created trigger. The body loops over fulfillment.trackingInfo and takes the first url. Use the carrier link as it is; shortened links get filtered more often.
Ready for pickup
Fulfillment order line items prepared for pickup trigger, and a text with the store address and opening hours.
Cash on delivery check
Order created with a condition on the payment gateway name, a text that asks for a YES reply, and the receive flow tags the order confirmed when the reply arrives.
Review request
Order fulfilled trigger, a Wait of a few days, then one text with the review link. Keep it to one message and honour STOP.

Why teams move Shopify SMS to their own phone

The bill
SMS apps in the App Store charge a monthly subscription plus a per-message fee, and Shopify Messaging bills per text with a monthly fee per number. A store texting a few hundred orders a week pays every month for traffic a phone sends on a flat plan.
The reply rate
A shipping text from a short code or a rented number is one more notification. A text from the store’s own mobile number, which the customer can answer and call, gets read.
Nothing installed in the store
No app with access to customer data, no sender registration, no theme change. One workflow that calls one endpoint, which you can turn off in a click.

A cloud SMS provider in Shopify vs textbee in Shopify

What you care aboutCloud SMS providertextbee
SetupInstall an SMS app or connect a provider, register the sender where required, map the order events in the appCreate an API key, add one Send HTTP request action to a Flow workflow: about ten minutes
Sender the contact seesA rented virtual number, or an alphanumeric sender where the country allows itYour own mobile number, which your contacts already have saved
Monthly costPer message, plus number rental and carrier surcharges in some countriesA flat plan with messages included: Pro is $14.99 a month for 5,000 messages. No per-message fee, no number rental, no carrier surcharge.
ThroughputSet by the provider tier and by sender registrationOne phone sends roughly 10 to 15 messages a minute. Add phones to scale.
RepliesInbound webhook from the provider, or the provider app in the tooltextbee webhook: flat JSON, signed with HMAC-SHA256
Where the message leaves fromThe provider data centerAn Android phone you own, plugged in, on Wi-Fi or mobile data
Shopify costApp subscription plus per-message fees, or Shopify Messaging billed per textNone on the Grow, Advanced and Plus plans; a workflow tool subscription on Basic

Per-message prices by provider and country, with sources and dates, are on the provider comparison pages.

What works and what does not

Works today

  • A text on any order or fulfillment event Flow exposes, with order fields in the message
  • Sending from the store’s own mobile number, so customers can reply and call back
  • Split shipments: Fulfillment created runs per package, each with its own tracking link
  • Delivery checks: a second Send HTTP request that GETs the messages endpoint with the smsBatchId from the first response

Not with this route

  • The Shopify Flow route on the Basic plan; use Zapier, Make or n8n there
  • Replies inside the Shopify admin; they arrive through a workflow tool as a note or tag
  • Marketing blasts; Flow sends one text per order event, and promotions belong in a separate consented list
  • MMS

What Shopify charges

Shopify Flow is included with every Shopify plan, but the Send HTTP request action is available on the Grow, Advanced and Plus plans only. help.shopify.com, checked on September 30, 2026. textbee itself charges a flat monthly plan with messages included; see pricing.

Frequently asked questions

Does Shopify send SMS by itself?

One order confirmation text, only when the customer checked out with a phone number and no email, and only for stores based in a short list of countries. That text cannot be edited. Shipping, pickup and delivery updates need an app or this route.

Can I use this on the Basic plan?

Not through Flow, because Send HTTP request needs Grow or higher. Use the Shopify trigger in Zapier, Make or n8n and the same POST from those pages. The phone number and the order fields come from the trigger output.

Why is the phone number empty in my test run?

Shopify only stores a phone when the checkout asks for one. In Settings, then Checkout, set the shipping address phone number to Optional or Required, or let customers use a phone as their contact method. Then read order.shippingAddress.phone or order.phone in the body. The phone condition keeps a run with no number from sending an empty recipients array.

Is there a textbee app in the Shopify App Store?

No. This route uses the Send HTTP request action that Shopify ships. Nothing is installed in the store, and nothing on Shopify’s side is billed for the texts.

Can customers reply to the text?

Yes. The text comes from the mobile number in the phone, so a reply lands there and reaches your tools through the textbee webhook. Flow itself cannot receive it; Make, Zapier or n8n turn it into a note or tag on the order, or forward it to your support inbox.

Can I send marketing texts from Shopify this way?

The route can send any text, but keep transactional and marketing apart. Order texts rest on the number given at checkout. A promotion needs written consent and a working STOP, and belongs in a consented list sent at a pace the phone can sustain.

Does a split shipment send two texts?

Yes. Fulfillment created runs once per fulfillment, each with its own tracking link. For one text per order, trigger on Order fulfilled instead and link to the order status page with order.statusPageUrl.

Does Flow retry when the phone is offline?

It does not need to. textbee accepts the request and queues the message, and the phone sends it when it reconnects. Flow retries only when textbee answers with a 5XX or 429, which is rare.

Can I choose which phone sends?

Yes. Add a deviceId field to the JSON body. A store with one phone per market can pick it with a Liquid condition on order.shippingAddress.countryCode.

How do I see whether the text was delivered?

Every run log shows the textbee response with its smsBatchId. Delivery status arrives through a MESSAGE_DELIVERED or MESSAGE_FAILED webhook, or a second Send HTTP request in the same workflow can GET the messages endpoint with that id.

Can one workflow text the store owner too?

Yes. Put two numbers in the recipients array, or add a second Send HTTP request with your own number and a shorter message. An order over a set amount that texts the owner is a common first workflow.

How long does the setup take?

About five minutes with a phone at hand: install the textbee app, register the phone, create an API key, and add one Send HTTP request action to a Flow workflow. Receiving adds a webhook in the textbee dashboard and a webhook trigger in Make, Zapier or n8n.

Sources

  1. help.shopify.com, checked on September 30, 2026
  2. help.shopify.com: Using Liquid variables in Shopify Flow, checked on September 30, 2026
  3. help.shopify.com: Shopify Flow triggers, checked on September 30, 2026
  4. help.shopify.com: SMS notifications, checked on September 30, 2026

Read next

Your phone is already an SMS gateway. Switch it on.

Set up in minutes and send your first message for free. No credit card, no per-message fees, no carrier contracts.

Free tier forever No credit card required Open source

Need self-hosting help or a custom integration? See services