Autopilot

Plan and run Autopilot: describe who you sell to and a budget, approve the plan, and Emailchaser builds and runs the outbound for you.

Size an autopilot budget plan

post https://api.emailchaser.com/r/autopilot/plan

Turns a monthly budget into a concrete outbound setup: domains, mailboxes, sending volume, prospects and costs. expectedMeetingsPerMonth is a planning ESTIMATE on pessimistic funnel assumptions, not a promise. Changes nothing, but needs a read and write API key.

  • budgetUsd number

    BudgetUsd is the total monthly budget in dollars, inclusive of the platform subscription. Required, must be greater than zero.

    Example: 500
  • maxMailboxes integer

    MaxMailboxes caps infrastructure regardless of budget. 0 means no cap.

    Example: 20
  • platformUsd number

    PlatformUsd is the subscription cost to reserve before sizing infrastructure. Defaults to 0.

    Example: 99
Fields in the 200 response
  • credits integer
    Example: 2310
  • creditsUsd number
    Example: 57.75
  • domains integer
    Example: 5
  • expectedMeetingsPerMonth number

    ExpectedMeetingsPerMonth is a planning ESTIMATE on pessimistic funnel assumptions, not a promise.

    Example: 6.1
  • feasible boolean

    Feasible reports whether the budget covers a usable setup at all.

    Example: true
  • firstMonthUsd number

    FirstMonthUsd includes the one-off setup on top of the recurring cost.

    Example: 539.7
  • mailboxes integer
    Example: 14
  • mailboxesMonthlyUsd number
    Example: 70
  • monthlySends integer
    Example: 9240
  • notes array of string

    Notes explains anything worth surfacing to a human.

  • prospectsPerMonth integer
    Example: 2310
  • recurringUsd number

    RecurringUsd is the steady-state monthly cost.

    Example: 427.75
  • setupUsd number

    SetupUsd is the one-off cost in the first month (mailbox setup fees and annual domain registrations).

    Example: 111.95

Request

curl -X POST "https://api.emailchaser.com/r/autopilot/plan" \
  -H "Authorization: Bearer $EMAILCHASER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "budgetUsd": 500,
  "maxMailboxes": 20,
  "platformUsd": 99
}'

Response

{
  "credits": 2310,
  "creditsUsd": 57.75,
  "domains": 5,
  "expectedMeetingsPerMonth": 6.1,
  "feasible": true,
  "firstMonthUsd": 539.7,
  "mailboxes": 14,
  "mailboxesMonthlyUsd": 70,
  "monthlySends": 9240,
  "notes": [
    "string"
  ],
  "prospectsPerMonth": 2310,
  "recurringUsd": 427.75,
  "setupUsd": 111.95
}

List autopilot runs

get https://api.emailchaser.com/r/autopilot/runs
Works with a read-only key

Lists the workspace's autopilot runs, newest first.

  • limit integer in query

    Page size (default 50, max 200)

  • page integer in query

    Page number, 1-based (default 1)

Fields in the 200 response
  • runs array of AutopilotRunResponse
    17 fields inside runs
    • approvedAt string

      ApprovedAt is when a human approved the run (RFC3339), or null.

      Example: 2026-07-01T10:30:00Z
    • approvedByUserId integer

      ApprovedByUserID is who approved the run, or null.

      Example: 3
    • audit array of AutopilotAuditEvent
    • autoOptimizeVariants boolean
    • autoTopupProspects boolean
    • campaignId integer
      Example: 1234
    • createdAt string
      Example: 2026-07-01T10:30:00Z
    • icpId integer
      Example: 12
    • id integer
      Example: 7
    • killSwitch boolean

      KillSwitch reports whether the run has been permanently halted.

      Example: false
    • lastAdvancedAt string

      LastAdvancedAt is when the run last made progress (RFC3339), or null.

      Example: 2026-07-01T10:30:00Z
    • lastError string
    • prospectSearchId integer
      Example: 56
    • replyMode string
      Example: draft
    • 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.

      Example: awaiting_approval
    • targetProspectCount integer
      Example: 500
    • website string
      Example: https://acme.com
  • total integer
    Example: 2

Request

curl -X GET "https://api.emailchaser.com/r/autopilot/runs" \
  -H "Authorization: Bearer $EMAILCHASER_API_KEY"

Response

{
  "runs": [
    {
      "approvedAt": "2026-07-01T10:30:00Z",
      "approvedByUserId": 3,
      "audit": [
        {
          "actor": "system",
          "at": "2026-07-01T10:30:00Z",
          "message": "found prospects to reveal; no credits spent, waiting for approval before revealing them",
          "stage": "awaiting_approval"
        }
      ],
      "autoOptimizeVariants": true,
      "autoTopupProspects": true,
      "campaignId": 1234,
      "createdAt": "2026-07-01T10:30:00Z",
      "icpId": 12,
      "id": 7,
      "killSwitch": false,
      "lastAdvancedAt": "2026-07-01T10:30:00Z",
      "lastError": "string",
      "prospectSearchId": 56,
      "replyMode": "draft",
      "status": "awaiting_approval",
      "targetProspectCount": 500,
      "website": "https://acme.com"
    }
  ],
  "total": 2
}

Start an autopilot run

post https://api.emailchaser.com/r/autopilot/runs

Creates an autopilot run for the given website. The run works autonomously up to the approval gate: it builds the customer profile, drafts the sequence and checks, without spending credits, that prospects match the profile. Nothing is spent, bought or sent before a human approves the run: no credits are reserved and no prospect is revealed until then, and approving is what reveals the first batch of prospects. When budgetUsd is given the sized budget plan is returned and snapshotted on the run, and targetProspects defaults to the plan's monthly prospect capacity. The plan's domain and mailbox counts are a ceiling, not a quote: one infrastructure order buys at most 10 domains, can place fewer mailboxes than the plan, and buys nothing when the workspace already has a connected sending account. Its dollar figures are an estimate, and an order is charged at the prices in force when it is placed. replyMode controls how inbound replies are handled (off, draft, approve, auto; default draft); auto sends AI reply drafts for interested replies without review. Available on every plan, and requires an active subscription. A workspace may have only one run awaiting approval at a time, and a limited number of starts per day.

  • budgetUsd number

    BudgetUsd, when given, sizes a budget plan that is snapshotted on the run. The plan's domain and mailbox counts are a ceiling for what the run buys after approval (one order holds at most 10 domains and can place fewer mailboxes), and its dollar figures are an estimate.

    Example: 500
  • maxMailboxes integer

    MaxMailboxes caps the budget plan's infrastructure. 0 means no cap.

    Example: 20
  • replyMode string

    ReplyMode is how inbound replies are handled: off, draft (default), approve, or auto. Auto sends AI reply drafts for interested replies without review - opt in deliberately.

    Example: draft
  • targetProspects integer

    TargetProspects is how many prospects the run reveals per sourcing batch: the first batch once the run is approved, then each top-up. No prospect is revealed and no credit is spent before approval. When omitted and a budget is given, it is derived from the budget plan; when 0 or omitted without a budget, the runner default batch applies.

    Example: 500
  • website string required

    Website is the company website the run is seeded from.

    Example: https://acme.com
  • 201 The created run, with the plan when a budget was given · AutopilotRunResult
  • 400 Invalid request body · ErrorResponse
  • 401 Unauthorized - invalid or missing API key · ErrorUnauthorized
  • 402 The workspace does not hold enough prospect credits for the first batch the run reveals once approved: the run's prospect target, capped at what a single increment can reserve, priced at credits.ActionProspectReveal credits per prospect. A pre-flight check only; starting reserves nothing (code insufficient_credits, with have/need counts) · InsufficientCreditsErrorResponse
  • 403 Autopilot requires an active subscription · ErrorForbidden
  • 429 A run is already awaiting approval, or too many runs have been started today · ErrorResponse
  • 500 Failed to start the autopilot run · ErrorResponse
Fields in the 201 response
  • 13 fields inside plan
    • credits integer
      Example: 2310
    • creditsUsd number
      Example: 57.75
    • domains integer
      Example: 5
    • expectedMeetingsPerMonth number

      ExpectedMeetingsPerMonth is a planning ESTIMATE on pessimistic funnel assumptions, not a promise.

      Example: 6.1
    • feasible boolean

      Feasible reports whether the budget covers a usable setup at all.

      Example: true
    • firstMonthUsd number

      FirstMonthUsd includes the one-off setup on top of the recurring cost.

      Example: 539.7
    • mailboxes integer
      Example: 14
    • mailboxesMonthlyUsd number
      Example: 70
    • monthlySends integer
      Example: 9240
    • notes array of string

      Notes explains anything worth surfacing to a human.

    • prospectsPerMonth integer
      Example: 2310
    • recurringUsd number

      RecurringUsd is the steady-state monthly cost.

      Example: 427.75
    • setupUsd number

      SetupUsd is the one-off cost in the first month (mailbox setup fees and annual domain registrations).

      Example: 111.95
  • 17 fields inside run
    • approvedAt string

      ApprovedAt is when a human approved the run (RFC3339), or null.

      Example: 2026-07-01T10:30:00Z
    • approvedByUserId integer

      ApprovedByUserID is who approved the run, or null.

      Example: 3
    • audit array of AutopilotAuditEvent
    • autoOptimizeVariants boolean
    • autoTopupProspects boolean
    • campaignId integer
      Example: 1234
    • createdAt string
      Example: 2026-07-01T10:30:00Z
    • icpId integer
      Example: 12
    • id integer
      Example: 7
    • killSwitch boolean

      KillSwitch reports whether the run has been permanently halted.

      Example: false
    • lastAdvancedAt string

      LastAdvancedAt is when the run last made progress (RFC3339), or null.

      Example: 2026-07-01T10:30:00Z
    • lastError string
    • prospectSearchId integer
      Example: 56
    • replyMode string
      Example: draft
    • 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.

      Example: awaiting_approval
    • targetProspectCount integer
      Example: 500
    • website string
      Example: https://acme.com

Request

curl -X POST "https://api.emailchaser.com/r/autopilot/runs" \
  -H "Authorization: Bearer $EMAILCHASER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "budgetUsd": 500,
  "maxMailboxes": 20,
  "replyMode": "draft",
  "targetProspects": 500,
  "website": "https://acme.com"
}'

Response

{
  "plan": {
    "credits": 2310,
    "creditsUsd": 57.75,
    "domains": 5,
    "expectedMeetingsPerMonth": 6.1,
    "feasible": true,
    "firstMonthUsd": 539.7,
    "mailboxes": 14,
    "mailboxesMonthlyUsd": 70,
    "monthlySends": 9240,
    "notes": [
      "string"
    ],
    "prospectsPerMonth": 2310,
    "recurringUsd": 427.75,
    "setupUsd": 111.95
  },
  "run": {
    "approvedAt": "2026-07-01T10:30:00Z",
    "approvedByUserId": 3,
    "audit": [
      {
        "actor": "system",
        "at": "2026-07-01T10:30:00Z",
        "message": "found prospects to reveal; no credits spent, waiting for approval before revealing them",
        "stage": "awaiting_approval"
      }
    ],
    "autoOptimizeVariants": true,
    "autoTopupProspects": true,
    "campaignId": 1234,
    "createdAt": "2026-07-01T10:30:00Z",
    "icpId": 12,
    "id": 7,
    "killSwitch": false,
    "lastAdvancedAt": "2026-07-01T10:30:00Z",
    "lastError": "string",
    "prospectSearchId": 56,
    "replyMode": "draft",
    "status": "awaiting_approval",
    "targetProspectCount": 500,
    "website": "https://acme.com"
  }
}

Get an autopilot run

get https://api.emailchaser.com/r/autopilot/runs/{id}
Works with a read-only key

Returns one run, including its audit trail. Runs belonging to other workspaces are reported as not found.

  • id integer required in path

    Run ID

Fields in the 200 response
  • 13 fields inside plan
    • credits integer
      Example: 2310
    • creditsUsd number
      Example: 57.75
    • domains integer
      Example: 5
    • expectedMeetingsPerMonth number

      ExpectedMeetingsPerMonth is a planning ESTIMATE on pessimistic funnel assumptions, not a promise.

      Example: 6.1
    • feasible boolean

      Feasible reports whether the budget covers a usable setup at all.

      Example: true
    • firstMonthUsd number

      FirstMonthUsd includes the one-off setup on top of the recurring cost.

      Example: 539.7
    • mailboxes integer
      Example: 14
    • mailboxesMonthlyUsd number
      Example: 70
    • monthlySends integer
      Example: 9240
    • notes array of string

      Notes explains anything worth surfacing to a human.

    • prospectsPerMonth integer
      Example: 2310
    • recurringUsd number

      RecurringUsd is the steady-state monthly cost.

      Example: 427.75
    • setupUsd number

      SetupUsd is the one-off cost in the first month (mailbox setup fees and annual domain registrations).

      Example: 111.95
  • 17 fields inside run
    • approvedAt string

      ApprovedAt is when a human approved the run (RFC3339), or null.

      Example: 2026-07-01T10:30:00Z
    • approvedByUserId integer

      ApprovedByUserID is who approved the run, or null.

      Example: 3
    • audit array of AutopilotAuditEvent
    • autoOptimizeVariants boolean
    • autoTopupProspects boolean
    • campaignId integer
      Example: 1234
    • createdAt string
      Example: 2026-07-01T10:30:00Z
    • icpId integer
      Example: 12
    • id integer
      Example: 7
    • killSwitch boolean

      KillSwitch reports whether the run has been permanently halted.

      Example: false
    • lastAdvancedAt string

      LastAdvancedAt is when the run last made progress (RFC3339), or null.

      Example: 2026-07-01T10:30:00Z
    • lastError string
    • prospectSearchId integer
      Example: 56
    • replyMode string
      Example: draft
    • 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.

      Example: awaiting_approval
    • targetProspectCount integer
      Example: 500
    • website string
      Example: https://acme.com

Request

curl -X GET "https://api.emailchaser.com/r/autopilot/runs/123" \
  -H "Authorization: Bearer $EMAILCHASER_API_KEY"

Response

{
  "plan": {
    "credits": 2310,
    "creditsUsd": 57.75,
    "domains": 5,
    "expectedMeetingsPerMonth": 6.1,
    "feasible": true,
    "firstMonthUsd": 539.7,
    "mailboxes": 14,
    "mailboxesMonthlyUsd": 70,
    "monthlySends": 9240,
    "notes": [
      "string"
    ],
    "prospectsPerMonth": 2310,
    "recurringUsd": 427.75,
    "setupUsd": 111.95
  },
  "run": {
    "approvedAt": "2026-07-01T10:30:00Z",
    "approvedByUserId": 3,
    "audit": [
      {
        "actor": "system",
        "at": "2026-07-01T10:30:00Z",
        "message": "found prospects to reveal; no credits spent, waiting for approval before revealing them",
        "stage": "awaiting_approval"
      }
    ],
    "autoOptimizeVariants": true,
    "autoTopupProspects": true,
    "campaignId": 1234,
    "createdAt": "2026-07-01T10:30:00Z",
    "icpId": 12,
    "id": 7,
    "killSwitch": false,
    "lastAdvancedAt": "2026-07-01T10:30:00Z",
    "lastError": "string",
    "prospectSearchId": 56,
    "replyMode": "draft",
    "status": "awaiting_approval",
    "targetProspectCount": 500,
    "website": "https://acme.com"
  }
}

Approve an autopilot run

post https://api.emailchaser.com/r/autopilot/runs/{id}/approve

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.

  • id integer required in path

    Run ID

Fields in the 200 response
  • 13 fields inside plan
    • credits integer
      Example: 2310
    • creditsUsd number
      Example: 57.75
    • domains integer
      Example: 5
    • expectedMeetingsPerMonth number

      ExpectedMeetingsPerMonth is a planning ESTIMATE on pessimistic funnel assumptions, not a promise.

      Example: 6.1
    • feasible boolean

      Feasible reports whether the budget covers a usable setup at all.

      Example: true
    • firstMonthUsd number

      FirstMonthUsd includes the one-off setup on top of the recurring cost.

      Example: 539.7
    • mailboxes integer
      Example: 14
    • mailboxesMonthlyUsd number
      Example: 70
    • monthlySends integer
      Example: 9240
    • notes array of string

      Notes explains anything worth surfacing to a human.

    • prospectsPerMonth integer
      Example: 2310
    • recurringUsd number

      RecurringUsd is the steady-state monthly cost.

      Example: 427.75
    • setupUsd number

      SetupUsd is the one-off cost in the first month (mailbox setup fees and annual domain registrations).

      Example: 111.95
  • 17 fields inside run
    • approvedAt string

      ApprovedAt is when a human approved the run (RFC3339), or null.

      Example: 2026-07-01T10:30:00Z
    • approvedByUserId integer

      ApprovedByUserID is who approved the run, or null.

      Example: 3
    • audit array of AutopilotAuditEvent
    • autoOptimizeVariants boolean
    • autoTopupProspects boolean
    • campaignId integer
      Example: 1234
    • createdAt string
      Example: 2026-07-01T10:30:00Z
    • icpId integer
      Example: 12
    • id integer
      Example: 7
    • killSwitch boolean

      KillSwitch reports whether the run has been permanently halted.

      Example: false
    • lastAdvancedAt string

      LastAdvancedAt is when the run last made progress (RFC3339), or null.

      Example: 2026-07-01T10:30:00Z
    • lastError string
    • prospectSearchId integer
      Example: 56
    • replyMode string
      Example: draft
    • 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.

      Example: awaiting_approval
    • targetProspectCount integer
      Example: 500
    • website string
      Example: https://acme.com

Request

curl -X POST "https://api.emailchaser.com/r/autopilot/runs/123/approve" \
  -H "Authorization: Bearer $EMAILCHASER_API_KEY"

Response

{
  "plan": {
    "credits": 2310,
    "creditsUsd": 57.75,
    "domains": 5,
    "expectedMeetingsPerMonth": 6.1,
    "feasible": true,
    "firstMonthUsd": 539.7,
    "mailboxes": 14,
    "mailboxesMonthlyUsd": 70,
    "monthlySends": 9240,
    "notes": [
      "string"
    ],
    "prospectsPerMonth": 2310,
    "recurringUsd": 427.75,
    "setupUsd": 111.95
  },
  "run": {
    "approvedAt": "2026-07-01T10:30:00Z",
    "approvedByUserId": 3,
    "audit": [
      {
        "actor": "system",
        "at": "2026-07-01T10:30:00Z",
        "message": "found prospects to reveal; no credits spent, waiting for approval before revealing them",
        "stage": "awaiting_approval"
      }
    ],
    "autoOptimizeVariants": true,
    "autoTopupProspects": true,
    "campaignId": 1234,
    "createdAt": "2026-07-01T10:30:00Z",
    "icpId": 12,
    "id": 7,
    "killSwitch": false,
    "lastAdvancedAt": "2026-07-01T10:30:00Z",
    "lastError": "string",
    "prospectSearchId": 56,
    "replyMode": "draft",
    "status": "awaiting_approval",
    "targetProspectCount": 500,
    "website": "https://acme.com"
  }
}

Kill an autopilot run

post https://api.emailchaser.com/r/autopilot/runs/{id}/kill

Engages the kill switch: the run halts wherever it is and cannot be resumed, and a campaign the run launched is paused so nothing more sends. The optional reason is recorded in the audit trail.

  • id integer required in path

    Run ID

  • reason string

    Reason is recorded in the run's audit trail. Trimmed and capped at 200 characters.

    Example: customer requested stop
Fields in the 200 response
  • 13 fields inside plan
    • credits integer
      Example: 2310
    • creditsUsd number
      Example: 57.75
    • domains integer
      Example: 5
    • expectedMeetingsPerMonth number

      ExpectedMeetingsPerMonth is a planning ESTIMATE on pessimistic funnel assumptions, not a promise.

      Example: 6.1
    • feasible boolean

      Feasible reports whether the budget covers a usable setup at all.

      Example: true
    • firstMonthUsd number

      FirstMonthUsd includes the one-off setup on top of the recurring cost.

      Example: 539.7
    • mailboxes integer
      Example: 14
    • mailboxesMonthlyUsd number
      Example: 70
    • monthlySends integer
      Example: 9240
    • notes array of string

      Notes explains anything worth surfacing to a human.

    • prospectsPerMonth integer
      Example: 2310
    • recurringUsd number

      RecurringUsd is the steady-state monthly cost.

      Example: 427.75
    • setupUsd number

      SetupUsd is the one-off cost in the first month (mailbox setup fees and annual domain registrations).

      Example: 111.95
  • 17 fields inside run
    • approvedAt string

      ApprovedAt is when a human approved the run (RFC3339), or null.

      Example: 2026-07-01T10:30:00Z
    • approvedByUserId integer

      ApprovedByUserID is who approved the run, or null.

      Example: 3
    • audit array of AutopilotAuditEvent
    • autoOptimizeVariants boolean
    • autoTopupProspects boolean
    • campaignId integer
      Example: 1234
    • createdAt string
      Example: 2026-07-01T10:30:00Z
    • icpId integer
      Example: 12
    • id integer
      Example: 7
    • killSwitch boolean

      KillSwitch reports whether the run has been permanently halted.

      Example: false
    • lastAdvancedAt string

      LastAdvancedAt is when the run last made progress (RFC3339), or null.

      Example: 2026-07-01T10:30:00Z
    • lastError string
    • prospectSearchId integer
      Example: 56
    • replyMode string
      Example: draft
    • 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.

      Example: awaiting_approval
    • targetProspectCount integer
      Example: 500
    • website string
      Example: https://acme.com

Request

curl -X POST "https://api.emailchaser.com/r/autopilot/runs/123/kill" \
  -H "Authorization: Bearer $EMAILCHASER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "reason": "customer requested stop"
}'

Response

{
  "plan": {
    "credits": 2310,
    "creditsUsd": 57.75,
    "domains": 5,
    "expectedMeetingsPerMonth": 6.1,
    "feasible": true,
    "firstMonthUsd": 539.7,
    "mailboxes": 14,
    "mailboxesMonthlyUsd": 70,
    "monthlySends": 9240,
    "notes": [
      "string"
    ],
    "prospectsPerMonth": 2310,
    "recurringUsd": 427.75,
    "setupUsd": 111.95
  },
  "run": {
    "approvedAt": "2026-07-01T10:30:00Z",
    "approvedByUserId": 3,
    "audit": [
      {
        "actor": "system",
        "at": "2026-07-01T10:30:00Z",
        "message": "found prospects to reveal; no credits spent, waiting for approval before revealing them",
        "stage": "awaiting_approval"
      }
    ],
    "autoOptimizeVariants": true,
    "autoTopupProspects": true,
    "campaignId": 1234,
    "createdAt": "2026-07-01T10:30:00Z",
    "icpId": 12,
    "id": 7,
    "killSwitch": false,
    "lastAdvancedAt": "2026-07-01T10:30:00Z",
    "lastError": "string",
    "prospectSearchId": 56,
    "replyMode": "draft",
    "status": "awaiting_approval",
    "targetProspectCount": 500,
    "website": "https://acme.com"
  }
}

Pause an autopilot run

post https://api.emailchaser.com/r/autopilot/runs/{id}/pause

Suspends a run that is still in flight. A paused run can be resumed; pausing never skips the approval gate. A completed or failed run cannot be paused.

  • id integer required in path

    Run ID

Fields in the 200 response
  • 13 fields inside plan
    • credits integer
      Example: 2310
    • creditsUsd number
      Example: 57.75
    • domains integer
      Example: 5
    • expectedMeetingsPerMonth number

      ExpectedMeetingsPerMonth is a planning ESTIMATE on pessimistic funnel assumptions, not a promise.

      Example: 6.1
    • feasible boolean

      Feasible reports whether the budget covers a usable setup at all.

      Example: true
    • firstMonthUsd number

      FirstMonthUsd includes the one-off setup on top of the recurring cost.

      Example: 539.7
    • mailboxes integer
      Example: 14
    • mailboxesMonthlyUsd number
      Example: 70
    • monthlySends integer
      Example: 9240
    • notes array of string

      Notes explains anything worth surfacing to a human.

    • prospectsPerMonth integer
      Example: 2310
    • recurringUsd number

      RecurringUsd is the steady-state monthly cost.

      Example: 427.75
    • setupUsd number

      SetupUsd is the one-off cost in the first month (mailbox setup fees and annual domain registrations).

      Example: 111.95
  • 17 fields inside run
    • approvedAt string

      ApprovedAt is when a human approved the run (RFC3339), or null.

      Example: 2026-07-01T10:30:00Z
    • approvedByUserId integer

      ApprovedByUserID is who approved the run, or null.

      Example: 3
    • audit array of AutopilotAuditEvent
    • autoOptimizeVariants boolean
    • autoTopupProspects boolean
    • campaignId integer
      Example: 1234
    • createdAt string
      Example: 2026-07-01T10:30:00Z
    • icpId integer
      Example: 12
    • id integer
      Example: 7
    • killSwitch boolean

      KillSwitch reports whether the run has been permanently halted.

      Example: false
    • lastAdvancedAt string

      LastAdvancedAt is when the run last made progress (RFC3339), or null.

      Example: 2026-07-01T10:30:00Z
    • lastError string
    • prospectSearchId integer
      Example: 56
    • replyMode string
      Example: draft
    • 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.

      Example: awaiting_approval
    • targetProspectCount integer
      Example: 500
    • website string
      Example: https://acme.com

Request

curl -X POST "https://api.emailchaser.com/r/autopilot/runs/123/pause" \
  -H "Authorization: Bearer $EMAILCHASER_API_KEY"

Response

{
  "plan": {
    "credits": 2310,
    "creditsUsd": 57.75,
    "domains": 5,
    "expectedMeetingsPerMonth": 6.1,
    "feasible": true,
    "firstMonthUsd": 539.7,
    "mailboxes": 14,
    "mailboxesMonthlyUsd": 70,
    "monthlySends": 9240,
    "notes": [
      "string"
    ],
    "prospectsPerMonth": 2310,
    "recurringUsd": 427.75,
    "setupUsd": 111.95
  },
  "run": {
    "approvedAt": "2026-07-01T10:30:00Z",
    "approvedByUserId": 3,
    "audit": [
      {
        "actor": "system",
        "at": "2026-07-01T10:30:00Z",
        "message": "found prospects to reveal; no credits spent, waiting for approval before revealing them",
        "stage": "awaiting_approval"
      }
    ],
    "autoOptimizeVariants": true,
    "autoTopupProspects": true,
    "campaignId": 1234,
    "createdAt": "2026-07-01T10:30:00Z",
    "icpId": 12,
    "id": 7,
    "killSwitch": false,
    "lastAdvancedAt": "2026-07-01T10:30:00Z",
    "lastError": "string",
    "prospectSearchId": 56,
    "replyMode": "draft",
    "status": "awaiting_approval",
    "targetProspectCount": 500,
    "website": "https://acme.com"
  }
}

Resume an autopilot run

post https://api.emailchaser.com/r/autopilot/runs/{id}/resume

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.

  • id integer required in path

    Run ID

Fields in the 200 response
  • 13 fields inside plan
    • credits integer
      Example: 2310
    • creditsUsd number
      Example: 57.75
    • domains integer
      Example: 5
    • expectedMeetingsPerMonth number

      ExpectedMeetingsPerMonth is a planning ESTIMATE on pessimistic funnel assumptions, not a promise.

      Example: 6.1
    • feasible boolean

      Feasible reports whether the budget covers a usable setup at all.

      Example: true
    • firstMonthUsd number

      FirstMonthUsd includes the one-off setup on top of the recurring cost.

      Example: 539.7
    • mailboxes integer
      Example: 14
    • mailboxesMonthlyUsd number
      Example: 70
    • monthlySends integer
      Example: 9240
    • notes array of string

      Notes explains anything worth surfacing to a human.

    • prospectsPerMonth integer
      Example: 2310
    • recurringUsd number

      RecurringUsd is the steady-state monthly cost.

      Example: 427.75
    • setupUsd number

      SetupUsd is the one-off cost in the first month (mailbox setup fees and annual domain registrations).

      Example: 111.95
  • 17 fields inside run
    • approvedAt string

      ApprovedAt is when a human approved the run (RFC3339), or null.

      Example: 2026-07-01T10:30:00Z
    • approvedByUserId integer

      ApprovedByUserID is who approved the run, or null.

      Example: 3
    • audit array of AutopilotAuditEvent
    • autoOptimizeVariants boolean
    • autoTopupProspects boolean
    • campaignId integer
      Example: 1234
    • createdAt string
      Example: 2026-07-01T10:30:00Z
    • icpId integer
      Example: 12
    • id integer
      Example: 7
    • killSwitch boolean

      KillSwitch reports whether the run has been permanently halted.

      Example: false
    • lastAdvancedAt string

      LastAdvancedAt is when the run last made progress (RFC3339), or null.

      Example: 2026-07-01T10:30:00Z
    • lastError string
    • prospectSearchId integer
      Example: 56
    • replyMode string
      Example: draft
    • 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.

      Example: awaiting_approval
    • targetProspectCount integer
      Example: 500
    • website string
      Example: https://acme.com

Request

curl -X POST "https://api.emailchaser.com/r/autopilot/runs/123/resume" \
  -H "Authorization: Bearer $EMAILCHASER_API_KEY"

Response

{
  "plan": {
    "credits": 2310,
    "creditsUsd": 57.75,
    "domains": 5,
    "expectedMeetingsPerMonth": 6.1,
    "feasible": true,
    "firstMonthUsd": 539.7,
    "mailboxes": 14,
    "mailboxesMonthlyUsd": 70,
    "monthlySends": 9240,
    "notes": [
      "string"
    ],
    "prospectsPerMonth": 2310,
    "recurringUsd": 427.75,
    "setupUsd": 111.95
  },
  "run": {
    "approvedAt": "2026-07-01T10:30:00Z",
    "approvedByUserId": 3,
    "audit": [
      {
        "actor": "system",
        "at": "2026-07-01T10:30:00Z",
        "message": "found prospects to reveal; no credits spent, waiting for approval before revealing them",
        "stage": "awaiting_approval"
      }
    ],
    "autoOptimizeVariants": true,
    "autoTopupProspects": true,
    "campaignId": 1234,
    "createdAt": "2026-07-01T10:30:00Z",
    "icpId": 12,
    "id": 7,
    "killSwitch": false,
    "lastAdvancedAt": "2026-07-01T10:30:00Z",
    "lastError": "string",
    "prospectSearchId": 56,
    "replyMode": "draft",
    "status": "awaiting_approval",
    "targetProspectCount": 500,
    "website": "https://acme.com"
  }
}

Generated from the Emailchaser API's own OpenAPI definition, so it always matches the running API.