Migration guide

How to migrate from Prelude to Infobip

A developer-focused, data-backed guide to moving your messaging integration from Prelude to Infobip, covering channel and compliance differences, request-format changes, and a step-by-step cutover checklist.

Prelude is a Paris-based developer platform focused on phone and email verification (OTP), authentication, number intelligence and anti-fraud onboarding, delivered across SMS, RCS, WhatsApp, voice and other channels. Infobip is a global omnichannel communications platform covering SMS, WhatsApp, voice, email and more. On the messaging.dev Score, Prelude rates 62/100 and Infobip 96/100; this guide covers what actually changes in your integration when you move between them.

Channels, compliance and platform differences

You don’t lose any channels in this move. Both platforms support SMS, RCS, WhatsApp, Viber, Telegram, voice and email. Infobip additionally offers MMS, Facebook Messenger and Apple Messages for Business, none of which Prelude provides.

On compliance, both carry GDPR, ISO 27001 and SOC 2. Infobip adds HIPAA, which Prelude does not hold. For data residency, Prelude runs EU servers only, with no US region and no residency choice. Infobip offers both EU and US servers, lets you choose your residency region, and also operates in APAC, Latin America, the Middle East and Africa.

Both offer self-service onboarding. Infobip includes free developer/trial credit and a sandbox test environment; Prelude offers neither. Prelude exposes a REST API only, while Infobip adds SMPP and SMTP alongside REST. Their SDK sets overlap on Node.js, Python, Go, Java, PHP and C#, but Infobip has no Ruby SDK (Prelude does). On pricing, Prelude publishes at-cost pay-as-you-go rates (from €0.0043 per SMS in the US, verification from €0.032), whereas Infobip is primarily quote/contract-based with no publicly listed SMS price. Documentation is rated high on both sides; Prelude lists coverage in 230 countries versus Infobip’s 190. For a full breakdown, see Infobip vs Prelude.

How the request format differs

Prelude quickstart:

curl -X POST https://api.prelude.dev/v2/verification \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "target": {
      "type": "phone_number",
      "value": "+30123456789"
    }
  }'

Infobip quickstart:

curl -X POST 'https://xxxxxx.api.infobip.com/sms/2/text/advanced' \
  -H 'Authorization: App YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json' \
  -d '{"messages":[{"from":"InfoSMS","destinations":[{"to":"15551234567"}],"text":"Hello from Infobip"}]}'

Endpoint / base URL. Prelude posts to a single fixed host, https://api.prelude.dev/v2/verification. Infobip posts to an account-specific base URL, https://{base_url}.api.infobip.com/..., with SMS send at /sms/2/text/advanced — substitute the personal base_url shown in your dashboard.

Authentication. Prelude uses Authorization: Bearer YOUR_API_TOKEN; Infobip uses Authorization: App YOUR_API_KEY. Same header, different scheme keyword (Bearer becomes App).

Payload mapping. Prelude’s quickstart hits its verification endpoint, so the body is a single target object with type and value (the recipient); Prelude generates and sends the OTP itself, so there is no sender or free-text body. Infobip’s body is a messages array, where each message carries from (sender ID, e.g. InfoSMS), a destinations array of { "to": ... } recipients, and an explicit text. So target.value maps to destinations[].to, and you now supply the from and text fields yourself. Note the recipient format: Prelude’s example uses a leading + (+30123456789) while Infobip’s omits it (15551234567).

Migration checklist

  1. Create an Infobip account, generate an API key, and note your account-specific base URL (see how to start with Infobip).
  2. Map the request fields: move target.value into messages[].destinations[].to, and add the from and text fields Infobip requires.
  3. Re-point your sending code from api.prelude.dev/v2/verification to https://{base_url}.api.infobip.com/sms/2/text/advanced, and swap the auth header from Bearer to App.
  4. Re-test against Infobip’s sandbox (it has one) before sending live traffic.
  5. Update your delivery/webhook callbacks to consume Infobip’s delivery-report format.
  6. Run both providers in parallel and compare delivery.
  7. Cut over once delivery and reporting match, then decommission the Prelude path.

Watch out for

  • Pricing visibility. Infobip has no publicly listed SMS price and is mostly quote/contract-based, so budget for a sales conversation rather than the published at-cost rates you had on Prelude.
  • No Ruby SDK. If your integration relies on Prelude’s Ruby SDK, Infobip has none — you’ll call the REST API directly or switch languages.
  • Country coverage. Infobip lists 190 countries versus Prelude’s 230; confirm the markets you send to are covered.
  • Verification vs raw send. Prelude’s quickstart is an OTP/verification call that manages message content for you; Infobip’s text/advanced endpoint sends raw SMS, so any OTP generation, templating or retry logic Prelude handled now lives in your code.