Create named live and test Avox API keys for one WhatsApp number, confirm sensitive changes with an emailed code, rotate keys without losing their limits, revoke them, and read every request on the API logs page.
An Avox API key lets your own server send WhatsApp messages from one of your connected numbers through the Avox API. Your server holds only the Avox key - Meta's access token for the number stays with Avox.
POST https://api.avox.com/api/messages/send
Authorization: Bearer avx_live_...
You manage keys in two places:
Every request made with your keys, and every message forwarded to your endpoint, is on the API logs page.
An Admin gives a Manager See API keys or Manage API keys on the Members page. Without Manage API keys, the connection's page reads "Only people who can manage API keys in this Switchboard can create, rotate or revoke them."
Creating, rotating and revoking a key each need a 6-digit code that Avox emails to you - the person doing it - at your sign-in address. It's the same code box used for two-factor sign-in.
Deleting a Switchboard uses the same kind of code - see Settings.
avx_live_ and send real messages. Test keys start with
avx_test_ and never send anything - see Live and test keys.A key is send-only. It works on one endpoint, POST https://api.avox.com/api/messages/send, and
only sends from the number it was made for. It can't read anything back from Avox: not your contacts,
conversations, messages, templates, tags, notes, other numbers, other Switchboards, billing or account
settings. Everything else in Avox needs a dashboard sign-in, which a key can't make.
What a request contains - only what your server chooses to send:
to - the recipient's full international number.type and the message itself: text, a template name with its language and values, a media link or
id with an optional caption, a location, contact cards, reply buttons or a list, or a reaction. See
Message types.context.message_id (to quote a message), biz_opaque_callback_data (your own
reference) and an Idempotency-Key header.What the response returns:
That's all a key ever gets back. Delivery statuses (sent, delivered, read, failed) are on Logs. Messages your customers send reach your own server through Message forwarding, which an Admin turns on for each number - see What gets forwarded - or through an automation's Send to webhook step, if you add one.
API access depends on your plan: each plan either includes it or doesn't. The plan cards on Plans and on Billing > Change plan list API access on the plans that include it.
On a plan without API access:
api_not_in_plan (HTTP
403), and Test on a key says so too.A paused plan has no API access either: the notice reads "Your plan is paused", keys can't send
(requests return subscription_inactive), and they work again
once you resume your plan on Billing. With no active plan at all, the notice asks you to
pick a plan with API access.
Every key has its own identity, shown wherever keys appear - the connection's page, Settings > API Keys, the API logs and Avox support's tools:
+91 98••••3210).Name a key after the system that uses it ("Website orders live key", "CRM sync test key") so the logs and any security warning point straight at the right server.
When you create a key you choose Live key or Test key:
Use a test key while you build and in your automated tests, and a live key in production. Special test numbers let you trigger each kind of error on purpose - see Testing.
Open Settings > API Keys
Open Settings, choose the API Keys tab, and click Create a key.
Pick the Switchboard and the WhatsApp number
Switchboard starts on the one you're in; the list only has Switchboards where you can manage keys. If the Switchboard has more than one number, open WhatsApp number and pick one - each shows its name, the number partly hidden, and whether it's Connected or Paused. Avox never picks a number for you; without one you see "Choose which WhatsApp number this key sends from." (AVX-3245).
Choose Live key or Test key
The card under each choice says what it does.
Name the key
Key name is filled in for you (for example "Sales line live key") - change it to something you'll recognise. Optionally add What it's for. See Key names and identity.
Click Email me a code
Avox emails a 6-digit code to your sign-in address. Type it in the boxes - the key is created as soon as the last digit is in. See Confirmation codes.
Copy the key
The Your new API key dialog shows the full key: "Copy it now - Avox only ever stores its hash, so this is the only time it's shown." A test key adds "This is a test key: requests made with it never send a real message." Click the copy button ("Copied"), store the key in your server's secret storage, then click Done.
With no connected numbers, the card reads "Connect a WhatsApp number first - a key always sends from one number." The How this works button opens this page, and API logs opens the API logs. A key you create in another Switchboard shows up in that Switchboard's list.
On Connections, click Settings on the number, scroll to Outbound API keys and click Create a key for this number. It's the same form with the Switchboard and number already set: choose Live or Test, name the key, click Email me a code, and type the code. With no keys yet the section reads "No key yet - create one when your server is ready to send through Avox."
Each key in the list shows its name, first characters, a Live or Test badge, the number, what it's for, who created it and when, when it was last used, any limits, Rotate, and a bin button to revoke it. Under the list, API logs opens this number's requests and Settings > API keys opens every key.

Each key shows:
With no keys, the card reads "No active keys yet."
Revoked keys, and old keys whose rotation grace period has ended, move to their own Revoked and expired keys card, crossed out with a Revoked, Rotated or Expired badge, so you keep a record of every key that existed. A key the Avox team revoked also shows "Revoked by the Avox team" with their reason.
Rotating swaps a key for a new one without downtime. Nothing is reset: the new key gets the old key's name, number, mode (live or test), description and the limits it has at that moment - allowed IPs, the per-minute limit and the daily allowance. The counts carry on too: requests made with the old key today still count toward the new key's daily allowance, and both keys share the per-minute limit while both work. So rotating is never a way around a limit.
Click Rotate on the key
In Settings > API Keys or on the connection's page. The Rotate ...? dialog shows the key, its number and its limits, and explains that you'll get a new key with the same name, number, description and limits, and that both keys work until the old one stops.
Choose when the old key stops working
Under "When should the old key stop working?", pick Immediately, In 1 hour, In 24 hours (the default) or In 7 days. Choosing Immediately warns "Anything still using the old key gets "key expired" errors straight away."
Click Email me a code to rotate, and type the code
The key is rotated as soon as the last digit is in. See Confirmation codes.
Copy the new key
The Your rotated API key dialog shows the new key once, and says how long the old one keeps working - for example "The old key keeps working for 24 hours, then stops."
Put the new key on your server
Deploy it everywhere the old key was used. On the old key, "Expires in ..." counts down.
When the grace period ends, requests with the old key return key_expired
(API errors) and it moves to Revoked and expired keys with a
Rotated badge. Check the API logs filtered to the old key: once nothing uses it,
you're done. Choose Immediately only when the old key may have leaked - anything still using it
fails at once.
A key can be rotated once; to rotate again, rotate its replacement. Both changes are written to your Switchboard's activity log, and every Admin gets the "API key created" email for the new key. If rotating fails, you see "Couldn't rotate that API key. Your current key still works - try again." (AVX-3105).
Test is a safe dry run. It checks that the key is active, that its connection is connected, and that the connection is ready to send - without sending a WhatsApp message or using any Meta credit. Admins, and Managers with Manage API keys, can run it from Settings > API Keys.
Each test is recorded with the source Test and the endpoint "Dashboard test", kept apart from real sends. To test your own code end to end, use a test key.
Click the arrow on a key to open Recent requests - the key's latest 20 requests, newest first, with a See all in API logs link that opens the logs filtered to that key. Each row shows:
200 or 409.With no requests, it reads "No requests logged yet - this key hasn't been used." If the list doesn't load, you see "Couldn't load recent activity for that key." (AVX-3056).
API logs is in the sidebar under Connection (and in search) once the Switchboard has at least one API key - live, test, revoked or expired. Before that it's hidden, and opening the page directly shows "No API keys in this Switchboard yet" with a Create an API key button. It's also linked from Settings > API Keys (the API logs button), from each key's See all in API logs, and from each connection's Outbound API keys section. The header reads "Every request made with your API keys, and every message forwarded to your endpoint.", with API keys and Docs buttons.
req_..., from the X-Request-Id header) or a message id
(wamid...) on Sent, or a message id or event id (evt_...) on Received, then click Search.
Search matches whole ids only - never message text or phone numbers.The table shows 25 rows a page, with "Page 1 of 4 · 80 requests" (or "messages" on Received) and Previous / Next when there are more.
Click any row (or select it and press Enter) to open its details in a sidebar beside the table on a wide screen, or under the table on a narrower one. The table stays usable while it's open: the selected row is highlighted, ↑ and ↓ move to the previous or next row, and Esc (or the close button, or clicking the row again) closes the details. Each section of the details can be collapsed on its own.
On a forwarded message, an Admin sees Resend to your endpoint at the bottom of the details ("Already on its way" while it's queued or sending). Resending needs forwarding to be on, keeps the same event id, and shows "Queued - it goes out to your endpoint in a few seconds."
Export CSV downloads every row that matches the current tab, filters and search - newest first, up
to 10,000 rows - as avox-api-logs-sent-<date>.csv or avox-api-logs-received-<date>.csv. Times are
in UTC. The file opens safely in Excel or Google Sheets. The button is turned off when nothing
matches.
The logs never contain message content, forwarded payloads or full phone numbers - recipients are masked when the request is recorded. Admins and Managers can read them. If the page doesn't load, you see "Couldn't load your API logs. Try again." with a Try again button (AVX-3106); if an export fails, "Couldn't export your API logs. Try again." (AVX-3107).
For the events Meta sends Avox about your number (messages, statuses, template updates, calls), see Logs.
Avox watches how each live key is used. When something looks unusual, the key gets an amber border, a warning appears under it in Settings > API Keys, and the Active keys card reads, for example, "1 key needs your attention - see the warning below."
When the key may be in the wrong hands, the warning reads "If you don't recognise this, rotate or revoke this key - a revoked key stops working immediately." Revoking clears the key's warnings.
Every Admin also gets an email when a key is used from a new IP address or a request is blocked. See Emails about API keys.
On request, Avox support can set extra rules on a key:
ip_not_allowed (API errors).rate_limited with a Retry-After header
(API errors).quota_exceeded until midnight UTC
(API errors).These rules belong to the key and are shown with it. Rotating a key keeps them on the new key, and the per-minute and daily counts carry on across the rotation, so a new key never starts with a fresh allowance. A rule change also applies to an old key that's still in its grace period. To set or change any of them, contact Support with the key's name and first characters. See also Rate limits.
Click the bin next to the key - on the connection's page or in Settings > API Keys. The Revoke
...? dialog shows the key and its number; click Email me a code to revoke and type the code
(Confirmation codes), or Keep it to back out. Once the code is in, the key
stops working immediately: requests with it return key_revoked
(API errors). It moves to Revoked and expired keys, and every Admin gets
an email.
Revoke a key when:
The Avox team can also revoke a key that's being misused. When they do, every Admin gets an email with the reason, and the key shows "Revoked by the Avox team" with the reason in Revoked and expired keys.
If revoking fails, you see "Couldn't revoke that API key. Try again." (AVX-3054).
When API access is turned off for your account (whatever your plan), Settings > API Keys reads "API keys have been turned off for your account, so new keys can't be created and existing ones won't send. Contact support if you need them." and the connection's page reads "API keys have been turned off for your account - contact support if you need them." Contact Support to turn them back on.
Every email links to Settings > API Keys. See Emails.
curl -X POST https://api.avox.com/api/messages/send \
-H "Authorization: Bearer $AVOX_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "to": "15551234567", "type": "text", "text": { "body": "Hello from Avox!" } }'
With a test key the same request answers "test": true and sends nothing. See Avox API
for the full reference, Authentication for sending the key, and
Message types for every message type.
Some errors show a more specific line from Avox instead, for example "That key was already rotated. Rotate its replacement instead." or "That key is revoked - create a new key instead."
Last updated