Base URL
https://api.flowella.io/v1/messages.
The API previously lived on the app host at
https://app.flowella.io/api/v1/.... Legacy requests to that path are permanently redirected (308) to the canonical https://api.flowella.io/v1/..., preserving the method and body — so existing integrations keep working. Update your base URL when you get a chance to skip the extra hop.Authentication
Every request needs an API key in theAuthorization header:
Creating a key
You need the Owner or Admin role to manage API keys.- Go to Settings → API keys in the Flowella app.
- Click Create key and give it a memorable name.
- Copy the key once — it is shown only at creation time.
Verifying a key
Hit the ping endpoint to confirm a key is valid:200 OK with { "ok": true, "organizationId": "…" } means you are authenticated.
Errors
All errors come back in a consistent envelope:
The
error.code field is stable and safe to switch on programmatically. The error.message is human-readable and may change.
Rate limits
API keys are rate-limited per organisation. If you exceed the limit you will get a429 with code RATE_LIMITED and the message Too many requests. When present, the Retry-After response header tells you how many seconds to wait. Back off and retry with exponential delay.
If you are running large bulk sends, prefer POST /v1/templates/send with the throttlePerHour parameter — Flowella enforces the throttle server-side, so you do not need to pace requests yourself.
Idempotency keys
Bulk template sends are asynchronous.POST /v1/templates/send validates the request, queues it durably, and returns 202 Accepted immediately:
Idempotency-Key header (up to 200 characters) that uniquely identifies each batch:
id instead of creating a new send. You can safely retry a request after a timeout or network error without messaging anyone twice.
If you omit the header, Flowella derives a key from the request body. An identical batch submitted twice in quick succession is therefore not double-sent. An explicit key is still safer, because any change to the body (even reordering recipients) produces a new derived key.
Pagination
List endpoints (/conversations, /contacts, /templates) use cursor pagination:
- Pass
limit(1–100, default 25) and an optionalcursor. - The response contains
itemsand, when there are more results, anextCursor. - Pass
nextCursorback as thecursorparameter to fetch the next page. - When
nextCursoris missing, you have reached the end.
Date and time
All timestamps are ISO 8601 strings in UTC (for example2025-01-15T14:30:00.000Z). Where the API accepts dates, both date-only (2025-01-15) and full ISO 8601 are coerced server-side.
Phone numbers
Pass phone numbers in E.164 form (+15551234567) where possible. Flowella will normalise common variations server-side, but E.164 is safest.
Channels
Many endpoints accept awhatsappChannelId. If your org has a single channel and you omit it, Flowella uses your default channel. If you have multiple channels, pass the ID explicitly to avoid sending from the wrong sender.
For the full URL pattern and channel switching, see Multi-channel.

