Save 44% with yearly billing, 5 months free.View Plans
textbee Logotextbee.dev

Automation

n8n SMS integration: send and receive texts with the official textbee node or the HTTP Request node

Published and updated

textbee has an official n8n community node, @textbee/n8n-nodes-textbee. The textbee node sends SMS and reads message history, and the textbee Trigger starts a workflow on every incoming text and delivery event. Self-hosted n8n installs it from Settings > Community Nodes today; n8n Cloud gets it after n8n verifies it. The steps below use the built-in HTTP Request and Webhook nodes instead, so they work on n8n Cloud and self-hosted now.

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

  • An n8n instance: n8n Cloud, or a self-hosted install. Receiving texts needs a public HTTPS address for the Webhook node.
  • A textbee account with the Android app installed on the phone that holds the SIM, and an API key from the dashboard.
  • A trigger for the send workflow: a form, a schedule, a database row, a chat message, or any other n8n trigger.
  • The textbee app on the phone. Download the app, then create an API key in the dashboard.

Send SMS from n8n

These steps use the built-in HTTP Request node. With the textbee node installed, add its API credential and a textbee node with Message > Send instead. Either way the API key stays in a credential, and an exported workflow never contains it.

  1. Create a Header Auth credential

    Open Credentials, add Header Auth, set Name to x-api-key and Value to your textbee API key.

  2. Add an HTTP Request node

    Switch the JSON field to expression mode so the {{ }} values resolve from the previous node.

    FieldValue
    MethodPOST
    URLhttps://api.textbee.dev/api/v1/gateway/send-sms
    AuthenticationGeneric Credential Type, Header Auth, your credential
    Send Bodyon
    Body Content TypeJSON
    Specify BodyUsing JSON
    JSON
    {
      "recipients": ["{{ $json.phone }}"],
      "message": "Hi {{ $json.name }}, your table is ready."
    }
  3. Execute the node

    Click Execute step with a test item. The output has data.success true and data.smsBatchId. The text arrives within a minute.

  4. Activate the workflow

    Save and activate. Every run of the trigger now sends a text through the phone.

Receive SMS in n8n

The Webhook node gives you a test URL while you listen and a production URL once the workflow is active. Register the production URL in textbee. With the textbee node installed, the textbee Trigger registers the webhook and checks the signature for you.

  1. Add a Webhook node

    Start a workflow with the Webhook node, HTTP Method POST, Path textbee. Copy the Production URL.

  2. Register it in textbee

    In the textbee dashboard open Webhooks, create one with that URL, select MESSAGE_RECEIVED and set a signing secret.

  3. Listen for a test event

    Click Listen for test event and text the phone from another number. The item shows body.sender, body.message and body.receivedAt.

  4. Verify the signature

    Add a Crypto node with Action Hmac, Type SHA256, Value {{ $json.headers["x-textbee-signature"].split(",")[0].slice(2) }}.{{ JSON.stringify($json.body) }} and your signing secret. Then add an If node with two conditions: the result equals {{ $json.headers["x-textbee-signature"].split(",")[1].slice(3) }}, and {{ Math.abs(Date.now() / 1000 - Number($json.headers["x-textbee-signature"].split(",")[0].slice(2))) }} is at most 300. textbee signs the timestamp, a dot and the compact JSON, so the re-serialized body matches.

Ask your AI agent to set it up

The prompt below carries the endpoints, the payloads and the n8n 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 n8n details the agent needs, so it does not guess.

I want to connect textbee to n8n. 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 phone numbers, even for one number. Use international format, for example +12015550123. 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-Textbee-Signature has the form t=<unix seconds>,v1=<signature>, where the signature is the HMAC-SHA256 hex digest of "<t>.<raw body>", keyed with the signing secret I set on the webhook. Compare v1 in constant time and reject the request when t is more than 300 seconds from the current time. Retries reuse the same idempotencyKey and get a fresh t.
- 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: Send SMS from an n8n workflow, and start a workflow from every text my phone receives, with the signature verified.

n8n specifics you should know:
- HTTP Request node: Authentication Generic Credential Type with Header Auth; Send Body with Body Content Type JSON; expressions use {{ $json.field }} in expression mode.
- Webhook node: the Production URL only answers when the workflow is active; the Test URL works while listening.
- The Crypto node computes HMAC SHA256 to verify the X-Textbee-Signature header (t=<unix seconds>,v1=<hex>); textbee signs t, a dot and JSON.stringify of the payload with no extra whitespace, and t must be less than 300 seconds old.
- Self-hosted n8n needs a public HTTPS address for the Webhook node; without one, poll the messages endpoint with a Schedule Trigger instead.

Give me:
1. The exact clicks and field values in n8n, 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

Form to text
n8n Form Trigger, then an HTTP Request that texts the submitter. Add a Set node to build the message from the form fields.
Reminders on a schedule
Schedule Trigger, a database or Google Sheets node that reads tomorrow, a Loop Over Items node, then one HTTP Request per row.
AI autoresponder
Webhook trigger, an LLM node that drafts a reply from message, then an HTTP Request that sends it to sender. The blog has the full build.
Alerts from anything
An Error Trigger workflow that texts the on-call phone when any other workflow fails. SMS gets through when email and chat do not.

Why teams move n8n SMS to their own phone

The bill
n8n itself can be free to self-host, so a provider fee per text is often the only SMS cost left. A phone on a flat plan removes it.
The reply rate
Alerts and reminders from a number people already have saved get read. Texts from a rented number get ignored or filtered.
Everything self-hosted
n8n on your server, the phone on your desk, the message history in your account. No provider console and no number to port if you move.

A cloud SMS provider in n8n vs textbee in n8n

What you care aboutCloud SMS providertextbee
SetupCreate the provider account, buy a number, register the sender where required, add the provider node with its credentialsCreate an API key, add a Header Auth credential and one HTTP Request node: about five 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
n8n costOne execution per run on n8n Cloud; free self-hostedSame

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

  • Sending from any n8n trigger, self-hosted or on n8n Cloud
  • The official textbee node and textbee Trigger on self-hosted n8n, also as a tool for the AI Agent node
  • Incoming texts as a trigger, with the signature verified in a Crypto node
  • Loops and batches for many recipients, at the pace of the phone
  • Delivery checks with an HTTP Request that GETs the messages endpoint by smsBatchId

Not with this route

  • Receiving on a self-hosted instance without a public HTTPS address; poll the messages endpoint instead
  • MMS

What n8n charges

The Community Edition is free to self-host. n8n Cloud plans are priced per workflow execution, and one execution can send many texts. n8n.io, checked on September 25, 2026. textbee itself charges a flat monthly plan with messages included; see pricing.

Frequently asked questions

Is there a textbee node for n8n?

Yes. The official community node is @textbee/n8n-nodes-textbee on npm. It adds a textbee node for sending, message history, devices and webhook subscriptions, and a textbee Trigger for incoming texts and delivery events. Install it on self-hosted n8n from Settings > Community Nodes. On n8n Cloud it becomes available after n8n verifies it; until then, use the HTTP Request and Webhook steps on this page.

My n8n runs at home without a public address. Can I still receive texts?

Not through the Webhook node. Use a Schedule Trigger that GETs the messages endpoint with direction=received and order=asc, and follow the cursor so no text is read twice. The agent quickstart doc describes the cursor.

How do I send to a list?

Read the list with a Google Sheets, Postgres or Airtable node, then use Loop Over Items with a batch size of 1 and the HTTP Request inside the loop. The phone sends roughly 10 to 15 messages a minute, so add a Wait node of 4 seconds between items for long lists.

Can I build a two-way conversation?

Yes. The webhook workflow receives the text, a Switch node branches on the message, and an HTTP Request replies to sender. For free-form replies, put an LLM node in the middle; the blog tutorial builds that autoresponder step by step.

Where do I see whether a text was delivered?

In the textbee dashboard, or with an HTTP Request that GETs the messages endpoint with the smsBatchId from the send. Each row carries a status; delivered, failed and unknown are final.

Can a workflow reply automatically?

Yes. Webhook trigger, an If or Switch node on body.message, then an HTTP Request that posts to the send endpoint with recipients set to body.sender. For free-form replies, put an AI node in between.

Does the signature check need the raw body?

textbee signs the compact JSON of the payload, so JSON.stringify of the parsed body reproduces the signed bytes as long as key order is untouched, which n8n preserves. If you prefer, enable Raw Body on the Webhook node and hash that instead.

Can I run this on n8n Cloud?

Yes. The HTTP Request and Webhook nodes are the same on Cloud and self-hosted, and Cloud gives the Webhook node a public URL out of the box. The official textbee node comes to n8n Cloud after n8n verifies it; self-hosted n8n can install it now.

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 HTTP Request node to a workflow. Receiving adds a webhook in the textbee dashboard and a Webhook node.

Sources

  1. n8n.io, checked on September 25, 2026
  2. docs.n8n.io: HTTP Request node, checked on September 25, 2026
  3. docs.n8n.io: Webhook node, checked on September 25, 2026
  4. docs.n8n.io: install community nodes, checked on November 5, 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