Skip to main content
An active campaign builds a queue of messages and works through it on schedule. Where a campaign is set to require approval, nothing leaves until someone says so — and that is what these endpoints are for. They need a key with the campaigns scope.
Approving is the one action in this API that causes mail to be sent, and declining is final for that contact. Neither can be undone.

Read the queue

GET /business/campaigns/{campaignId}/scheduled-sends lists what is waiting. status is required, so you always ask for a specific slice.

Edit before it goes

PATCH /business/scheduled-sends/{sendId} changes the subject, body or send time of a message that has not gone out.
An edit creates a new send and marks the old one overwritten. The id in the response is the one that will actually go out, and replacedSendId is the one you edited — so store the new id if you intend to approve or skip it afterwards.
Only a message still waiting can be edited. Anything already sent, skipped, stopped, overwritten, or parked on a task answers 409 SCHEDULED_SEND_NOT_EDITABLE.

Approve or decline

Both take a list of 1 to 100 ids and report back per id, so a partial batch tells you exactly what happened.
POST /business/scheduled-sends/decline has the same shape and reports declined where approve reports approved. A declined send moves to stopped, and that ends the contact’s sequence in this campaign: no later step is scheduled for them. Decline works on sends that are approval_required or scheduled, so it is also how you call off an upcoming send for one contact.

Skip one

POST /business/scheduled-sends/{sendId}/skip passes over a single message and moves that contact to the next step of the sequence.
Use skip when the message is wrong for one person but the campaign should carry on for them. Use decline when the contact should get nothing more from this campaign. Only a send still waiting can be skipped; anything already sent, stopped or overwritten answers 409 SCHEDULED_SEND_NOT_SKIPPABLE.

A review loop

1

Pull the queue

GET /business/campaigns/{campaignId}/scheduled-sends?status=approval_required
2

Fix what needs fixing

PATCH /business/scheduled-sends/{sendId} — and keep the returned id, not the one you sent.
3

Approve the rest in one call

POST /business/scheduled-sends/approve with every id you are happy with.
4

Check the report

Anything in ignored changed status while you were reviewing; anything in notFound is not yours.

Errors worth handling