Migration guide

How to migrate from SMSAPI to Bird

A developer-focused guide to moving an existing SMSAPI integration to Bird: channel and compliance differences, request-format mapping, and a step-by-step migration checklist.

SMSAPI is a Polish business-messaging platform (a brand of LINK Mobility Poland) that exposes bulk SMS, MMS, RCS, WhatsApp and voice over a REST API. Bird (formerly MessageBird) is a communications infrastructure platform offering unified APIs for email, SMS, WhatsApp and voice. On the messaging.dev Score, SMSAPI rates 44/100 and Bird 76/100; this guide covers, as data rather than endorsement, what actually changes when you move an existing SMSAPI integration to Bird.

What changes at a glance

Channels you keep: SMS, WhatsApp and voice exist on both. Channel you gain: email — Bird adds a first-class email channel. Channels you lose: MMS and RCS, both supported by SMSAPI but not by Bird. Neither provider offers Viber, Facebook Messenger, Telegram or Apple Messages for Business, so nothing changes there.

Compliance: both are GDPR-compliant and ISO 27001 certified. Bird additionally carries SOC 2 and HIPAA, which SMSAPI does not — a net gain if you need either.

Data residency: SMSAPI hosts in the EU only, with no region choice. Bird runs both EU and US regions and lets you choose data residency, encoded in its region-prefixed API keys (see below).

Pricing: SMSAPI uses prepaid pay-as-you-go credit with a minimum top-up around €30 and SMS from ~€0.04. Bird uses usage-based transactional pricing with no platform or seat fees and published per-country rates (US SMS from $0.0073). Free developer credit differs in kind: SMSAPI gives free test SMS on signup; Bird gives a free email tier (1,000/month), not free SMS.

SDKs: SMSAPI ships PHP, Python, JavaScript, Java, C#, Go and Bash; Bird ships TypeScript, Python and Go. If your code uses the PHP, Java, C# or Bash SDKs, you will call Bird’s REST API directly or move to TypeScript/Python/Go. Both offer a sandbox and both rate “high” on docs quality.

How the request format differs

SMSAPI:

curl -X POST -H "Authorization: Bearer YOUR_API_TOKEN" "https://api.smsapi.com/sms.do?to=48500000000&from=SenderName&message=Hello+world&format=json"

Bird:

curl -X POST "https://us1.platform.bird.com/v1/sms/messages" \
  -H "Authorization: Bearer bk_us1_..." \
  -H "Content-Type: application/json" \
  -d '{
    "to": "+14155550100",
    "from": "Bird",
    "text": "Your Bird verification code is 481920. It expires in 10 minutes.",
    "category": "authentication"
  }'

Three things change:

  • Endpoint: you move from https://api.smsapi.com/sms.do to https://us1.platform.bird.com/v1/sms/messages (or the eu1 host).
  • Authentication: SMSAPI uses an OAuth 2.0 API token as Authorization: Bearer <token>. Bird also uses a Bearer token, but the key is region-prefixed (bk_us1_... / bk_eu1_...) and the prefix selects the regional host; SDKs route automatically.
  • Payload: SMSAPI passes parameters in the URL query string (to, from, message, plus format=json). Bird sends a JSON body with Content-Type: application/json. Field mapping: toto (but Bird expects E.164, e.g. +14155550100), fromfrom, and the message body messagetext. Bird also expects a category field (e.g. authentication); there is no format parameter.

Migration checklist

  1. Create a Bird account and generate a region-prefixed API key (bk_us1_... or bk_eu1_...) for the region where you want data resident.
  2. Map request fields: messagetext, keep to/from, convert recipients to E.164, add a category, and move parameters from the query string into a JSON body.
  3. Re-point your sending code to Bird’s base URL and the new Bearer key; switch to the TypeScript/Python/Go SDK if you used one.
  4. Re-test in Bird’s sandbox before sending live traffic (Bird provides one).
  5. Update delivery/status webhooks and callbacks to Bird’s format.
  6. Run both integrations in parallel and compare delivery results.
  7. Cut over once Bird matches your baseline, then stop topping up SMSAPI credit.

Watch out for

  • No MMS or RCS on Bird — if you send picture or RCS messages today, you will need another channel or provider.
  • Narrower SDK coverage: no official PHP, Java, C#, JavaScript or Bash SDK; plan for REST or TypeScript/Python/Go.
  • Free credit is email only (1,000/month), not free SMS — budget for paid SMS testing.
  • Stricter request shape: Bird requires E.164 recipients and a category on every message, so requests that worked with SMSAPI’s local number format and query-string params will fail until reformatted.

See how to start with Bird for a full quickstart, and Bird vs SMSAPI for the side-by-side data.