https://lazyapp.in
Building a product where your users connect their WhatsApp numbers? The send loop below is the same, but you’ll want one workspace per platform customer, scoped keys, and webhook routing — start at the platform guide after your first message.
Authentication
All API requests require an API key as a Bearer token. There is no official SDK yet — every example below is plain HTTP.Get your API key
- Sign up or log in
- Open Settings → API keys
- Click Create API key
- Copy the key immediately — you won’t be able to see it again
sk_test_ key while you build. Test keys never reach a real phone, and they are free: test mode is never plan-limited. A sk_live_ key needs the Pro plan and returns 402 plan_limit_reached without it. See Plans and limits.
Set up the client
sk_test_ or sk_live_ plus 40 characters. Keys are stored as SHA-256 hashes — they’re only shown once at creation.
Security tips: Use environment variables, create separate keys per app, grant the narrowest scopes, and rotate periodically. See Authentication.
Key concepts
- Workspace — Your team tenant. Your API key belongs to exactly one workspace; you never pass a workspace id.
- Mode —
liveortest, taken from the key prefix. Test never reaches a real phone. Data in the two modes never mixes. - Connection — A WhatsApp Business Account plus its phone numbers inside the workspace.
- Message — Anything you send or receive. Addressed by a stable
uuid. - Webhook — How LazyApp pushes delivery, reads, replies, and template status to you.
9f8b1c2d-4e5f-4a6b-8c7d-0e1f2a3b4c5d). Each step below returns what the next step needs.
Step 1: Confirm a connection
You need at least one WhatsApp connection on the workspace. Claim the free LazyApp sandbox number in test mode, or connect your own number in the console (that needs a plan). Then list what you have:phone_number_id or connection_uuid only when you have several. See Capabilities.
Step 2: Send your first message
201 means LazyApp accepted and sent it:
uuid — you need it for the next step.
A free-form text message only reaches someone inside the 24-hour customer-service
window — after they message you. Outside it, send an approved
template instead. LazyApp enforces this server-side, so a send
outside the window fails with a clear error rather than silently vanishing.
Step 3: Confirm it worked
Fetch the message back — itsstatus tells you where it is in the pipeline:
status moves through queued → sent → delivered → read (or played / failed). You’ll also see the message in the console. Prefer webhooks for production instead of polling.
That’s the whole loop — connection, send, confirmation. Everything else is variations on this.
One endpoint, every send mode
The samePOST /v1/messages call covers immediate sends, scheduling, and every message type:
Step 4: Receive status on a webhook
Register an endpoint so delivery and reads push to you:secret, shown once. Use it to verify every delivery before you trust the body. Leave subscribed_events out to receive everything.
Beyond messaging
Sending is the entry point. The same API key opens the rest of WhatsApp on LazyApp.Send a template outside the window
Send an OTP
Explore the rest
Messages
Text, media, interactive, reactions, and scheduling
Templates
Create, submit for Meta review, and sync status
Webhooks
Signed delivery for messages, templates, and more
Broadcasts
Template sends to a segment, with quiet hours
Verify
OTPs with fraud controls, managed or delivery-only
Platforms
One workspace per customer, setup links, scoped keys
What’s next?
Go live
Swap
sk_test_ for sk_live_. Nothing else changes.Idempotency
Make every write safe to retry
Errors
Status codes and which ones are worth retrying
API reference
Every endpoint, with a request playground