If you already run outbound SMS through n8n, the default path is a Twilio credential and the Twilio node's send operation. That works right up until your business classification does not clear A2P 10DLC campaign vetting, or clears it and then gets throttled so hard that half your messages never arrive. Payday lending, debt collection, cannabis, vape, crypto, MLM, lead generation, real estate wholesaling and gambling all hit this wall regardless of how clean the message copy is. This is the setup for wiring an n8n workflow to a phone number that is not gated by a carrier campaign at all: the HTTP Request node for outbound sends, the Webhook node for inbound replies, and where the two fit into a workflow you can build today.
Why the Twilio node in n8n hits the same wall every high-risk sender hits
A2P 10DLC is the rule the four major U.S. carriers adopted to vet business messaging traffic before it touches their networks. Sending through Twilio, or any aggregator, means registering a Brand and a Campaign with The Campaign Registry, waiting on carrier approval, and then having every outbound message scored against the approved use case. CTIA's messaging principles lay out the content categories carriers filter hardest on, sex, hate, alcohol, firearms, tobacco and cannabis, known in the industry as SHAFT-C. Gambling, cannabis and payday lending campaigns are routinely rejected outright. Credit repair, debt consolidation, lead generation, real estate wholesaling and crypto often get approved and then throttled to a fraction of what was submitted, with no signal back to the sender about which messages actually landed.
None of this is specific to n8n. It's the same TCR gate whether the send comes from a Twilio node in a workflow, a cURL call, or the Twilio console. Swapping in a different aggregator node doesn't change the outcome, because every major aggregator (Twilio, MessageBird, Plivo, Bandwidth) runs A2P traffic through the same TCR registration and carrier-filtering pipeline.
What changes when n8n talks to a phone instead of an aggregator
Android Texter routes messages through a user-owned Android phone's own carrier line instead of an aggregator connection. The phone sends the way it would if you were texting a friend from the keypad: person-to-person SMS, not application-to-person. P2P traffic sits outside the A2P 10DLC regime entirely, so there is no Brand to register, no Campaign to get approved, and no SHAFT-C content filter scoring the message before it sends. The dashboard at androidtexter.com exposes the same actions a Twilio integration would need (send, receive, schedule, broadcast) through a documented REST API, which is what makes it usable from an n8n workflow without a dedicated app node.
This does not touch the other law that governs SMS. The Telephone Consumer Protection Act still requires prior express consent before you text a wireless number for marketing purposes, and the FCC's implementing rules set statutory damages at $500 per violation, $1,500 if the violation is found willful. Routing around A2P 10DLC removes a carrier gate. It does not remove your obligation to have consent on file before the workflow fires.
Send SMS from n8n with the HTTP Request node
There's no dedicated Android Texter node in n8n's app directory, so this goes through the HTTP Request node, the same way you'd call any REST API n8n doesn't have a pre-built connector for.
- In the Android Texter dashboard, go to
/dashboard/settings/api-keysand generate a key. It's prefixedatx_and shown once. - In n8n, create a credential of type Header Auth (n8n's generic credential type for custom API keys). Set the header name to
X-API-Keyand the value to your key. - Add an HTTP Request node. Method: POST. URL:
https://androidtexter.com/api/v1/messages/send. Authentication: the Header Auth credential from step 2. Body: JSON, with the recipient number and message text populated from earlier nodes in the workflow. - For a scheduled send instead of an immediate one, add a
scheduled_atfield to the body with an RFC 3339 timestamp. This is handled server-side, so the n8n workflow doesn't need to stay running until send time. - To notify more than one recipient from a single node execution, the same endpoint accepts a broadcast of up to 500 numbers per call. For lists larger than that, or when you want deliberate pacing rather than a burst, feed the list through n8n's Split In Batches node first.
- The API enforces 10 send requests per second with a burst of 20. A workflow that loops over a big contact list without batching will start getting rate-limited responses well before it hits 500 in a single call, so batch even inside the 500 cap if the trigger fires all at once (a CSV import, for instance).
The full endpoint list, including device targeting via device_id for multi-phone accounts, is documented at /api/swagger with the machine-readable spec at /api/openapi.json, both useful for building out the HTTP Request node's body schema by hand.
Catch replies in n8n with the Webhook node
Sends are half the workflow. Replies are the other half, and polling an API on a timer is the wrong default when a Webhook node can just receive the event.
- Add a Webhook node to a new workflow. Method: POST. Copy the production URL (not the test URL, which only listens while the editor is open).
- Register that URL with Android Texter's webhook endpoint,
POST /api/v1/webhooks, for themessage.receivedevent (andmessage.sentormessage.deliveredif the workflow needs delivery confirmation too). - The registration response includes a signing secret. Verify it before trusting the payload, either with n8n's built-in header auth on the Webhook node itself or with a Code node that checks the HMAC signature against the raw body. Don't skip this step; an unauthenticated webhook URL is an open door for anyone who finds it.
- From there the payload flows into whatever the workflow needs to do: update a CRM record, post to a Slack channel, or trigger an auto-reply through the HTTP Request node from the previous section.
- Publish the workflow (Production trigger mode) before pointing real traffic at it. A workflow left in editor/test mode won't respond to the live webhook calls.
A workflow worth building first: acknowledge a reply inside 15 seconds
The combination that pays off fastest is the simplest one: Webhook node catches an inbound reply, a Code or If node checks it against expected keywords, and an HTTP Request node fires an acknowledgment back through /api/v1/messages/send immediately, before a human ever opens the thread. For lead-gen and wholesaling workflows in particular, where a 2 percent reply rate on a large outbound batch can mean dozens of live conversations arriving within an hour, an n8n workflow doing the first-touch acknowledgment is what keeps early replies from going stale while someone works through the inbox.
What n8n can't do for you: consent is still yours to prove
Nothing about a phone-based P2P channel or an n8n workflow changes who is responsible for TCPA compliance. That responsibility sits with the operator, same as it would with any provider. Keep records of where consent was collected and when, honor STOP and its variants (UNSUBSCRIBE, CANCEL, END, QUIT) with automatic suppression rather than manual follow-up, and don't build a workflow that re-adds a number to a send list after an opt-out. If a vertical you're in has its own contact-frequency rule on top of the TCPA (debt collection under CFPB Regulation F is the clearest example), that rule doesn't go away because the channel changed.
Frequently Asked Questions
Does this replace Twilio's phone number rental?
No. Android Texter routes messages through a phone number tied to a physical Android device you or your team already own, not a rented virtual number. If you don't have a spare Android phone and a SIM with an active line, you need one before any of this works.
Why isn't there a dedicated Android Texter node in n8n?
Because P2P SMS gateways aren't part of n8n's built-in app directory the way Twilio or Vonage are. The HTTP Request and Webhook nodes cover the same ground for any documented REST API, and in practice that's how most operators wire in a service without a pre-built connector.
Will recipients see these as coming from a business?
No, and that's the mechanism, not a side effect. The message originates from a real 10-digit number on a real carrier line, the same way a text from a personal phone looks to the recipient's carrier. That's what keeps it outside A2P 10DLC.
Do I still need to register a TCR brand or campaign?
No. That registration and the campaign vetting that follows it is exactly the layer P2P routing sits outside of. It doesn't remove the need for TCPA consent, which is a separate, still fully applicable requirement.
What happens if my workflow exceeds the API's rate limit?
Requests over 10 per second (burst 20) on the send endpoint get rejected until the window resets. Add a Split In Batches node ahead of any HTTP Request node that could fire in a tight loop, particularly on triggers like a CSV import or a large contact list sync.
Closing
If your vertical gets rejected at TCR before a campaign ever goes live, or approved and then throttled to the point of uselessness, an n8n workflow talking to Android Texter's API through two standard nodes is a faster path back to a working send than waiting on an appeal that most aggregators don't offer. The setup above, an HTTP Request node for sends and a Webhook node for replies, covers the two directions any SMS workflow actually needs.
