Flowziac Docs

API Reference

Endpoints

Complete reference for the Flowziac Public Partner API (v1). For templates with URL buttons, Meta create rules, and full request examples, see the Partner API docs.

Try it

Test the API directly from your browser. You need valid API keys from your workspace.

Send a text, template, or interactive message to a WhatsApp number.

bash
curl -X POST "https://your-domain.com/api/v1/public/messages/send" \
  -H "Content-Type: application/json" \
  -H "apiKey: pk_your_key_id" \
  -H "apiSecret: your_secret" \
  -d '{
    "type": "text",
    "phone": "919876543210",
    "content": "Hello!"
  }'

Request body

typestring (text, template, interactive)Message type
phonestringRecipient phone number (digits with country code)
contactIdstringExisting contact ID (alternative to phone)
contentstringText content (for text messages) or interactive JSON string
templateNamestringTemplate name (for template messages)
templateLanguagestringTemplate language code (e.g. en, en_US) — must match Meta when using templateComponents
templateVariablesobjectSimple fill-in: body {{n}} → keys "1","2",…; copy-code → "copy_code". Dynamic URL buttons use the {{n}} in the stored URL (usually "1"). Body {{1}} and URL {{1}} share the same key.
templateComponentsarrayAdvanced Meta Cloud API components (body + button with sub_type url). Use when body {{1}} and URL button {{1}} need different values. URL parameter text is the suffix only, not the full URL.
bodyParametersobjectOptional main-body overrides ("1","2",…) applied after templateVariables
carouselobjectOptional carousel.cards[] for marketing carousel templates. Each card accepts header.link (public URL, auto-uploaded) or header.id (pre-uploaded WhatsApp media ID).
idempotencyKeystringOptional; also supported via Idempotency-Key header. Same key+body returns prior message (200).
revalidateFlowSessionbooleanOptional; close active flow session for contactId before send
phoneNumberIdstringInternal Flowziac phone.id (from /dashboard/phone-numbers/<id>/…). Required if multiple active WhatsApp numbers. Not Meta’s numeric phone number id.

Error Codes

CodeStatusMessage
UNAUTHORIZED401Invalid or revoked API credentials
PHONE_NUMBER_REQUIRED400phoneNumberId is required when the workspace has multiple active WhatsApp numbers
PHONE_NUMBER_NOT_FOUND400Requested WhatsApp line not found for this workspace
PHONE_NUMBER_INACTIVE400Assigned WhatsApp line is inactive
NO_PHONE_NUMBER400No active WhatsApp phone number connected
TEMPLATE_NOT_APPROVED400Template exists but is not approved by Meta
WHATSAPP_GRAPH_ERROR400Meta Graph API rejected the send (see details)
NOT_FOUND404Template, contact, or message id not found
IDEMPOTENCY_CONFLICT409Idempotency key reused with a different body
PLAN_LIMIT_EXCEEDED402Your plan limit has been reached
RATE_LIMIT_EXCEEDED429Too many requests — retry after the specified time
INTERNAL_ERROR500Internal server error — please try again later

Rate Limits

The public partner API uses two layers (on top of plan message limits):

100 / 15 minutes

Per client IP (outer shield)

300 / 15 minutes

Per API key (override via PUBLIC_API_KEY_RATE_LIMIT)

When rate-limited, the API returns 429 with RATE_LIMIT_EXCEEDED. Full field and delivery notes are in the Partner API docs.