Key types
The prefix is not decoration — it determines the workspace mode the key operates in. A test key cannot read live data and a live key cannot read test data, so the two never mix.
Keys and your plan
Test keys are free on every workspace, with or without a plan. Test mode runs on the shared test number and is never plan-limited, so you can build the whole integration before you pay anything. Live keys need the Pro plan. On any smaller plan, or no plan, a live key gets402 with code: plan_limit_reached. Connecting your own WhatsApp number needs a plan too. See Plans and limits.
Scopes
Each key carries scopes. A request for an endpoint outside them returns403.
Grant the narrowest set that works. A key used only for OTP delivery needs
messages:send and nothing else.
The scope each endpoint requires is listed on its reference page.
Restrictions
Beyond scopes, a key can be restricted to:- Specific phone numbers. A send from a number outside the list returns
403, even withmessages:send. Useful when one key serves one product line. - Specific IP addresses. Requests from anywhere else are rejected.
- A single platform customer. Keys minted through
POST /v1/platform/customers/{customer}/api-keyscan only see that customer’s workspace.
Acting for a platform customer
If you resell LazyApp, a platform key can call any/v1 endpoint on a customer’s behalf by passing their identifier:
X-LazyApp-Customer accepts the customer’s public_id, uuid or external_id. You can also pass ?customer= on the query string.
The key needs customers:act or customers:write. Use customers:act when the key only sends on customers’ behalf — it cannot rename, suspend or delete them. See Platforms.