Skip to content

Send the launch announcement to every member

POST /program/launch-announcement
Scopeprogram:write
Customer session tokenNot accepted: call from your server with an API key
Rate limit classwrite (limits)
Idempotency keyRequired (idempotency)
MCP toolcharm_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.

FieldTypeDescription
confirm_sendbooleanRequired on the real call, after the merchant saw the audience and said yes. (optional)
dry_runbooleanPreview 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)

Returns LaunchAnnouncementSendResult.

FieldTypeDescription
dry_runboolean
queuedboolean
statusstring: idle, queued, running, done, failed
requested_atstring or null(nullable)
sent_atstring or null(nullable)
audienceinteger
sentinteger
welcomed_skippedinteger
{
"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
}
Terminal window
# 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}'

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.