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

# Approve an autopilot run

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

## Request

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

Approves a run that is awaiting approval, recording who approved it. Approval authorises the run's spend: the run moves to sourcing_prospects and reveals its first batch of prospects into the campaign, which spends prospect credits, then moves to provisioning_infrastructure to buy the budgeted sending infrastructure (if any), and then launches unattended. Nothing is spent, bought or sent before this call. A batch that delivers no prospects fails the run before any infrastructure is bought. STARTER-KIT RUNS ARE REFUSED HERE (409, code app_approval_required): approving one charges the card for a domain and mailboxes, so a person approves it in the Emailchaser app.

## Path parameters

- `id` integer, required

## Response `200`

The approved 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 is a starter-kit run and must be approved in the app (code app_approval_required), is not waiting for approval, or has been halted by the kill switch
- `500`: Failed to approve 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)
