Sends
A send is one message written for an audience — a group, one contact, or everyone linked to one subject — the same send a person writes on the compose screen. It takes two calls: a draft is only written down, and nothing goes until you publish it. Through the API a send is plain text, by SMS and by email: WhatsApp only carries wording Meta has approved outside its 24-hour reply window, so plain text never goes that way. Recording an event is the other way messages are made, by your rules.
POSTPublish a send
Requires sends:write. Sends it — the only call that does, and it spends the instance's budget. With no scheduled_at it goes now: a small send in this request, a large one queued, with eta_seconds saying about how long. With one, it goes then. Only a draft can be published, so a retried publish is a 409, never a second send.
200 with the send: done or sending when it went now, queued when a queue or a time holds it, or draft with last_error when Account would not cover it. When the package and the organisation's wallet are used up and it stops at zero, last_error is “the package and the wallet are used up, so nothing went out; top up the wallet in Account” — a top-up in Utilitay Account is what helps, then publish the same draft again. Any other last_error names what to change. 409 when it is not a draft, when it was written by a person or another key — a key publishes only its own drafts — or when its audience is a temporary list.
One send: the same fields in every pack. Press Response on the sample to see one whole.
On failure the body is { error, code } instead.