Skip to main content
Every request carries a LazyApp API key as a Bearer token:
HTTPS only. There is no cookie, session or signed-request alternative for the REST API. Console sign-in (password, Google, passkeys, two-step verification) is covered under Security. This page is only about API keys.

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 gets 402 with code: plan_limit_reached. Connecting your own WhatsApp number needs a plan too. See Plans and limits.
A key is displayed once, when you create it. LazyApp stores only a hash, so a lost key cannot be recovered — create a new one and revoke the old.

Scopes

Each key carries scopes. A request for an endpoint outside them returns 403. 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 with messages: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-keys can 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.

Failed attempts

Requests with a missing or invalid key never reach the per-key rate limiter — they are throttled per IP instead. Brute-forcing a key gets you rate limited quickly.

What a failure looks like

See Errors for the full list.