Documentation
Migrating from TextMeBot
TextMeFlow exposes a TextMeBot-compatible endpoint with the same URL shape and the same response body. For most integrations the migration is literally one hostname change.
1. The one-line change
If your code calls TextMeBot like this:
GET https://api.textmebot.com/send.php?recipient=+32470000000&apikey=KEY&text=Hello
point it at TextMeFlow instead:
GET https://api.textmeflow.eu/send.php?recipient=+32470000000&apikey=KEY&text=Hello
The response body keeps the exact same contract, so existing success/failure checks keep working without modification:
Result: <b>Success</b><br>Message: queued (12345) Result: <b>Failed</b><br>Reason: recipient_opted_out
2. Buttons work too
TextMeBot's three button slots (button1 + button1id through button3 + button3id) are supported. Each pair renders as a CTA-URL button: the label comes from buttonN, the target URL from buttonNid. Non-URL payloads are ignored, and WhatsApp caps native buttons at three — the same limit TextMeBot has.
3. What happens behind the compat endpoint
The /send.php endpoint runs the exact same pipeline as our native POST /v1/messages API: recipient validation (E.164), opt-out check, monthly quota gate and the anti-spam layer (rate limits + risk score). You get the deliverability protection even while still using the legacy URL shape.
Failure reasons are returned in the body, e.g. invalid_apikey, recipient_opted_out, quota_exceeded — more precise than a bare "Failed".
4. When to switch to the native API
The compat endpoint is for zero-effort migration. New code should use the JSON API — it returns structured errors and a message id you can poll:
POST https://api.textmeflow.eu/v1/messages
Authorization: Bearer YOUR_API_KEY
Content-Type: application/json
{"to": "+32470000000", "text": "Hello", "media_url": "https://example.com/invoice.pdf"}
See the API reference for all endpoints and error codes, and inbound webhooks to receive replies as HMAC-signed JSON.
5. What you gain by migrating
- EU hosting (Paris, France) and an automatic GDPR data processing agreement on paid plans
- Explicit quotas per plan — no surprise throttling; a free plan of 50 messages/month, forever
- Built-in anti-spam pipeline: rate limits, risk score, automatic STOP handling and quiet hours
- Inbound replies via signed webhooks with retries
TL;DR
Swap api.textmebot.com for api.textmeflow.eu, keep everything else. Test on the free plan (50 messages/month) before moving production traffic.