startChat / continueChat) and the replies flow back to WhatsApp, including text, media, and native buttons/lists.
Response shape, every endpoint returns the envelope
{ "success": true, "message": "...", <content>, "meta": {...}? } (there is no data wrapper). Errors return { "success": false, "error": { "message": "...", "code": "..."? } }.How it works
- You register a bot with
POST /api/typebot/set/:instance(or inline, when creating the instance). - On every message received on WhatsApp, RyzeAPI picks the bot by its trigger and sends the text to the Typebot flow.
- The flow’s replies flow back to RyzeAPI and are delivered on WhatsApp.
- The session is persisted: restarting the service does not lose the ongoing conversation.
A single instance can have several bots at once, routed by trigger. An
all bot works as a catch-all (any message starts it); keyword bots only fire when the message matches the configured operator/value.Buttons and Pix via text markup
Natively, Typebot only offers the reply button (the choice node). To send the other WhatsApp buttons (link, call, copy) and a Pix message, write a small markup inside a regular text bubble in your flow. RyzeAPI recognizes the markup, strips it from the text, and sends the matching interactive message; whatever text remains in the bubble becomes the message body.
Reply buttons with a supporting text:
WhatsApp allows at most 3 buttons (reply/link/call/copy) per message. If you write more than 3, they are sent in groups of 3. Pix is its own message type, so it always goes out separately from the other buttons. The label after
| in [pix:...] does not change the payment button (WhatsApp uses its native label); the text shown above the Pix button is the rest of the bubble.Management endpoints
Create bot
POST /api/typebot/set/:instance, creates a new bot (create-only).Edit bot
PATCH /api/typebot/update/:instance, partial update of an existing bot (by botId).List bots
GET /api/typebot/list/:instance?botId=, the instance’s bots (or one) with live enrichment + integration status.Remove bot(s)
DELETE /api/typebot/delete/:instance?botId=, removes one bot, or all when botId is omitted.Start flow
POST /api/typebot/start/:instance, triggers a flow manually for a number.Live sessions
GET/POST /api/typebot/sessions/:instance, list ongoing conversations or pause/resume/close one.The list endpoint enriches each bot with
active_sessions (count of opened + paused sessions) and last_activity_at (RFC3339, absent when the bot never ran).Routing by trigger
Each incoming message is evaluated against the enabled bots, in the following priority order (a specific keyword beats the catch-all):all bot; keyword bots are unique per combination of (operator, value).
Inline activation when creating the instance
A bot can be configured together with instance creation, without a separateset call. Just send the typebot* block in the body of POST /api/instance/new:
typebot object comes back with status: "error" and error: "<message>". You can then call POST /api/typebot/set/:instance to configure the bot without recreating the instance.
Data model
The server persists the data in two tables:
You can also keep the bot from auto-starting when the operator started the conversation (
noStartFromMe), and keep the conversation open when the flow ends (keepOpen, status held).
Whenever a bot is created, edited, or removed, RyzeAPI recomputes the full list of the instance’s bots and (re)activates the integration. When the last bot is removed, the integration is deactivated and the local link is deleted.
Next steps
Create a bot
Configure the first bot with
POST /api/typebot/set/:instance.Typebot errors
Mapping table of the integration’s HTTP status codes and messages.