Send a campaign test email
Delivers the campaign's current content to one address (subject prefixed with [Test]). Leaves the campaign, its audience, and its status untouched.
Delivers the campaign's current content to one address (subject prefixed with [Test]). Leaves the campaign, its audience, and its status untouched.
Authorization
bearerAuth campaigns:updateA gallery API key, sent as Authorization: Bearer gpk_… (or the x-api-key header).
In: header
Scope: campaigns:update
Path Parameters
The campaign id.
Query Parameters
Preview this operation without committing it. When true, the request is authenticated, scoped, and validated, but no side effect runs — no write, no idempotency claim, no audit event, no outbound delivery. The response is HTTP 200 with an X-Dry-Run: true header and a body of { "dry_run": true }, plus an effect object describing what the real call would change when this operation can resolve one.
Header Parameters
Optional. Send a unique key per logical operation to make retries safe: a retry with the same key replays the stored success for 14 days instead of re-running the write. Reusing a key with a different body returns 400.
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Send a one-off test of the campaign's current content to a single address. Requires a subject, body, and from-address; does not touch the audience or the campaign's status.
Response Body
application/json
application/json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
{ "dry_run": true, "effect": { "summary": "string", "count": 0, "targets": [ { "type": "string", "id": "string", "label": "string" } ], "amount": { "minor": -9007199254740991, "currency": "str" }, "details": { "property1": "string", "property2": "string" }, "irreversible": true }}{ "sent": true, "to": "string"}{ "type": "../dictionary", "title": "string", "status": 0, "detail": "string", "code": "invalid_request", "retry": "permanent", "details": null}{ "type": "../dictionary", "title": "string", "status": 0, "detail": "string", "code": "invalid_request", "retry": "permanent", "details": null}{ "type": "../dictionary", "title": "string", "status": 0, "detail": "string", "code": "invalid_request", "retry": "permanent", "details": null}{ "type": "../dictionary", "title": "string", "status": 0, "detail": "string", "code": "invalid_request", "retry": "permanent", "details": null}{ "type": "../dictionary", "title": "string", "status": 0, "detail": "string", "code": "invalid_request", "retry": "permanent", "details": null}{ "type": "../dictionary", "title": "string", "status": 0, "detail": "string", "code": "invalid_request", "retry": "permanent", "details": null}Schedule a campaign to send POST
Moves a draft campaign to `scheduled` — the send worker fans it out at `scheduled_at` (or on its next run when omitted). Rejected if the campaign has no subject, body, from-address, or audience.
Update a campaign PATCH
Updates a draft campaign's content, from-identity, or audience. Only a draft can be edited.