Skip to content

Authentication

Every /v1 request authenticates with an API key. Keys belong to your organization. A key can send from and read any WhatsApp number connected to that organization.

  1. Sign in to the Hello dashboard.
  2. Open Integrations and select Create API Key.
  3. Copy the key. It starts with hello_live_.

Treat the key like a password. Keep it on your server, never in a browser or mobile app, and delete it from Integrations if it leaks.

Put the key in the Authorization header as a Bearer token:

Authorization: Bearer hello_live_xxxxxxxxxxxxxxxx
Terminal window
curl "$HELLO_API_URL/v1/ping" \
-H "Authorization: Bearer $HELLO_API_KEY"

Requests go to your organization’s API base URL, shown on the Integrations page of the dashboard next to your API keys. Every example in these docs reads it from a shell variable:

Terminal window
export HELLO_API_URL="<API base URL from the dashboard>"
Status code Cause
401 UNAUTHORIZED No key was sent, or the key is wrong, deleted or disabled. The message is deliberately the same in every case.
403 TEST_MODE_KEY_UNSUPPORTED The key is a legacy test-mode key. Create a live key.
{
"message": "Invalid or disabled API key",
"code": "UNAUTHORIZED"
}

Sending a message needs a phone number ID: the numeric WhatsApp ID of the connected number to send from, used in the path of POST /v1/{phone_number_id}/messages. Managing templates needs the WABA ID: the WhatsApp Business Account the number belongs to, used in the path of GET /v1/{waba_id}/templates and the other template endpoints. An organization can connect several numbers, and several numbers can share one WABA.

Both IDs are shown on the Accounts page of the dashboard, next to each connected number. The media endpoints identify the number by the phone number itself (phone_number, digits with country code), not by either ID.