---
title: "Resume an autopilot run"
method: POST
path: "/autopilot/runs/{id}/resume"
tags: ["Autopilot"]
---

# Resume an autopilot run

`POST /autopilot/runs/{id}/resume`

## Request

- Base URL: `https://api.emailchaser.com/r`
- URL: `https://api.emailchaser.com/r/autopilot/runs/{id}/resume`
- Auth: HTTP bearer

Resumes a paused run. A run paused before approval goes back to awaiting approval — resuming can never skip the gate. A failed run resumes to the stage it failed from once the cause (e.g. insufficient credits) is fixed.

## Path parameters

- `id` integer, required

## Response `200`

The resumed run

- ModelsAutopilotRunResult
  - `plan` ModelsAutopilotPlanResponse
    - `credits` integer
    - `creditsUsd` number
    - `domains` integer
    - `expectedMeetingsPerMonth` number: ExpectedMeetingsPerMonth is a planning ESTIMATE on pessimistic funnel assumptions, not a promise.
    - `feasible` boolean: Feasible reports whether the budget covers a usable setup at all.
    - `firstMonthUsd` number: FirstMonthUsd includes the one-off setup on top of the recurring cost.
    - `mailboxes` integer
    - `mailboxesMonthlyUsd` number
    - `monthlySends` integer
    - `notes` string[]: Notes explains anything worth surfacing to a human.
    - `prospectsPerMonth` integer
    - `recurringUsd` number: RecurringUsd is the steady-state monthly cost.
    - `setupUsd` number: SetupUsd is the one-off cost in the first month (mailbox setup fees and annual domain registrations).
  - `run` ModelsAutopilotRunResponse
    - `approvedAt` string: ApprovedAt is when a human approved the run (RFC3339), or null.
    - `approvedByUserId` integer: ApprovedByUserID is who approved the run, or null.
    - `audit` ModelsAutopilotAuditEvent[]
      - `actor` string
      - `at` string
      - `message` string
      - `stage` string
    - `autoOptimizeVariants` boolean
    - `autoTopupProspects` boolean
    - `campaignId` integer
    - `chosenDomain` string: ChosenDomain and MailboxUsernames are the customer's own choices on a starter-kit run, empty on every other run.
    - `createdAt` string
    - `icpId` integer
    - `id` integer
    - `killSwitch` boolean: KillSwitch reports whether the run has been permanently halted.
    - `lastAdvancedAt` string: LastAdvancedAt is when the run last made progress (RFC3339), or null.
    - `lastError` string
    - `mailboxUsernames` string[]
    - `prospectSearchId` integer
    - `prospectShortfall` integer: ProspectShortfall is how many prospects short of its target a starter-kit run finished sourcing. Zero on a run that reached it.
    - `replyMode` string
    - `scaleRun` boolean: ScaleRun reports whether this run buys infrastructure on top of a workspace that already sends.
    - `starterKit` boolean: StarterKit reports whether this run buys the fixed launch starter kit. A starter-kit run cannot be approved over this API: POST /autopilot/runs/{id}/approve answers 409 and the customer approves it in the Emailchaser app.
    - `status` string: Status is one of: pending, building_icp, writing_sequence, sourcing_prospects, awaiting_approval, provisioning_infrastructure, running, paused, completed, failed. A run is at sourcing_prospects twice: before approval it checks for free that prospects match, after approval (approvedAt set) it reveals the first batch, which spends credits.
    - `targetProspectCount` integer
    - `website` string

## Other responses

- `400`: Invalid run id
- `401`: Unauthorized - invalid or missing API key
- `404`: Run not found
- `409`: The run has been halted by the kill switch, or cannot be resumed
- `500`: Failed to resume the run

---

[API](https://skmtc.dev/emailchaser/apis/emailchaser-api.md) · [All operations](https://skmtc.dev/emailchaser/apis/emailchaser-api/llms.txt) · [OpenAPI document](https://skmtc.dev/emailchaser/apis/emailchaser-api/revisions/8b114990abb7?raw)
