Skip to content

Introduction

The v3 API: workspaces, connections, campaigns and the helpdesk.

The v3 API is what the Pingo dashboard itself runs on. Everything you can do in the product, you can do here.

Base URL

https://api.pingonotify.com
text

What changed from v2

v2 was a set of endpoints for one user's WhatsApp numbers. v3 is organized around a workspace — a shared tenant that owns connections, contacts, conversations and billing, and that several people can belong to with different roles.

That reorganization brings three things v2 does not have:

  • A shared inbox. Conversations, contacts, assignment, SLAs, bots, reports — the whole helpdesk.
  • Campaigns. One message to many recipients, paced and metered.
  • Teams. Members, roles, and per-inbox access.

The v2 messaging endpoints have direct v3 equivalents, with one consistent change: the recipient is never in the URL. In v2 you sent to /v2/connections/{id}/chats/{remoteJid}/messages; in v3 the number travels in the body as to, so a phone number never ends up in a log line or a proxy cache.

v2 is not deprecated and keeps working. You can use both — the same API token authenticates each of them.

Your first request

List the workspaces your token can reach:

curl https://api.pingonotify.com/v3/accounts \
  -H "apikey: sk_live_..."
bash
[
  {
    "id": "0195f3a0-1234-7890-abcd-ef0123456789",
    "name": "Acme",
    "isPersonal": false,
    "roles": ["OWNER"],
    "helpdeskEnabled": true
  }
]
json

Then send a message from one of your connections:

curl -X POST https://api.pingonotify.com/v3/connections/{connectionId}/chats/messages \
  -H "apikey: sk_live_..." \
  -H "Content-Type: application/json" \
  -d '{
    "to": "5511999998888",
    "text": "Hello from Pingo"
  }'
bash

How the pieces fit together

A connection is a WhatsApp number. It is either official (the Meta Cloud API, using your own Meta credentials) or unofficial (a real WhatsApp account paired by QR code or browser sync). Everything that sends or receives a message ultimately runs on a connection.

You can use a connection in three ways, and they stack:

  1. Directly. Send and read messages on the connection itself — the closest thing to v2, and the right choice for notifications and transactional messages.
  2. Through a campaign. One message, many recipients, paced so an unofficial number does not get flagged, and metered against your plan.
  3. Through the helpdesk. Bind the connection to an inbox, and incoming messages become conversations your team can assign, label, snooze and answer — with bots, SLAs and reports on top.

The helpdesk also has a fourth kind of inbox that is not a WhatsApp number at all: the API channel, a programmable inbox your own application pushes messages into and receives replies from over a webhook. It lets you put any channel you like — a web widget, an in-app chat, another messenger — behind the same shared inbox.

The one thing to know about WhatsApp

WhatsApp does not let a business message someone whenever it wants. On an official connection, once 24 hours have passed since the contact's last message, you can no longer send free text — you can only send a template that Meta has pre-approved.

The API is explicit about this. Sending free text into a closed window returns 422:

{
  "statusCode": 422,
  "message": "Outbound window expired — channel requires a pre-approved template",
  "error": "Unprocessable Entity"
}
json

Send an approved template instead, and the window reopens as soon as the contact replies. Manage your templates with GET /v3/connections/{id}/templates.

Unofficial connections have no such window.

Where to go next

© 2026 Pingo Notify. All rights reserved.

pingonotify.com ·Built with Nuxt and Scalar