wbiztool-com WhatsApp numbers API
Connect numbers and check which are connected.
Connect numbers and check which are connected.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/wbiztool-com:wbiztool-com-whatsapp-numbers-api"
curl "https://apis.io/api/v1/apis?limit=25"
Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: WbizTool WhatsApp numbers API
version: 1.0.0
summary: Send WhatsApp messages from your own number over a REST API.
description: 'The WbizTool REST API sends WhatsApp messages (text, images and files, to numbers and groups, now or scheduled) from your own WhatsApp number, linked to WbizTool the way WhatsApp Web is linked to a phone. It is not the official WhatsApp Business API. Most endpoints authenticate with `client_id` and `api_key` sent in the request body (JSON or form fields), never in a header; the number verification endpoints use an `Authorization: Bearer` header instead. Always read the JSON body and check its `status` field, because some errors come back with HTTP 200. Guides, examples in cURL, Python, Node.js and PHP, and every error message: https://wbiztool.com/docs/'
termsOfService: https://wbiztool.com/terms/
contact:
name: WbizTool support
email: info@wbiztool.com
url: https://wbiztool.com/contact-us/
servers:
- url: https://wbiztool.com/api/v1
description: Production
tags:
- name: WhatsApp Numbers
description: Connect numbers and check which are connected.
paths:
/whatsapp/connect/:
post:
operationId: connectWhatsapp
summary: Connect a WhatsApp number
description: 'Start linking a WhatsApp number (Advanced and Enterprise plans). The call only starts it: the QR code (`login_method=qr`, default) or an 8-character pairing code (`login_method=phone`) arrives at `webhook_url` (see the `whatsappConnect` webhook), followed by `connected` or `not_connected`. A request not picked up within 10 minutes expires. The JSON body is served with `Content-Type: text/html`; parse it as JSON whatever the header says.'
externalDocs:
description: Full documentation
url: https://wbiztool.com/docs/whatsapp-connect-api/
tags:
- WhatsApp Numbers
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/ConnectWhatsappRequest'
examples:
qr:
value:
client_id: 12345
api_key: YOUR_API_KEY
webhook_url: https://example.com/wbiztool/connect-events?token=LONG_RANDOM_SECRET
summary: QR code
phone:
value:
client_id: 12345
api_key: YOUR_API_KEY
login_method: phone
whatsapp_number: '919876543210'
webhook_url: https://example.com/wbiztool/connect-events?token=LONG_RANDOM_SECRET
summary: Phone (pairing) code
application/x-www-form-urlencoded:
schema:
$ref: '#/components/schemas/ConnectWhatsappRequest'
responses:
'200':
description: 'Connection request created (`status: 1`) or refused (`status: 0`): `Auth Error` (also for an invalid JSON body), `Higher Subscription Required`, `WhatsApp Account Limit Reached. Upgrade your account to get more whatsapp limit`, `Already Connected With Given Number`; a non-POST request returns `{}`.'
content:
application/json:
schema:
anyOf:
- $ref: '#/components/schemas/WhatsappConnectStarted'
- $ref: '#/components/schemas/ApiError'
examples:
created:
value:
message: Whatsapp Client Created
whatsapp_client_id: 678
login_method: qr
status: 1
summary: Created
plan:
value:
status: 0
message: Higher Subscription Required
summary: Higher Subscription Required
'400':
description: '`login_method must be ''qr'' or ''phone''`, the phone-number format error for `login_method=phone`, `Auth Error: invalid api key` or `Invalid WhatsApp client`.'
content:
application/json:
schema:
$ref: '#/components/schemas/ApiError'
examples:
badKey:
value:
status: 0
message: 'Auth Error: invalid api key'
summary: 'Auth Error: invalid api key'
badRow:
value:
status: 0
message: Invalid WhatsApp client
summary: Invalid WhatsApp client
'403':
description: '`client_id` is not a whole number.'
content:
application/json:
schema:
$ref: '#/components/schemas/ApiError'
examples:
invalidClientId:
value:
status: 0
message: Invalid Client Id
summary: Invalid Client Id
'500':
description: '`webhook_url` longer than 250 characters.'
security: []
/whatsapp-client/create/:
post:
operationId: connectWhatsappAlias
summary: Connect a WhatsApp number (alias)
description: 'Identical alias of `POST /whatsapp/connect/`: same code, same responses. Used by the Python client.'
externalDocs:
description: Full documentation
url: https://wbiztool.com/docs/whatsapp-connect-api/
tags:
- WhatsApp Numbers
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/ConnectWhatsappRequest'
examples:
qr:
value:
client_id: 12345
api_key: YOUR_API_KEY
webhook_url: https://example.com/wbiztool/connect-events?token=LONG_RANDOM_SECRET
summary: QR code
phone:
value:
client_id: 12345
api_key: YOUR_API_KEY
login_method: phone
whatsapp_number: '919876543210'
webhook_url: https://example.com/wbiztool/connect-events?token=LONG_RANDOM_SECRET
summary: Phone (pairing) code
application/x-www-form-urlencoded:
schema:
$ref: '#/components/schemas/ConnectWhatsappRequest'
responses:
'200':
description: 'Connection request created (`status: 1`) or refused (`status: 0`): `Auth Error` (also for an invalid JSON body), `Higher Subscription Required`, `WhatsApp Account Limit Reached. Upgrade your account to get more whatsapp limit`, `Already Connected With Given Number`; a non-POST request returns `{}`.'
content:
application/json:
schema:
anyOf:
- $ref: '#/components/schemas/WhatsappConnectStarted'
- $ref: '#/components/schemas/ApiError'
examples:
created:
value:
message: Whatsapp Client Created
whatsapp_client_id: 678
login_method: qr
status: 1
summary: Created
plan:
value:
status: 0
message: Higher Subscription Required
summary: Higher Subscription Required
'400':
description: '`login_method must be ''qr'' or ''phone''`, the phone-number format error for `login_method=phone`, `Auth Error: invalid api key` or `Invalid WhatsApp client`.'
content:
application/json:
schema:
$ref: '#/components/schemas/ApiError'
examples:
badKey:
value:
status: 0
message: 'Auth Error: invalid api key'
summary: 'Auth Error: invalid api key'
badRow:
value:
status: 0
message: Invalid WhatsApp client
summary: Invalid WhatsApp client
'403':
description: '`client_id` is not a whole number.'
content:
application/json:
schema:
$ref: '#/components/schemas/ApiError'
examples:
invalidClientId:
value:
status: 0
message: Invalid Client Id
summary: Invalid Client Id
'500':
description: '`webhook_url` longer than 250 characters.'
security: []
/whatsapp-client/list/:
post:
operationId: listConnectedNumbers
tags:
- WhatsApp Numbers
summary: List connected numbers
description: 'The WhatsApp numbers (and Telegram accounts) of the workspace that are connected right now, with the IDs to pass as `whatsapp_client`. A non-POST request returns `{}`; an unexpected server problem an HTML 500 page. The JSON body is served with `Content-Type: text/html`; parse it as JSON whatever the header says.'
externalDocs:
description: Full documentation
url: https://wbiztool.com/docs/whatsapp-client-list-api/
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/Credentials'
examples:
credentials:
value:
client_id: 12345
api_key: YOUR_API_KEY
application/x-www-form-urlencoded:
schema:
$ref: '#/components/schemas/Credentials'
responses:
'200':
description: 'Connected numbers (`status: 1`), or `{"message": "Auth Error", "status": 0}`.'
content:
application/json:
schema:
anyOf:
- $ref: '#/components/schemas/ConnectedNumbers'
- $ref: '#/components/schemas/ApiError'
examples:
list:
value:
message: okay
whatsapp_clients:
- id: 678
whatsapp_client_id: 678
whatsapp_client_number: '919876543210'
platform: whatsapp
is_connected: true
- id: 702
whatsapp_client_id: 702
whatsapp_client_number: '919812345670'
platform: telegram
is_connected: true
status: 1
'400':
description: Invalid API key.
content:
application/json:
schema:
$ref: '#/components/schemas/ApiError'
examples:
invalidKey:
value:
status: 0
message: 'Auth Error: invalid api key'
summary: 'Auth Error: invalid api key'
'403':
description: '`client_id` is not a whole number.'
content:
application/json:
schema:
$ref: '#/components/schemas/ApiError'
examples:
invalidClientId:
value:
status: 0
message: Invalid Client Id
summary: Invalid Client Id
'500':
description: HTML error page instead of JSON (see the operation description).
content:
text/html:
schema:
type: string
security: []
/whatsapp-client/status/:
post:
operationId: getConnectionStatus
tags:
- WhatsApp Numbers
summary: Get connection status
description: 'Whether one WhatsApp number is connected. `Disconnected` also has `status: 0`, like an error, so check `message`. The JSON body is served with `Content-Type: text/html`; parse it as JSON whatever the header says.'
externalDocs:
description: Full documentation
url: https://wbiztool.com/docs/whatsapp-client-status-api/
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/WhatsappClientRequest'
examples:
check:
value:
client_id: 12345
api_key: YOUR_API_KEY
whatsapp_client: 678
application/x-www-form-urlencoded:
schema:
$ref: '#/components/schemas/WhatsappClientRequest'
responses:
'200':
description: '`Connected` (`status: 1`), `Disconnected` (`status: 0`), or an error with `status: 0`: `Auth Error`, `Auth Error 2` (the ID is not in this workspace), `Demo Account can not access apis`.'
content:
application/json:
schema:
$ref: '#/components/schemas/SimpleResult'
examples:
connected:
value:
message: Connected
status: 1
summary: Connected
disconnected:
value:
message: Disconnected
status: 0
summary: Disconnected
'400':
description: Invalid API key.
content:
application/json:
schema:
$ref: '#/components/schemas/ApiError'
examples:
invalidKey:
value:
status: 0
message: 'Auth Error: invalid api key'
summary: 'Auth Error: invalid api key'
'403':
description: '`client_id` is not a whole number.'
content:
application/json:
schema:
$ref: '#/components/schemas/ApiError'
examples:
invalidClientId:
value:
status: 0
message: Invalid Client Id
summary: Invalid Client Id
security: []
/whatsapp/accounts/:
post:
operationId: listWhatsappAccounts
tags:
- WhatsApp Numbers
summary: List all WhatsApp numbers
description: Every WhatsApp number of the workspace that has not been deleted, connected or not, sorted by ID. A successful response has no `message` field.
externalDocs:
description: Full documentation
url: https://wbiztool.com/docs/whatsapp-accounts-api/
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/Credentials'
examples:
credentials:
value:
client_id: 12345
api_key: YOUR_API_KEY
application/x-www-form-urlencoded:
schema:
$ref: '#/components/schemas/Credentials'
responses:
'200':
description: The numbers.
content:
application/json:
schema:
$ref: '#/components/schemas/WhatsappAccounts'
examples:
accounts:
value:
whatsapp_clients:
- whatsapp_client_id: 678
whatsapp_number: '919876543210'
status: connected
- whatsapp_client_id: 702
whatsapp_number: '919812345678'
status: not_connected
status: 1
'400':
description: 'Refused: `Auth Error - Please send correct API key and Client id`, `Invalid client id.`, `Auth Error: invalid api key`, or `This API key is not linked to a workspace. Create a new API key in WbizTool.`'
content:
application/json:
schema:
$ref: '#/components/schemas/ApiError'
examples:
badKey:
value:
status: 0
message: 'Auth Error: invalid api key'
summary: 'Auth Error: invalid api key'
'405':
description: Not a POST request.
content:
application/json:
schema:
$ref: '#/components/schemas/ApiError'
examples:
method:
value:
status: 0
message: Method not allowed, use POST
summary: Method not allowed, use POST
'500':
description: Unexpected server error.
content:
application/json:
schema:
$ref: '#/components/schemas/ApiError'
examples:
internal:
value:
status: 0
message: Internal error, please try again
summary: Internal error, please try again
security: []
webhooks:
whatsappConnect:
post:
operationId: whatsappConnectWebhook
tags:
- WhatsApp Numbers
summary: WhatsApp connect event
description: 'Sent to the `webhook_url` of Connect a WhatsApp number at each step: `qr_generated` (repeated every several seconds while waiting for a scan), `pairing_code` (once), then `connected` or `not_connected`. Not signed: put a secret in the URL and confirm with Connection status. Not retried; WbizTool waits up to 10 seconds.'
externalDocs:
description: Full documentation
url: https://wbiztool.com/docs/whatsapp-connect-api/#webhook-events
requestBody:
required: true
content:
application/x-www-form-urlencoded:
schema:
type: object
required:
- status
- whatsapp_client_id
properties:
status:
type: string
enum:
- qr_generated
- pairing_code
- connected
- not_connected
whatsapp_client_id:
type: integer
qr_image:
type: string
description: 'Only with `qr_generated`: a `data:image/png;base64,…` URL.'
pairing_code:
type: string
description: 'Only with `pairing_code`: the 8-character code.'
whatsapp_number:
type: string
description: 'Only with `connected`: the linked number with its country code.'
examples:
connected:
value:
status: connected
whatsapp_client_id: 678
whatsapp_number: '919876543210'
pairing:
value:
status: pairing_code
whatsapp_client_id: 678
pairing_code: K5EWPGY5
responses:
'200':
description: Any HTTP status is accepted.
security: []
components:
schemas:
WhatsappConnectStarted:
type: object
required:
- status
- message
- whatsapp_client_id
- login_method
properties:
status:
type: integer
enum:
- 1
message:
type: string
enum:
- Whatsapp Client Created
whatsapp_client_id:
type: integer
login_method:
type: string
enum:
- qr
- phone
ConnectedNumbers:
type: object
required:
- status
- message
- whatsapp_clients
properties:
status:
type: integer
enum:
- 1
message:
type: string
enum:
- okay
whatsapp_clients:
type: array
items:
type: object
properties:
id:
type: integer
description: Same as `whatsapp_client_id`.
whatsapp_client_id:
type: integer
whatsapp_client_number:
type: string
platform:
type: string
enum:
- whatsapp
- telegram
is_connected:
type: boolean
description: Always `true`.
SimpleResult:
type: object
required:
- status
- message
properties:
status:
type: integer
enum:
- 0
- 1
description: '`1` success, `0` failure.'
message:
type: string
ApiError:
type: object
description: A failed request. `status` is `0` and `message` says why. (`Account Disabled` has no `status` field.)
required:
- message
properties:
status:
type: integer
enum:
- 0
message:
type: string
Credentials:
type: object
description: Your API credentials, sent in the request body (JSON or form fields) of every request that uses them. Both come from Settings → API keys in the dashboard. The API key decides which workspace the request acts on.
required:
- client_id
- api_key
properties:
client_id:
type: integer
description: Your API Client ID from Settings → API keys.
examples:
- 12345
api_key:
type: string
description: One of your API keys from the same page. Keep it secret.
examples:
- YOUR_API_KEY
WhatsappClientRequest:
allOf:
- $ref: '#/components/schemas/Credentials'
- type: object
required:
- whatsapp_client
properties:
whatsapp_client:
$ref: '#/components/schemas/WhatsappClientId'
description: ID of the number to check.
WhatsappClientId:
type: integer
description: ID of the WhatsApp number (or Telegram account) to send from, shown as "ID …" on the number's card on WhatsApp numbers in the dashboard.
examples:
- 678
ConnectWhatsappRequest:
allOf:
- $ref: '#/components/schemas/Credentials'
- type: object
properties:
webhook_url:
type: string
format: uri
maxLength: 250
description: Receives the QR code or phone code and the result (see the `whatsappConnect` webhook). Without it you cannot get the QR code through the API.
login_method:
type: string
enum:
- qr
- phone
default: qr
description: '`qr` sends a QR code to the webhook; `phone` an 8-character pairing code.'
whatsapp_number:
type: string
description: 'Required with `login_method=phone`: full international number, country code first, no leading `0`. Ignored for `qr`.'
examples:
- '919876543210'
whatsapp_client_id:
type: integer
description: Reconnect this existing, disconnected number (keeps its ID). Leave out to add a new number.
WhatsappAccounts:
type: object
required:
- status
- whatsapp_clients
properties:
status:
type: integer
enum:
- 1
whatsapp_clients:
type: array
items:
type: object
properties:
whatsapp_client_id:
type: integer
whatsapp_number:
type: string
status:
type: string
enum:
- connected
- not_connected
securitySchemes:
bearerAuth:
type: http
scheme: bearer
description: 'Number verification endpoints only: `Authorization: Bearer YOUR_API_KEY` (a key from Settings → API keys). Other endpoints take `client_id` and `api_key` in the body (see the `Credentials` schema).'
apiKeyQuery:
type: apiKey
in: query
name: api_key
description: Alternative for the GET number verification endpoints; the header keeps the key out of logs.
externalDocs:
description: WbizTool API documentation
url: https://wbiztool.com/docs/