Devices
Add, list and link your WhatsApp numbers, and set their Send Caps.
A Device is one WhatsApp number. Most people add and link Devices in the Dashboard (see Devices). The API lets your software do the same.
Unlinking and deleting a Device are done in the Dashboard only.
The Device object
| Field | Type | Meaning |
|---|---|---|
id | number | The Device's id. You use it in URLs, such as /v1/devices/1/messages. |
label | string | The name you gave it. |
phone_number | string or null | The linked number, digits only. null until the first link. |
status | string | pending_qr, connected, disconnected or logged_out. See statuses. |
daily_cap | number or null | The Daily Send Cap. null means the default. |
hourly_cap | number or null | The Hourly Send Cap. null means the default. |
Add a Device
POST /v1/devices| Body field | Required | Meaning |
|---|---|---|
label | yes | A name for the Device. |
curl -X POST https://api.wa.goupdev.net/v1/devices \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"label": "Sales"}'Answer 201:
{
"id": 7,
"tenant_id": 3,
"label": "Sales",
"phone_number": null,
"status": "pending_qr",
"daily_cap": null,
"hourly_cap": null,
"created_at": "2026-10-08T09:30:00.000Z"
}Next, get the QR code (below) and scan it.
| Error | Why |
|---|---|
400 {"error": "label is required"} | label is missing or empty. |
402 {"error": "Device Quota reached"} | Your Plan allows no more Devices. |
Get the QR code
GET /v1/devices/{id}/qrAnswer 200, with the QR code as a PNG image you can put straight into an <img src="...">:
{ "qr": "data:image/png;base64,iVBORw0KGgo..." }The code changes every few seconds, and each one expires after 30 seconds. Ask again every few seconds and show the newest one until the Device is connected.
| Error | Why |
|---|---|
404 {"error": "No QR available. Device may already be connected."} | No code right now: the Device is connected, or the next code isn't ready yet. Check the Device's status. |
404 {"error": "Device not found"} | No Device with this id in your Tenant. |
List Devices
GET /v1/devicesAnswer 200: an array of Device objects, oldest first. Each also has last_connected_at: when it last connected, or null.
[
{
"id": 7,
"label": "Sales",
"phone_number": "9665XXXXXXXX",
"status": "connected",
"daily_cap": null,
"hourly_cap": null,
"last_connected_at": "2026-10-08T09:31:12.000Z"
}
]Get one Device
GET /v1/devices/{id}Answer 200: the Device object, with tenant_id. Use it to check status before sending.
| Error | Why |
|---|---|
400 {"error": "invalid id"} | The id isn't a positive whole number. |
404 {"error": "Device not found"} | No Device with this id in your Tenant. |
Set Send Caps
PATCH /v1/devices/{id}| Body field | Meaning |
|---|---|
dailyCap | The most Messages in 24 hours. null uses the default. Leave it out to keep the current value. |
hourlyCap | The most Messages in one hour. null uses the default. Leave it out to keep the current value. |
curl -X PATCH https://api.wa.goupdev.net/v1/devices/7 \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"dailyCap": 300, "hourlyCap": 40}'Answer 200:
{ "id": 7, "daily_cap": 300, "hourly_cap": 40 }| Error | Why |
|---|---|
400 {"error": "Cap exceeds admin ceiling"} | A cap is above the allowed maximum. |
404 {"error": "Device not found"} | No Device with this id in your Tenant. |
Reconnect
POST /v1/devices/{id}/reconnectStarts the Device's connection again. For a logged_out Device, a new QR code then appears, to scan again. Answer 200: the Device object.