POST /v1/invoices/{id}/send — requires invoices:write. Takes no request body.
The recipient is always the invoice’s own stored customerEmail and cannot be
overridden. That is what stops the endpoint from being an open relay. Creating an
invoice never emails anyone; this call is the only thing that does.
200 OK
The three limits
Sending is capped at three independent levels. Any one of them can refuse a call.
These are server-configurable, so treat the numbers as current defaults rather than a
contract. The shapes — a small per-invoice allowance, a cooldown, and a store-level daily
budget — are the part to design against.
The
email object on an invoice reflects per-invoice state only. It cannot tell
you that the store’s daily budget or the platform ceiling is what will refuse the
next send, so canSend: true is a necessary condition, not a guarantee.The rate-limit envelope
This is the one endpoint whose error body differs from the rest of the API. Every failure the mailer produces carries three fields:codeis one ofnot_found,not_sendable,rate_limited,send_failed.retryAfterSecondsis always present, andnullwhen the block is not a cooldown you can wait out (an exhausted per-invoice allowance, for example).- When
retryAfterSecondsis set, the same value is mirrored in aRetry-Afterheader.
A request rejected before it reaches the mailer answers with the plain
{ "error": … } shape instead, with no code and no retryAfterSeconds: a
malformed {id} is 400 { "error": "Invalid request data" }, and a well-formed id
that does not decode is 404 { "error": "Invoice not found" }. Read code
defensively.Read the allowance instead of probing
Every invoice payload — from create, retrieve and list — carries anemail object, so
you never need a 429 to discover you are blocked.
Check
email.canSend before calling the send endpoint rather than treating a 429 as
your signal. It costs nothing — the field is on the invoice you already have.
A merchant can send the same email from the dashboard, against the same allowance.
See Invoices from the dashboard for what the
customer receives.