Send the launch announcement to every member
POST /program/launch-announcement| Scope | program:write |
| Customer session token | Not accepted: call from your server with an API key |
| Rate limit class | write (limits) |
| Idempotency key | Required (idempotency) |
| MCP tool | charm_send_launch_announcement |
Queues the launch announcement; it goes out within minutes, once per shop, and cannot be taken back. Members a welcome e-mail reached in the last 90 days are left out. Needs the program and customer e-mails on, and a shop that installed Charm at least 7 days ago (blocked_by: new_shop; Charm support can lift it). The real call is refused with 409 confirmation_required until it carries confirm_send: true: show the merchant the audience (offer a test first) and get a clear yes.
Request body
Section titled “Request body”| Field | Type | Description |
|---|---|---|
confirm_send | boolean | Required on the real call, after the merchant saw the audience and said yes. (optional) |
dry_run | boolean | Preview only: validate, resolve references and return the diff and summary, but write nothing. Costs no idempotency key and is limited as a read. Call with this first, show the merchant, then repeat without it. (optional) |
Response 200
Section titled “Response 200”Returns LaunchAnnouncementSendResult.
| Field | Type | Description |
|---|---|---|
dry_run | boolean | |
queued | boolean | |
status | string: idle, queued, running, done, failed | |
requested_at | string or null | (nullable) |
sent_at | string or null | (nullable) |
audience | integer | |
sent | integer | |
welcomed_skipped | integer |
{ "dry_run": false, "queued": false, "status": "idle", "requested_at": "2026-10-01T09:30:00.000Z", "sent_at": "2026-10-01T09:30:00.000Z", "audience": 1, "sent": 1, "welcomed_skipped": 1}Example
Section titled “Example”# 1. Dry run: writes nothing and needs no Idempotency-Key. Show the merchant the result.curl -X POST "https://charm.appfleece.app/api/v1/program/launch-announcement" \ -H "Authorization: Bearer chrm_live_..." \ -H "Content-Type: application/json" \ -d '{"dry_run":true}'
# 2. After the merchant says yes: the real call with the confirmation.curl -X POST "https://charm.appfleece.app/api/v1/program/launch-announcement" \ -H "Authorization: Bearer chrm_live_..." \ -H "Idempotency-Key: $(uuidgen)" \ -H "Content-Type: application/json" \ -d '{"confirm_send":true}'Errors
Section titled “Errors”unauthorized · invalid_token · insufficient_scope · access_required · validation_error · rate_limited · idempotency_conflict
Every error body carries code, message, request_id and a doc_url pointing at the matching entry in the error catalog.