Developers

FortWave developer documentation

FortWave lets your application send SMS and WhatsApp messages through one REST API. Use it for verification codes, order updates, reminders and campaigns, with the same API key, the same conventions and one dashboard to track everything.

Ready to send your first message?

Each quick start takes you from an API key to a delivered message in a few minutes.

Available APIs

Each API has its own reference with every endpoint, parameter, response and error, plus code samples in cURL, Node.js, Python, Go, PHP and Ruby.

Email · An email API is coming soon.

How it works

Every integration follows the same four steps. The first three are done once, in the dashboard.

  1. 1

    Create your account

    Sign up and create your company. For SMS, the company must be approved and verified before you can send.

  2. 2

    Set up a channel

    SMS: register a sender ID and wait for its approval. WhatsApp: connect your Meta business account and a sender, and get a template approved.

  3. 3

    Create an API key

    Generate a key under Settings → API keys. The same key works for every FortWave API. Keep it on your server.

  4. 4

    Send and track

    Call the API from your backend. Accepted messages are queued and delivered in the background; follow them through webhooks (SMS) or your message history.

SMS or WhatsApp?

Both channels reach your customers' phones, but they work differently. Many businesses use both: WhatsApp for rich messages, SMS to reach everyone.

AspectSMSWhatsApp
Message contentAny text up to 600 characters, or your own template with placeholders.Templates approved by Meta to start a conversation, and free-form text and files for 24 hours after the customer's last message.
MediaText only.Image, video or PDF template headers; images, videos, audio and documents in free-form replies.
SetupAn approved and verified company, and an approved sender ID (1 to 11 letters or digits).A connected Meta business account, a connected sender, and approved templates.
PricingPrepaid SMS credits. One credit covers 160 standard characters, or 70 with emoji or other Unicode characters.Paid per message from your WhatsApp wallet, by destination country and template category.
RecipientsPhones in the same country as your sender ID's carrier.WhatsApp users in supported countries, in international format.
TestingThe MiraiTest sender sends free test messages to your verified number.Send to your own number with a connected sender.
Delivery trackingSigned webhooks for sent and failed messages, plus the dashboard.WhatsApp message history in the dashboard.

Common to every API

Learn these once and they apply everywhere. Every request has the same shape:

Request shape
curl -X POST https://rest.api.fortwave.io/v1/... \
  -H "Authorization: Bearer $FORTWAVE_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -d '{ ... }'
Authentication
Send your API key as a Bearer token in the Authorization header. A missing or revoked key returns 401.
JSON in, JSON out
Request bodies are JSON (WhatsApp media uploads are multipart). Send Accept: application/json so errors come back as JSON too.
Asynchronous delivery
A 200 means the message was accepted, charged and queued, not yet delivered. Delivery happens in the background.
Errors you can act on
Validation errors return 422 with an errors object keyed by field, so you know exactly what to fix. Messages are localized; branch on status codes and field keys.
Rate limits
500 requests per minute per user on each API (120 for WhatsApp media uploads). Over the limit you get 429 and a Retry-After header.
Bulk is all or nothing
Bulk and batch requests take up to 500 messages. If any item is invalid, nothing is sent and nothing is charged.