Base URL
Requests
- JSON request bodies,
Content-Type: application/json. Media upload ismultipart/form-data. - Bearer authentication on every route. See Authentication.
- Timestamps you send and receive are ISO 8601. Prefer an explicit offset or
Z(for example2026-08-19T11:42:07+05:30). A naive local time with no zone is interpreted as UTC — see scheduling.
Identifiers
Objects are addressed by UUID, and the UUID is stable for the life of the object. Where Meta has its own identifier — awamid, a media id, a phone number id — LazyApp returns both, so you can correlate with Meta’s own tooling without storing two identities yourself.
Platform-level objects carry a readable prefix: customers are cus_..., setup links set_..., conversations cnv_....
Response headers
Every/v1 response carries:
Two more appear only when relevant:
Correlation
Messages carry therequest_id of the call that created them, so a delivery report weeks later still points back at the API request that started it.
Response shape
One object comes back on its own:data, with its cursor alongside:
data means “here is a page of things” — it never wraps a single
object, so one type in your client models every single-object response and one models
every list.
A DELETE that succeeded answers 204 with no body. There is nothing useful to say
about a thing that no longer exists.
Pagination
List endpoints use cursor pagination, except the two small platform lists, which are page-numbered. No endpoint returns an unbounded array.Errors
Failures return a JSON object with amessage, and validation failures add a per-field errors map. See Errors.
Compatibility
Insidev1 we only make additive changes: new fields on responses, new optional request fields, new endpoints, new enum values. Treat unknown fields as forward compatibility rather than errors, and do not assume an enum is closed.
Anything that would break a working integration goes in a new version, announced with Deprecation and Sunset headers on the affected routes first.