Automations

Catch up enrollments missed while paused

POST
/api/v1/automations/{id}/backfill

Events keep being recorded while an automation is paused — only enrollment is skipped — so the contacts it missed are recoverable. Defaults to a dry run: the point is to see who would be enrolled before committing. Contacts whose EXIT event arrived after their trigger are skipped, because they resolved during the pause and enrolling them would chase a customer who already converted; the automation's own re-enrollment, cooldown and suppression guards still apply. since is required and capped at six hours — a window reaching further back is pulled forward and window_clamped says so, because replaying a one-hour chase days late is noise, not recovery. Resume the automation before running for real.

Authorization

bearerAuth write
headerAuthorizationBearer <token>

An API key from the dashboard under Settings → API keys, sent as Authorization: Bearer aem_….

Authorization has two independent axes.

The scope is ranked — a key satisfies any requirement at or below its own tier:

  • read — see messages, contacts and metrics. Changes nothing, and cannot send.
  • write — everything read does, plus managing templates, contacts, automations, segments and suppressions. This is what editing a template needs.
  • admin — everything write does, plus sending configuration: domains, senders, webhook registration, kill switch, daily cap, brand.

There is no approve scope. It was a rung once; it is not one now, and a key requested with it is rejected.

The approval grant (can_approve) is a separate boolean, not a rung. Delivering mail to a real inbox needs write and the grant. Keeping them on separate axes is what makes the review gate a control rather than a convention: a key that may propose is not automatically a key that may approve its own proposal.

Give your application the lowest tier that works. Most need write and the grant — the dashboard mints that combination as Send + manage; Manage only is the same rung with the grant withheld.

Scope: write

Path Parameters

id*string

Automation id or exact name.

Request Body

application/json
  1. body
since?string
dry_run?boolean
Defaulttrue
max_contacts?integer
Default1000

Response Body

Preview, or the result of the enrollment.

application/json
  1. response
dry_run?boolean
since?string
window_clamped?boolean
would_enroll?integer
enrolled?integer
skipped_already_resolved?integer
skipped_by_guards?integer
Example Request
curl -X POST 'https://sendandretain.com/api/v1/automations/string/backfill' \  -H 'Content-Type: application/json' \  -d '{  "since": "2026-07-22T11:30:00Z",  "dry_run": true}'
Example Response
{  "dry_run": true,  "since": "2026-07-22T11:30:00Z",  "window_clamped": true,  "would_enroll": 0,  "enrolled": 0,  "skipped_already_resolved": 0,  "skipped_by_guards": 0}