Skip to main content
POST
New instance
Auth: TokenAccountRate-limit: 20/minIdempotent: no

Description

Creates a new WhatsApp instance in your account. The instance is born disconnected, the next step is to call GET /api/instance/connect/:instance to obtain the QR code or pairing code. During creation, you can send, in the same body, the initial configuration of proxy, webhook, WebSocket, Chatwoot integration, Typebot integration, behavior settings, and S3 storage. Each block is independent: send only what you need.
The instance is created within your account quota. If you’ve reached the limit, you receive 403 with the message Account instance quota exceeded, delete an instance you no longer use to free up space.
Failures in sub-blocks (webhook / websocket / chatwoot) do not abort the instance creation. Each block is log-and-continue: the instance is created, the sub-block appears as enabled: false or absent in the response, and the server logs describe the cause. For Chatwoot, the failure is also exposed in chatwoot.status: "error" + chatwoot.error: "<message>" in the return payload.

Examples

Minimum

Creates the instance with just the name. The TokenInstance is generated automatically by the server and returned in instance.token in the response, keep it to authenticate subsequent calls.

With custom token

Manually sets the TokenInstance in the token field instead of letting the server generate one. Useful for reusing a value already registered in another system, the token must be unique within your account.

With custom settings

Creates the instance with the settings block already defined: auto-rejects calls with a default message, keeps presence online, disables history sync, and ignores stories. Equivalent to calling POST /api/instance/settings/:instance right after.

With proxy

Provisions the instance pointing to an authenticated SOCKS5 proxy. The password is encrypted at-rest with AES-256-GCM and is never returned in the response.

With webhook

In the same request, configures the default webhook to receive only the message.exchange and call.update events, with custom Authorization to validate the source. Media is not sent in base64, the destination fetches via the returned URL.

With WebSocket

Enables real-time broadcast via WebSocket filtering by the message.exchange and call.update events. Useful for dashboards and bots that need minimum latency without exposing a public webhook endpoint.

With S3

Points media storage to an AWS S3 bucket (us-east-1), with prefix media/ to organize uploads. The s3SecretKey is encrypted at-rest and never appears in the response.

With Chatwoot

Provisions the instance already linked to a Chatwoot inbox (WhatsApp - Orion), with active agent signature and automatic reopening of resolved conversations. If Chatwoot activation fails, the instance is created anyway and the chatwoot object returns with status: "error".

With Typebot

Provisions the instance already with a Typebot bot registered. This block configures a single bot; add more later via POST /api/typebot/set/:instance. If activation fails (bridge unavailable or invalid fields), the instance is created anyway and the typebot object returns with status: "error".

Complete

Combines every block in the same request: custom token, SOCKS5 proxy, webhook, WebSocket, Chatwoot integration, behavior settings, and S3 storage. Each block remains independent, failures in sub-blocks don’t abort the instance creation.

Success response

The response includes the generated TokenInstance and the summary of every configured integration (proxy, webhook, websocket, chatwoot, settings, s3). Save the instance.token, it’s what authenticates subsequent calls of the instance itself.
201 Created
The chatwootApiToken is not returned in this response (it is exposed in plaintext only by GET /api/chatwoot/list/:instance). The s3.secretKey and the proxy.password are never returned by any endpoint.

Chatwoot with error

If the chatwoot* block was sent but the configuration failed (e.g., invalid token), the instance is created anyway and the chatwoot object in the response comes with status: "error" and an actionable error:
You can fix the credentials via POST /api/chatwoot/set/:instance without recreating the instance.

Typebot with error

If the typebot* block was sent but the configuration failed (e.g., bridge not configured on the server, missing typebotUrl, or invalid typebotTriggerType), the instance is created anyway and the typebot object in the response comes with status: "error" and an actionable error:
You can configure the bot later via POST /api/typebot/set/:instance without recreating the instance.

Headers

string
required
Your TokenAccount.
string
required
application/json

Request body

string
required
Instance identifier (used in the :instance paths in every other endpoint). Cannot be blank and must be unique within your account. Kebab-case or snake_case is recommended.
string
Custom token for the instance. If omitted, it’s generated automatically (recommended).

Proxy block (optional)

boolean
Enables the use of a proxy specific to this instance.
string
Proxy IP or hostname.
string
Port as a string (e.g., "8080").
string
http, https, or socks5.
string
Proxy user (optional).
string
Proxy password (optional, encrypted at-rest with AES-256-GCM).

Webhook block (optional)

boolean
Enables sending events to a URL.
string
URL where RyzeAPI will POST the events.
string
Value RyzeAPI sends in the Authorization header of each POST (useful to validate origin). Ex.: Bearer secret-key-123.
boolean
If true, each event type can have its own URL (default: false).
string[]
List of events the instance should dispatch. Ex.: ["message.exchange", "call.update"].
boolean
Includes received media as base64 inside the webhook body.
The webhook block creates one webhook with label default. For multiple webhooks per instance, use POST /api/events/webhook afterwards.

WebSocket block (optional)

boolean
Enables event broadcasting via WebSocket for this instance.
string[]
List of events that will be emitted via WebSocket. If empty with websocketEnabled=true, all events are emitted.
boolean
Includes received media as base64 in the WebSocket frames.

Chatwoot block (optional)

boolean
Enables the Chatwoot integration.
string
URL of the Chatwoot installation (e.g., https://chatwoot.example.com). Required if chatwootEnabled=true.
integer
Numeric ID of the Chatwoot account. Required if chatwootEnabled=true.
string
Chatwoot account API token (the agent’s access_token). Required if chatwootEnabled=true. Encrypted at-rest. Not returned in this response, but exposed in plaintext by GET /api/chatwoot/list/:instance.
string
Name of the inbox that will be created in Chatwoot (e.g., "WhatsApp - Orion").
boolean
If true, messages sent through the API are prefixed with the Chatwoot agent signature.
boolean
If true, group messages do not become conversations in Chatwoot.
boolean
If true, new conversations start as pending instead of open.
boolean
If true, new messages on resolved conversations reopen them automatically.
The Chatwoot integration must be enabled on the server. If it isn’t available, the instance creation continues and chatwoot returns enabled: false (the failure shows up in the server logs). See the Chatwoot overview for details.

Typebot block (optional)

Configures a single Typebot bot together with instance creation. For multiple bots, use POST /api/typebot/set/:instance afterwards. See the Typebot overview for routing by trigger.
boolean
Enables the Typebot integration.
string
URL of the published Typebot (viewer). Required if typebotEnabled=true. Ex.: https://typebot.co/meu-bot-abc123.
string
How the bot is triggered: all (any message) or keyword. Required if typebotEnabled=true.
string
Trigger operator, required if typebotTriggerType is keyword. One of: contains, equals, startsWith, endsWith, regex.
string
Trigger word/expression, required if typebotTriggerType is keyword.
integer
default:"0"
Expires the session by inactivity after N minutes (0 = never).
string
Message sent to the user when the session expires.
string
Word that ends the bot immediately (e.g., "sair").
string
Farewell sent when the bot is ended by the typebotKeywordFinish.
integer
default:"0"
Delay of the “typing…” indicator before each reply, in milliseconds.
boolean
default:"false"
If true, pauses the bot in that conversation when the operator replies manually.
integer
default:"0"
Groups fragments sent by the customer for N seconds before processing.
boolean
default:"true"
If true, group messages do not trigger the bot. Absent equals true.
string
Bot label in the panel (e.g., "Bot de orçamento").
The Typebot integration needs the Ryze Bridge configured on the server. If it isn’t available, the instance creation continues and typebot returns status: "error" with the cause. Configure the bot later via POST /api/typebot/set/:instance.

Settings block (optional)

boolean
Automatically rejects incoming calls.
string
Automatic message sent to the caller when the call is rejected.
boolean
Does not process group messages (useful for 1-to-1 bots).
boolean
Keeps the instance marked as “online” in WhatsApp.
boolean
Automatically marks received messages as read.
boolean
default:"true"
Default true (history is not synced on the first connection). Send false if you want to receive the backlog.
boolean
Ignores “status” type messages (stories).

S3 block (optional, media storage)

boolean
Enables uploading received media to S3 or MinIO.
string
Region (e.g., us-east-1).
string
Bucket name.
string
Access Key ID.
string
Secret Access Key (encrypted at-rest, never returned).
string
Custom endpoint for MinIO or DigitalOcean Spaces. Omit for official AWS S3.
string
Path prefix (e.g., media/).

Errors

Error example:

Next

Connect to WhatsApp

Generate the QR code or pairing code to link the number.

Check state

Use GET /api/instance/list?instanceName=<name> to inspect the current status.