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
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.
Request bodyJSON · AutopilotPlanRequest
- 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
Responses
- 200 The sized plan · AutopilotPlanResponse
- 400 Invalid request body · ErrorResponse
- 401 Unauthorized - invalid or missing API key · ErrorUnauthorized
Fields in the 200 response
- credits integerExample:
2310 - creditsUsd numberExample:
57.75 - domains integerExample:
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 integerExample:
14 - mailboxesMonthlyUsd numberExample:
70 - monthlySends integerExample:
9240 - notes array of string
Notes explains anything worth surfacing to a human.
- prospectsPerMonth integerExample:
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
Lists the workspace's autopilot runs, newest first.
Parameters
- limit integer in query
Page size (default 50, max 200)
- page integer in query
Page number, 1-based (default 1)
Responses
- 200 Runs and total count · ListAutopilotRunsResponse
- 401 Unauthorized - invalid or missing API key · ErrorUnauthorized
- 500 Failed to retrieve autopilot runs · ErrorResponse
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 integerExample:
1234 - createdAt stringExample:
2026-07-01T10:30:00Z - icpId integerExample:
12 - id integerExample:
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 integerExample:
56 - replyMode stringExample:
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 integerExample:
500 - website stringExample:
https://acme.com
- total integerExample:
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
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.
Request bodyJSON · StartAutopilotRunRequest
- 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
Responses
- 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 integerExample:
2310 - creditsUsd numberExample:
57.75 - domains integerExample:
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 integerExample:
14 - mailboxesMonthlyUsd numberExample:
70 - monthlySends integerExample:
9240 - notes array of string
Notes explains anything worth surfacing to a human.
- prospectsPerMonth integerExample:
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 integerExample:
1234 - createdAt stringExample:
2026-07-01T10:30:00Z - icpId integerExample:
12 - id integerExample:
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 integerExample:
56 - replyMode stringExample:
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 integerExample:
500 - website stringExample:
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
Returns one run, including its audit trail. Runs belonging to other workspaces are reported as not found.
Parameters
- id integer required in path
Run ID
Responses
- 200 The run · AutopilotRunResult
- 400 Invalid run id · ErrorResponse
- 401 Unauthorized - invalid or missing API key · ErrorUnauthorized
- 404 Run not found · ErrorResponse
- 500 Failed to retrieve the run · ErrorResponse
Fields in the 200 response
13 fields inside plan
- credits integerExample:
2310 - creditsUsd numberExample:
57.75 - domains integerExample:
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 integerExample:
14 - mailboxesMonthlyUsd numberExample:
70 - monthlySends integerExample:
9240 - notes array of string
Notes explains anything worth surfacing to a human.
- prospectsPerMonth integerExample:
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 integerExample:
1234 - createdAt stringExample:
2026-07-01T10:30:00Z - icpId integerExample:
12 - id integerExample:
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 integerExample:
56 - replyMode stringExample:
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 integerExample:
500 - website stringExample:
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
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.
Parameters
- id integer required in path
Run ID
Responses
- 200 The approved run · AutopilotRunResult
- 400 Invalid run id · ErrorResponse
- 401 Unauthorized - invalid or missing API key · ErrorUnauthorized
- 404 Run not found · ErrorResponse
- 409 The run is not waiting for approval, or has been halted by the kill switch · ErrorResponse
- 500 Failed to approve the run · ErrorResponse
Fields in the 200 response
13 fields inside plan
- credits integerExample:
2310 - creditsUsd numberExample:
57.75 - domains integerExample:
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 integerExample:
14 - mailboxesMonthlyUsd numberExample:
70 - monthlySends integerExample:
9240 - notes array of string
Notes explains anything worth surfacing to a human.
- prospectsPerMonth integerExample:
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 integerExample:
1234 - createdAt stringExample:
2026-07-01T10:30:00Z - icpId integerExample:
12 - id integerExample:
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 integerExample:
56 - replyMode stringExample:
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 integerExample:
500 - website stringExample:
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
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.
Parameters
- id integer required in path
Run ID
Request bodyJSON · KillAutopilotRunRequest
- reason string
Reason is recorded in the run's audit trail. Trimmed and capped at 200 characters.
Example:customer requested stop
Responses
- 200 The halted run · AutopilotRunResult
- 400 Invalid run id · ErrorResponse
- 401 Unauthorized - invalid or missing API key · ErrorUnauthorized
- 404 Run not found · ErrorResponse
- 500 Failed to stop the run · ErrorResponse
Fields in the 200 response
13 fields inside plan
- credits integerExample:
2310 - creditsUsd numberExample:
57.75 - domains integerExample:
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 integerExample:
14 - mailboxesMonthlyUsd numberExample:
70 - monthlySends integerExample:
9240 - notes array of string
Notes explains anything worth surfacing to a human.
- prospectsPerMonth integerExample:
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 integerExample:
1234 - createdAt stringExample:
2026-07-01T10:30:00Z - icpId integerExample:
12 - id integerExample:
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 integerExample:
56 - replyMode stringExample:
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 integerExample:
500 - website stringExample:
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
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.
Parameters
- id integer required in path
Run ID
Responses
- 200 The paused run · AutopilotRunResult
- 400 Invalid run id · ErrorResponse
- 401 Unauthorized - invalid or missing API key · ErrorUnauthorized
- 404 Run not found · ErrorResponse
- 409 The run has finished and cannot be paused · ErrorResponse
- 500 Failed to pause the run · ErrorResponse
Fields in the 200 response
13 fields inside plan
- credits integerExample:
2310 - creditsUsd numberExample:
57.75 - domains integerExample:
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 integerExample:
14 - mailboxesMonthlyUsd numberExample:
70 - monthlySends integerExample:
9240 - notes array of string
Notes explains anything worth surfacing to a human.
- prospectsPerMonth integerExample:
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 integerExample:
1234 - createdAt stringExample:
2026-07-01T10:30:00Z - icpId integerExample:
12 - id integerExample:
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 integerExample:
56 - replyMode stringExample:
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 integerExample:
500 - website stringExample:
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
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.
Parameters
- id integer required in path
Run ID
Responses
- 200 The resumed run · AutopilotRunResult
- 400 Invalid run id · ErrorResponse
- 401 Unauthorized - invalid or missing API key · ErrorUnauthorized
- 404 Run not found · ErrorResponse
- 409 The run has been halted by the kill switch, or cannot be resumed · ErrorResponse
- 500 Failed to resume the run · ErrorResponse
Fields in the 200 response
13 fields inside plan
- credits integerExample:
2310 - creditsUsd numberExample:
57.75 - domains integerExample:
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 integerExample:
14 - mailboxesMonthlyUsd numberExample:
70 - monthlySends integerExample:
9240 - notes array of string
Notes explains anything worth surfacing to a human.
- prospectsPerMonth integerExample:
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 integerExample:
1234 - createdAt stringExample:
2026-07-01T10:30:00Z - icpId integerExample:
12 - id integerExample:
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 integerExample:
56 - replyMode stringExample:
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 integerExample:
500 - website stringExample:
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.