Messaging guide

Run a Campaign through the same safeguards.

A server credential can prepare a Campaign draft, select a published Template and audience, validate the sender, then schedule the immutable ready revision. The workspace pipeline still checks each recipient's current eligibility before delivery.

  1. Create an organization-wide key with campaigns:read andcampaigns:write. Grant campaigns:publish separately to the service that schedules and controls runs.
  2. Create a draft with POST /v1/campaigns and anIdempotency-Key. Choose a published Template version.
  3. Read GET /v1/campaigns/{campaignId}, then save the audience and sender with PUT /v1/campaigns/{campaignId}/revision. Supply the current expectedVersion; a stale edit returns409.
  4. Call POST /v1/campaigns/{campaignId}/validate. A ready revision requires a reachable audience, verified sender, postal address and healthy sending setup. Fix reported blockers before scheduling.
  5. Call POST /v1/campaigns/{campaignId}/schedulewith a unique idempotency key. Poll the run for aggregate outcomes.
curl https://api.fendsy.com/v1/campaigns   -H "Authorization: Bearer $FENDSY_API_KEY"   -H "Content-Type: application/json"   -H "Idempotency-Key: campaign-launch-2026-10-14"   -d '{"name":"Autumn update","goal":"newsletter","emailTemplateId":"TEMPLATE_ID","emailTemplateVersion":1}'

Read GET /v1/campaigns/{campaignId}/runs andGET /v1/campaigns/{campaignId}/runs/{runId}for progress and aggregate results. A run can be paused, resumed or cancelled with POST /v1/campaigns/{campaignId}/runs/{runId}/{action}where action is pause, resume or cancel. Controls require an idempotency key.

The scheduling quota is two requests per credential per minute;429 includes Retry-After. An accepted run is not proof that every recipient was sent. Read the run counters and failures.

See the API referencefor request fields, scopes and error responses.