WA Gateway

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

FieldTypeMeaning
idnumberThe Device's id. You use it in URLs, such as /v1/devices/1/messages.
labelstringThe name you gave it.
phone_numberstring or nullThe linked number, digits only. null until the first link.
statusstringpending_qr, connected, disconnected or logged_out. See statuses.
daily_capnumber or nullThe Daily Send Cap. null means the default.
hourly_capnumber or nullThe Hourly Send Cap. null means the default.

Add a Device

POST /v1/devices
Body fieldRequiredMeaning
labelyesA 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.

ErrorWhy
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}/qr

Answer 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.

ErrorWhy
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/devices

Answer 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.

ErrorWhy
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 fieldMeaning
dailyCapThe most Messages in 24 hours. null uses the default. Leave it out to keep the current value.
hourlyCapThe 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 }
ErrorWhy
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}/reconnect

Starts the Device's connection again. For a logged_out Device, a new QR code then appears, to scan again. Answer 200: the Device object.

On this page