Send a campaign now

Start sending a draft or scheduled campaign immediately to its contact_ids, or to the smart list's current members. Real messages go out and usage is charged to the wallet.

POST https://api.centerfy.ai/webhooks/inbound/campaigns/:id/start

Headers

HeaderRequiredValueDescription
x-api-keyYesyour sub-account API key (cfy_…)Authenticates the request; or use Authorization: Bearer <key>.

Path parameters

NameTypeRequiredDescription
idstring (uuid)YesThe campaign id.

Example

curl -X POST "https://api.centerfy.ai/webhooks/inbound/campaigns/{id}/start" \
  -H "x-api-key: $CENTERFY_API_KEY"
import { CenterfyClient } from "@centerfy/sdk";

const centerfy = new CenterfyClient({ apiKey: process.env.CENTERFY_API_KEY! });

const result = await centerfy.campaigns.start("<campaignId>");
console.log(result);
centerfy campaigns start <campaignId>

MCP tool: centerfy_campaigns_start (see MCP server)

Response

{
  "status": "success",
  "campaign": {
    "id": "4b7e1c2d-3a4f-4e5d-9c8b-7a6f5e4d3c2b",
    "name": "October promo",
    "campaign_type": "email",
    "status": "completed",
    "subject": "20% off this week",
    "message_content": "<p>Hi there, our October sale is on.</p>",
    "contact_ids": [
      "3f1c2a9e-7b4d-4c8a-9e2f-1a2b3c4d5e6f",
      "6a2b3c4d-5e6f-4a7b-8c9d-0e1f2a3b4c5d"
    ],
    "smart_list_id": null,
    "start_date": "2026-10-06T10:05:00.000Z",
    "business_hours_enabled": false,
    "business_hours_config": null,
    "progress": 100,
    "contacted": 2,
    "success": 2,
    "pending": 0,
    "opened_count": 0,
    "clicked_count": 0,
    "unsubscribed_count": 0,
    "created_at": "2026-10-06T10:00:00.000Z",
    "updated_at": "2026-10-06T10:00:00.000Z"
  },
  "summary": {
    "total": 2,
    "sent": 2,
    "failed": 0
  }
}

Errors

  • 400 — if the content (subject/body) is missing or there are no recipients.
  • 402 — if the wallet balance is too low (nothing is sent and the campaign is left as it was).
  • 409 — unless the campaign is draft or scheduled, or if it changed state while starting.
  • 502 — with campaign_id if the send failed; the campaign is marked failed.
  • 404 — if the campaign is not in this sub-account.

Notes

Returns 200 with the updated campaign and a send summary (summary may be null) when the send finishes quickly. A large send that is still going after about 8 seconds returns 202 with { campaign_id, campaign_status: “running”, recipients, accepted: true } and continues in the background — poll Get a campaign or Get campaign stats.

© 2026 Centerfy AI. All rights reserved.