Send Brand Report
POST/api/v2/brand-reports/:run/send
Sends the report to the given recipients from your outbound email identity, with the chosen attachments and share link, and records the delivery (per-recipient status and email log). While the email goes out the report is sending (claimed by this send — edits, approval, skip and regenerate are refused until it finishes). If some recipients fail the report becomes sent_partial; if none succeed, 422 is returned and the report returns to the status it had before the send.
reports:writeGrant this scope to your token under Settings → Developer → Personal Access Tokens.
Authentication: Requires Bearer token (scope: reports, permission: brand_reports.send).
Body:
- to[] (required, 1–50) — {email (required), name}
- cc[] (max 20 emails)
- subject (required, max 255) and body (required, HTML, max 100000) — merge fields such as {{brand_name}}, {{period_label}}, {{contact_first_name}}, {{summary_paragraph}}, {{share_url}} are filled per recipient
- attachments.xlsx / attachments.pdf / attachments.link (boolean)
- send_at (datetime, optional) — schedule the send instead of sending now (the report is approved and the message stored)
- from_mode — merchant (your own sending domain) | system
- summary (string, optional, max 10000) — the summary paragraph as edited in the send dialog; saved on the report before the attachments are built so the PDF, XLSX and share page carry the same words as the email (send only; omit to keep the stored summary)
Permissions: brand_reports.send. Sending a report that is still in_review approves it, and a summary that differs from the stored one rewrites it — both also require brand_reports.manage (403 otherwise). A send-only user delivers already-approved content as it stands (omit summary or send it unchanged).
Failures: a scheduled send that delivers nothing (attachment rendering failed, or no recipient accepted the email) is retried 15 minutes later, up to 3 attempts, then waits for a person to resend.
Request
Responses
- 200
- 401
- 403
- 404
- 422
- 429
OK
Response Headers
Unauthenticated — the bearer token is missing, revoked, expired, or malformed. Never retry automatically; fix the credential. See the Errors guide.
Forbidden — the token lacks a required scope, the endpoint is not available to API tokens, or the user behind the token lacks the permission. A human must adjust the token scopes or user permissions; do not retry.
Not found — no record with the given identifier (or the route does not exist). Verify the ID before retrying.
Unprocessable Entity
Response Headers
Rate limited — platform limit is 1,000 requests/min; individual tokens may carry lower limits. Honor the Retry-After header before retrying. See the Rate Limits guide.