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.