Models
The 247 JSON objects the Emailchaser API sends and receives, with every field, its type and an example.
AttachCampaignSendersRequest
- senderEmailIds array of integer required
SenderEmailIDs are the sender emails to attach. Every ID must be a connected sender email in your workspace; the call is refused whole if any is not.
At least 1 item. Example:[1,2]
AttachCampaignSendersResponse
- alreadyAttached array of integer
AlreadyAttached lists the requested sender emails that were attached before this call (the call is idempotent: they are left untouched).
Example:[3] - attached array of integer
Attached lists the sender emails newly attached by this call.
Example:[1,2] - campaignId integerExample:
10 - message stringExample:
sender emails attached successfully - senderEmailIds array of integer
SenderEmailIDs lists every sender email attached to the campaign after this call.
Example:[1,2,3]
AudienceCountResponse
- audienceSize integerExample:
35627
AudienceSizeRequest
- companySizes array of stringExample:
["11-50","51-200"] - industries array of stringExample:
["Software"] - keywords array of stringExample:
["b2b saas"] - locations array of stringExample:
["United States"] - seniorities array of stringExample:
["owner","director"] - titles array of stringExample:
["CEO","Head of Sales"]
AudienceSizeResponse
- audienceSize integerExample:
12345 - icp ICPResponse
AutopilotAuditEvent
- actor stringExample:
system - at stringExample:
2026-07-01T10:30:00Z - message stringExample:
found prospects to reveal; no credits spent, waiting for approval before revealing them - stage stringExample:
awaiting_approval
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
AutopilotPlanResponse
- 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
AutopilotRunResponse
- 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
AutopilotRunResult
BillingProfile
- addressLineOne stringExample:
1 Example Street - addressLineTwo stringExample:
Suite 200 - city stringExample:
New York - company stringExample:
Acme Ltd - country string
Country is an ISO 3166-1 alpha-2 code, uppercase.
Example:US - firstName stringExample:
Jane - lastName stringExample:
Doe - phone stringExample:
2125550142 - phoneCc string
PhoneCc is the telephone country calling code without the plus.
Example:1 - postalAddress string
PostalAddress is the address rendered on one line, ready to paste into a compliance footer. Read-only; it is derived from the fields above.
Example:Acme Ltd, 1 Example Street, Suite 200, New York, NY 10001, US - postalCode stringExample:
10001 - state stringExample:
NY - updatedAt string
UpdatedAt is when the profile was last written (RFC3339).
Example:2026-08-03T10:30:00Z
BillingProfileResult
- billingProfile BillingProfile
BlacklistListingResponse
- answer stringExample:
127.0.0.2 - delistUrl string
DelistURL is where to request removal. Always present: a listing you cannot act on is trivia.
Example:https://check.spamhaus.org/ - kind stringExample:
ip - name stringExample:
Spamhaus ZEN - reason stringExample:
On the SBL: the IP is on Spamhaus's main spam-source list. - txt string
- value stringExample:
203.0.113.5 - zone stringExample:
zen.spamhaus.org
BlocklistAddRequest
- scope string
Scope is "workspace" (default) or "global". A global entry suppresses across every workspace on the account and can only be written with a main workspace's API key.
One of: "workspace", "global". Example:workspace - values array of string required
Values holds the email addresses and/or domains to block, up to 1000 per request.
Example:["competitor.com","jane@acme.com"]
BlocklistAddResponse
- created integer
Created is the number of new suppression entries written.
Example:42 - scope string
Scope is the list the entries were written to.
One of: "workspace", "global". Example:workspace - skipped integer
Skipped is the number of values ignored because they already existed or failed validation.
Example:3
BlocklistDeleteEntryResponse
- id integerExample:
17 - message stringExample:
blocklist entry deleted successfully
BlocklistDeleteRequest
- ids array of integer
Ids are entry ids as returned by GET /blocklist.
- scope string
Scope limits the delete to one list: "workspace" (default), "global", or "all". Deleting from "global" requires a main workspace's key.
One of: "workspace", "global", "all". Example:workspace - values array of string
Values are domains or email addresses to unblock, matched case-insensitively. Values not present are counted as skipped.
Example:["competitor.com","jane@acme.com"]
BlocklistDeleteResponse
- deleted integer
Deleted is the number of entries removed.
Example:12 - skipped integer
Skipped is the number of requested values or ids that matched nothing the caller may delete.
Example:1
BlocklistEntry
- createdAt string
- domain stringExample:
competitor.com - emailAddress string
EmailAddress is the blocked address when the entry blocks one address rather than a whole domain.
Example:jane@acme.com - id integerExample:
17 - scope string
Scope is "workspace" for the calling workspace's own entry, "global" for an account-wide one.
One of: "workspace", "global". Example:workspace - workspaceId integer
WorkspaceId is the workspace the entry is stored on. For a global entry read from a sub-workspace this is the main workspace, not the caller.
Example:12
BlocklistListResponse
- items array of BlocklistEntry
- totalCount integerExample:
214
BlocklistUpdateRequest
- scope string
Scope moves the entry between the workspace list and the account-wide list. Moving an entry to "global" requires a main workspace's key.
One of: "workspace", "global". Example:global - value string
Value is the new domain or email address. Which of the two the entry holds is re-inferred from whether the value contains "@", so an entry can be converted between a domain block and an address block.
Example:competitor.com
CampaignAccountHealth
- address stringExample:
john@example.com - healthScore integer
Health score 0-100, higher is better: the share of this account's warm-up emails over the last 7 full days that landed in the inbox rather than spam. Null while warm-up is off or before 20 warm-up emails were checked.
Example:72 - heldBack boolean
HeldBack is true when the campaign's minimum holds this account back: it sends nothing in this campaign until its score is back at or above the minimum.
Example:true - reason string
Reason says why it is held back, in plain words. Null when it sends.
Example:Health score 72% is below this campaign's minimum of 80%. - senderEmailId integerExample:
123
CampaignDetailStats
- bouncedLeadsCount integer
- contactedLeadsCount integer
- emailsSentCount integer
- leadsRespondedPositivelyCount integer
- repliedLeadsCount integer
CampaignEmailCounts
- blocked integerExample:
2 - bounced integerExample:
20 - canceled integerExample:
15 - catchAll integerExample:
12 - deferred integerExample:
5 - delivered integerExample:
280 - draft integerExample:
20 - dropped integerExample:
3 - errorOnSent integerExample:
5 - followUp integerExample:
50 - followUpCanceled integerExample:
10 - followUpDraft integerExample:
10 - invalid integerExample:
8 - pending integerExample:
100 - replied integerExample:
50 - scheduled integerExample:
500 - sent integerExample:
300 - spamReport integerExample:
2 - total integerExample:
1000 - waitingForReschedule integerExample:
5
CampaignListItem
- createdAt string
- emoji string
- flow string
- id integer
- name string
- stats CampaignStats
- status string
- updatedAt string
CampaignMinimumHealth
- accounts array of CampaignAccountHealth
Accounts are the campaign's connected email accounts, the held-back ones first.
- allHeldBack boolean
AllHeldBack is true when a minimum is set and every connected account is below it, so the campaign sends nothing.
Example:false - heldBackCount integer
HeldBackCount is how many of those accounts the minimum holds back.
Example:1 - message string
Message says what the minimum is doing, in plain words. Null when it holds nothing back.
Example:1 of 3 email accounts is below this campaign's minimum health score of 80% and sends nothing in it until its score is back up. - minimumHealthScore integer
MinimumHealthScore is the campaign's minimum, 1-100. Null when it has none.
Example:80
CampaignSchedule
- cronSchedule stringExample:
0 9 * * 1-5 - daysSchedule string
DaysSchedule is the sending days as one comma-separated string of weekday numbers, where Sunday is 0: "1,2,3,4,5" is Monday to Friday. It is not an array. Empty until days are set with PUT /campaigns/{id}/schedule.
Example:1,2,3,4,5 - endSchedule stringExample:
17:00 - everySchedule integerExample:
30 - maximumTimeBetweenEmails integerExample:
15 - minimumTimeBetweenEmails integerExample:
5 - startSchedule stringExample:
09:00
CampaignSettings
- allowNonBusinessEmails booleanExample:
false - dailyLimit integer
DailyLimit is the campaign-level cap on total emails scheduled per calendar day (campaign timezone). null means no campaign-level cap.
Example:200 - ignoreOutOfOfficeReplies booleanExample:
true - isEnabledCatchallValidated booleanExample:
true - isEnabledEmailVerifier booleanExample:
false - isEnabledIgnoreHardBouncedLeads booleanExample:
true - isEnabledIgnoreLeadsWhoAlreadyResponded booleanExample:
true - isEnabledLlm booleanExample:
true - isEnabledSkipLeadIfAlreadyExists booleanExample:
false - isEnabledStopFollowUpsAcrossCampaigns booleanExample:
true - isEnabledStopFollowUpsForSameCompany booleanExample:
false - isEnabledStopFollowUpsOnReply booleanExample:
true - maximumSendingLimitPerSenderEmail integerExample:
50 - maximumSendingLimitPerSenderEmailVariation integerExample:
10 - minimumHealthScore integer
MinimumHealthScore is the lowest email account health score that may send in this campaign, 1-100. null means no minimum.
Example:80
CampaignStats
- bouncedLeadsCount integer
- contactedLeadsCount integer
- emailsSentCount integer
- leadsRespondedPositivelyCount integer
- repliedLeadsCount integer
- senderEmailsConnected integer
- senderEmailsDisconnected integer
- senderEmailsTotal integer
CampaignStatsDay
- date stringExample:
2026-07-01 - positive integerExample:
1 - replied integerExample:
3 - sent integerExample:
40
CampaignStatsStep
- index integerExample:
0 - replied integerExample:
45 - sent integerExample:
600
CampaignStatsTotals
- bounced integerExample:
14 - meetings integerExample:
7 - positive integerExample:
32 - replied integerExample:
85 - sent integerExample:
1200
CampaignStatsVariant
- label stringExample:
A - positive integerExample:
18 - replied integerExample:
45 - sent integerExample:
600
CancelEmailVerificationJobResponse
- message stringExample:
job canceled
CheckDfyDomainResponse
- available booleanExample:
true - domain stringExample:
acme-outreach.com - price numberExample:
13.99 - reason string
Reason says why the domain cannot be bought, in words that can be shown to a person. Empty when available is true.
Example:That domain is already registered. - tld stringExample:
com - unconfirmed boolean
Unconfirmed is true when we could not get an answer at all rather than the answer "no". Do not report these as taken; offer a retry.
Example:false
CheckDfyDomainsRequest
- domains array of string requiredExample:
["acme-outreach.com","acme-outreach.org"]
CheckDfyDomainsResponse
- domains array of CheckDfyDomainResponse
ConnectionHistoryItem
- campaignId integerExample:
10 - createdAt stringExample:
2024-01-15T10:30:00Z - disconnectionReason stringExample:
token_expired - errorCode stringExample:
AUTH_FAILED - errorMessage stringExample:
Token has expired - eventType stringExample:
disconnected - id integerExample:
456 - userId integerExample:
5
ConnectSenderEmailRequest
- email string required
- firstName stringAt most 255 characters
- imapServerUrl string required
ImapServerUrl and SmtpServerUrl accept the provider's host, optionally with a port, for example "imap.fastmail.com:993".
At least 1 characters - lastName stringAt most 255 characters
- loginString string
LoginString defaults to the email address when omitted, which is what most providers expect.
- password string requiredAt least 1 characters
- smtpServerUrl string requiredAt least 1 characters
ConnectSenderEmailResponse
- message stringExample:
sender email connected successfully - senderEmail SenderEmailResponse
ConversationItem
- body stringExample:
Hi Jane, I noticed that... - campaignId integerExample:
12 - createdAt stringExample:
2026-07-30T08:55:00Z - direction string
Direction is "inbound" (received from the prospect) or "outbound" (sent, scheduled, or drafted by the workspace).
Example:outbound - fromAddress stringExample:
jane@prospect.com - id integerExample:
456 - isDraft boolean
IsDraft marks unsent drafts (status draft or followup_draft), including AI-suggested replies awaiting human review. An AI reply draft (campaignId null) can be edited with PUT /reply-drafts/{id} and sent with POST /reply-drafts/{id}/send, using this id. Drafts that belong to a campaign cannot be sent this way.
Example:false - responseCategory string
ResponseCategory is set on categorized inbound emails and null everywhere else.
Example:interested - sentAt string
SentAt is the scheduled or actual send time and null when the email has none (e.g. an AI draft that was never scheduled).
Example:2026-07-30T09:00:00Z - status stringExample:
sent - subject stringExample:
Quick question - threadId stringExample:
19842fa1b2c3d4e5
CopilotICP
- companySizes array of string
- icpName stringExample:
Mid-market SaaS RevOps leaders - industries array of string
- personas array of CopilotPersona
- seniorities array of string
- suggestedSalesNavKeywords array of string
- summary string
- titles array of string
CopilotLaunchRequest
- icp CopilotICP
ICP is optional and carried through for reference only.
- name string required
Name is the campaign name.
Example:Acme outbound Q3 - salesNavData string
SalesNavData is the optional base64 browser-extension payload that carries the LinkedIn session required to actually run the search. When omitted the lead engine cannot authenticate to LinkedIn (see docs), so provide it to start real extraction. It needs SalesNavSearchURL.
- salesNavSearchUrl string
SalesNavSearchURL is the optional LinkedIn Sales Navigator search URL the lead engine should extract leads from. Leave it out to create the draft with its emails only and add leads from Lead Finder or a CSV upload. It is required when SalesNavData is given.
Example:https://www.linkedin.com/sales/search/people?... Sequence is the cold-email sequence to seed the draft campaign with.
CopilotLaunchResponse
- campaignId integerExample:
1234 - jobId stringExample:
5678 - message stringExample:
draft campaign created; lead finding started - status stringExample:
draft
CopilotPersona
- seniority stringExample:
VP - title stringExample:
VP of Sales
CopilotPlanRequest
- context string
Context is optional extra guidance from the caller (e.g. "we sell to dentists in the US").
Example:we sell to dental clinics in the US - description string
Description is what the company sells and to whom, in its own words. When given, the plan is built from it and the website is not read: send it when the website shows a placeholder page (the 422 answer).
Example:Bookkeeping and payroll for independent restaurants - website string required
Website is the company homepage to analyse (with or without scheme).
Example:https://acme.com
CopilotPlanResponse
- icp CopilotICP
- suggestedSequence array of CopilotSequenceStep
CopilotSequenceStep
- body string requiredExample:
Hi {first_name}, ... - followUpAfter integer
FollowUpAfter is the number of days after the previous step. 0 for the initial email; 1-30 for follow-ups.
Example:3 - subject string requiredExample:
quick question about {company_name}
CreateCampaignRequest
- allowNonBusinessEmails boolean
- dailyLimit integer
DailyLimit caps the total emails (initial + follow-ups) this campaign may schedule per calendar day in the campaign timezone. Omit for no campaign-level cap; per-inbox limits still apply either way.
Minimum 1. Maximum 10000 - emoji stringAt least 1 characters. At most 10 characters
- flow string
Flow defaults to multiple_leads_scheduled, which is what the app creates, so a campaign made through the API behaves identically to one made in the UI. The api flow skips lead validation and the processing-leads guard at launch; pass it only if you want that.
One of: "multiple_leads_scheduled", "api" - ignoreOutOfOfficeReplies boolean
- isEnabledCatchallValidated boolean
- isEnabledEmailVerifier boolean
- isEnabledIgnoreHardBouncedLeads boolean
- isEnabledIgnoreLeadsWhoAlreadyResponded boolean
- isEnabledLlm boolean
Settings - all optional, mirroring UpdateCampaignRequest
- isEnabledSkipLeadIfAlreadyExists boolean
- isEnabledStopFollowUpsForSameCompany boolean
- isEnabledStopFollowUpsOnReply boolean
- maximumSendingLimitPerSenderEmail integerMinimum 1. Maximum 10000
- maximumSendingLimitPerSenderEmailVariation integerMinimum 0. Maximum 100
- maximumTimeBetweenEmails integerMinimum 2. Maximum 30
- minimumHealthScore integer
MinimumHealthScore, 1-100, is the lowest email account health score (see healthScore on the sender emails) that may send in this campaign. An account below it, or with no score yet, sends nothing here, first emails and follow-ups alike, until its score is back at or above it; its conversations wait for it and never move to another account. Omit or send 0 for no minimum.
Minimum 0. Maximum 100. Example:80 - minimumTimeBetweenEmails integerMinimum 2. Maximum 30
- name string requiredAt least 1 characters. At most 255 characters
- timezone string
CreateCampaignResponse
- campaign CreatedCampaign
- message stringExample:
campaign created successfully
CreatedApiKey
- expiresAt string
ExpiresAt is set when the key expires: it inherits the calling key's own expiry, so a temporary key never mints a permanent one. Null for keys minted by a non-expiring key.
Example:2026-09-07T12:00:00Z - fullKey stringExample:
run_abc12345_... - id integerExample:
12 - name stringExample:
Acme Outbound key - scopes array of stringExample:
["read","read_write"]
CreatedCampaign
- createdAt stringExample:
2024-01-15T10:30:00Z - emoji stringExample:
📥 - flow stringExample:
multiple_leads_scheduled - id integerExample:
8589949820 - name stringExample:
RB2B High Intent - status stringExample:
draft - timezone stringExample:
America/New_York - updatedAt stringExample:
2024-01-15T10:30:00Z
CreateDfyOrderRequest
- domains array of DfyDomainInput
- forwardingDomain string
ForwardingDomain is where the purchased domains redirect visitors.
Example:acme.com - mailboxes array of DfyMailboxInput
CreatedLead
- email stringExample:
john.doe@example.com - id integerExample:
123
CreateEmailVerificationJobRequest
- emails array of string required
Emails are the addresses to verify. Duplicates are removed before anything is charged, and syntactically invalid entries are returned in invalid_emails rather than billed.
Example:["ada@example.com","grace@example.com"] - name string required
Name is what the job is called in the app. Required.
Example:Q3 conference list
CreateEmailVerificationJobResponse
- duplicate_rows integer
DuplicateRows is how many repeats were removed. Each one would have been a second paid check for an answer already bought.
Example:12 - estimate_high_usd number
EstimateHighUsd assumes every address runs both providers. This is the common case and the number to plan against.
Example:8.5 - estimate_low_usd number
EstimateLowUsd assumes every address settles on the first provider.
Example:4.25 - id string
ID of the created job.
Example:1234 - invalid_emails array of string
InvalidEmails are the submitted entries that are not addresses at all. They were not charged for and are not in the job.
- total integer
Total is how many addresses were accepted, after removing duplicates and unparseable entries.
Example:2500
CreateICPRequest
- companySizes array of string
- industries array of string
- keywords array of string
- locations array of string
- makePrimary boolean
MakePrimary promotes this profile to the workspace's active one, demoting any existing primary.
- name string requiredExample:
Mid-market SaaS RevOps leaders - seniorities array of string
- summary string
Summary is one to three sentences describing who the workspace sells to.
- titles array of string
CreateLeadsResponse
- count integerExample:
5 - leads array of CreatedLead
- message stringExample:
leads processed successfully
CreateOrUpdateLeadsRequest
- campaignId integer
- At least 1 item. At most 1,000 items
CreateWorkspaceApiKeyRequest
- name string
Name shown in the app's API key list. Defaults to "<workspace name> key". Trimmed; up to 60 characters.
Example:VoiceDrop outbound key - readOnly boolean
ReadOnly mints a key that can call GET routes and four POSTs that buy and send nothing (/r/audience/size, /r/setup/ping, /r/dfy/domains/check and /r/lead-finder/searches), and nothing else. Defaults to false, which mints a read+write key.
Example:false
CreateWorkspaceApiKeyResponse
- apiKey CreatedApiKey
- note string
Note reminds integrators that fullKey is not retrievable later.
Example:Store apiKey.fullKey now: it cannot be retrieved again. - workspace WorkspaceItem
CreateWorkspaceRequest
- generateApiKey boolean
GenerateApiKey mints a read+write API key bound to the new workspace. Defaults to true; pass false to create the workspace only.
Example:true - name string required
Name of the new workspace. Trimmed; 1-60 characters.
Example:Acme Outbound
CreateWorkspaceResponse
- apiKey CreatedApiKey
ApiKey is null when generateApiKey was false.
- note string
Note reminds integrators that fullKey is not retrievable later.
Example:Store apiKey.fullKey now: it cannot be retrieved again. - workspace WorkspaceItem
CreditBalanceResponse
- available integerExample:
1500 - lifetimeGranted integerExample:
5000 - lifetimeUsed integerExample:
3400 - monthlyGrant integerExample:
2000 - reserved integerExample:
100 - unlimited boolean
Unlimited is true when this workspace's credits are free: every credit action goes through without spending available, nothing is refused for lack of credits, and POST /credits/purchase is refused (code credits_free) because there is nothing to buy.
Example:false
CreditTransactionItem
- amount integer
Amount is the signed credit delta: negative for spend, positive for grants and refunds.
Example:2000 - balanceAfter integer
BalanceAfter is the available balance immediately after this entry.
Example:2000 - createdAt stringExample:
2026-07-01T10:30:00Z - description stringExample:
Monthly plan credits - free boolean
Free is true for an entry written while this workspace's credits were free. Its amount is what the action would have cost, no credits moved, and balanceAfter is the balance it found.
Example:false - id integerExample:
42 - kind string
Kind is the movement type: grant, topup, reserve, commit, refund, expire or adjustment.
Example:grant - reason string
Reason is what the credits were spent on or granted for.
Example:monthly_grant - reference string
Reference correlates the entry to what caused it, e.g. 'prospect_search:123'.
DeleteCampaignResponse
- id integerExample:
123 - message stringExample:
campaign deleted successfully
DeleteICPResponse
- success booleanExample:
true
DeleteLeadResponse
- id integerExample:
123 - message stringExample:
lead deleted successfully
DeleteWebhookResponse
- id integerExample:
123 - message stringExample:
webhook deleted successfully
DetachCampaignSenderResponse
- campaignId integerExample:
10 - detached boolean
Detached is false when the sender email was not attached to the campaign (the call is idempotent and does nothing in that case).
Example:true - message stringExample:
sender email detached successfully - senderEmailIds array of integer
SenderEmailIDs lists every sender email still attached to the campaign after this call.
Example:[2,3]
DfyDomainInput
- domainName string requiredExample:
acme-mail.com
DfyDomainSuggestion
- available booleanExample:
true - domain stringExample:
acme-mail.com - price numberExample:
13.99 - tld stringExample:
com
DfyMailboxInput
- domainName string requiredExample:
acme-mail.com - firstName string requiredExample:
John - lastName string requiredExample:
Doe - profilePicture string
- username string requiredExample:
john
DfyOrderConflictResponse
- error stringExample:
acme-mail.com is already on order 9. - existingOrderId integerExample:
9
DfyOrderResponse
- completedAt string
CompletedAt is when the order completed (RFC3339), or null.
Example:2026-07-01T10:35:00Z - cost_breakdown object
- createdAt stringExample:
2026-07-01T10:30:00Z - domains object
- externalOrderId stringExample:
cmr_order_456 - failureReason string
- forwardingDomain object
- id integerExample:
9 - mailboxes object
- processedAt string
ProcessedAt is when the order started processing (RFC3339), or null.
Example:2026-07-01T10:30:00Z - status string
Status is one of: created, pending_approval, processing, completed, failed, partially_completed, canceled.
Example:created
DfyOrderResult
- order DfyOrderResponse
DkimCheckResult
- checkedSelectors array of string
CheckedSelectors is every selector name looked up, in the order tried.
- issues array of string
- record stringExample:
v=DKIM1; k=rsa; p=MIGfMA0GCSq - selector string
Selector is the DKIM selector the record was found under, null when no record was found.
Example:google - selectorSource string
SelectorSource says where selector came from: SIGNATURE (read off the DKIM-Signature of this domain's warm-up mail), CUSTOMER (set in the app) or COMMON (a provider's default name). Null when none was found.
Example:COMMON - status string
Status is one of OK, WARNING, MISSING, ERROR. MISSING means no key was found under the selectors in checkedSelectors: a provider that picks its own selector name can have DKIM working while this says MISSING. ERROR means a DNS lookup timed out; try again.
Example:OK
DmarcCheckResult
- issues array of string
- policy string
Policy is the record's p= tag, null when no record was found.
Example:reject - record stringExample:
v=DMARC1; p=reject; rua=mailto:dmarc@example.com - status string
Status is one of OK, WARNING, MISSING, ERROR.
Example:OK
EmailVerificationErrorResponse
- allowance integer
Allowance is set on trial_allowance_exceeded: how many addresses a free trial may submit in total.
Example:100 - available_usd number
AvailableUsd is set on insufficient_allowance: what is left this month.
Example:2.1 - error string
Error is the machine-readable code: insufficient_allowance, trial_allowance_exceeded, subscription_not_active, no_active_subscription or invalid_request.
Example:insufficient_allowance - message string
Message is the human-readable explanation.
Example:This job needs $8.50 of monthly verification allowance and $2.10 is left. - needed_usd number
NeededUsd is set on insufficient_allowance: what the job would cost at the ceiling.
Example:8.5 - remaining integer
Remaining is set on trial_allowance_exceeded: how many of those addresses are still available. Zero is a real value, so it is a pointer.
Example:25
EmailVerificationJobResponse
- catchall integer
Catchall accepts everything at the domain, so deliverability is likely but not proven.
Example:400 - end_time string
EndTime in RFC3339, zero while the job is still running.
Example:2026-09-10T09:14:00Z - error_code string
ErrorCode is empty on a healthy job. monthly_limit_reached means the allowance ran out and the remaining addresses came back unknown rather than missing; they are still in the download, marked.
- id stringExample:
1234 - invalid integer
Invalid will bounce.
Example:280 - meter_events integer
MeterEvents is what the job has billed so far. Every check runs up to two providers and each one that answers is one event, so an address costs one event or two.
Example:3100 - name string
Name the job was created with.
Example:Q3 conference list - processed integer
Processed is how many have a verdict yet.
Example:1800 - spent_usd number
SpentUsd is MeterEvents priced at the meter rate: what this job adds to the invoice, not an estimate.
Example:5.27 - start_time string
StartTime in RFC3339.
Example:2026-09-10T09:00:00Z - state string
State is pending, running, done, failed or canceled.
Example:running - total integer
Total addresses in the job.
Example:2500 - unknown integer
Unknown got no verdict, so it was NOT billed. Usually a provider failure or the workspace's monthly verification allowance running out mid-job, in which case error_code says which.
Example:20 - valid integer
Valid is deliverable.
Example:1100
EmailVerificationRatesResponse
- first_check_usd number
What one first check costs.
Example:0.0017 - per_address_ceiling_usd number
PerAddressCeilingUsd is the most an address can cost: both providers answering. This is the common case, so budget against this one.
Example:0.0034 - per_address_floor_usd number
PerAddressFloorUsd is the least an address can cost: the first provider alone, which happens when it rejects the address outright.
Example:0.0017 - second_check_usd number
What one second check costs.
Example:0.0017
EmailVerificationRecordResponse
- email stringExample:
ada@example.com - error string
Error is set when the address could not be answered.
- first_check_result string
What the first check said.
Example:valid - id stringExample:
98765 - meter_events integer
MeterEvents is what this address billed: 0, 1 or 2.
Example:2 - result string
Result is valid, catchall_validated, invalid or unknown. The same four values a campaign's send-time gate uses, so an address checked here and one checked inside a campaign answer the same.
Example:valid - second_check_result string
What the second check said. unknown means it never ran, which is what happens when the first check rejected the address outright, and nothing was billed for it.
Example:valid - status string
Status is done, failed, skipped or pending.
Example:done - verified_at string
VerifiedAt in RFC3339.
Example:2026-09-10T09:02:11Z
ErrorBillingProfileNotFound
- error stringExample:
no billing profile set for this workspace
ErrorCampaignNotFound
- error stringExample:
campaign not found
ErrorCampaignValidation
- error stringExample:
campaign schedule days not configured
ErrorFailedToCheckDNS
- error stringExample:
failed to check dns records
ErrorFailedToConnectSenderEmail
- error stringExample:
failed to connect sender email
ErrorFailedToCreateCampaign
- error stringExample:
failed to create campaign
ErrorFailedToCreateLeads
- error stringExample:
failed to create leads
ErrorFailedToDeleteCampaign
- error stringExample:
failed to delete campaign
ErrorFailedToDeleteLead
- error stringExample:
failed to delete lead
ErrorFailedToDeleteWebhook
- error stringExample:
failed to delete webhook
ErrorFailedToGetWarmupSettings
- error stringExample:
failed to get warm-up settings
ErrorFailedToLaunchCampaign
- error stringExample:
failed to launch/resume campaign
ErrorFailedToMoveLead
- error stringExample:
failed to move lead
ErrorFailedToPauseCampaign
- error stringExample:
failed to pause campaign
ErrorFailedToRegisterWebhook
- error stringExample:
failed to register webhook
ErrorFailedToReplaceSequence
- error stringExample:
failed to replace campaign sequence
ErrorFailedToRetrieveLeads
- error stringExample:
failed to retrieve leads
ErrorFailedToRetrieveSequence
- error stringExample:
failed to retrieve campaign sequence
ErrorFailedToUpdateCampaign
- error stringExample:
failed to update campaign
ErrorFailedToUpdateLead
- error stringExample:
failed to update lead
ErrorFailedToUpdateSenderEmail
- error stringExample:
failed to update sender email
ErrorFailedToUpdateWarmupSettings
- error stringExample:
failed to update warm-up settings
ErrorFailedToUpdateWebhook
- error stringExample:
failed to update webhook
ErrorForbidden
- error stringExample:
forbidden
ErrorInvalidCampaignID
- error stringExample:
invalid campaign ID
ErrorInvalidCategory
- error stringExample:
invalid category, must be one of: interested, not_interested, bounced, out_of_office, delivery_incomplete, meeting_booked
ErrorInvalidLeadID
- error stringExample:
invalid lead ID
ErrorInvalidRequest
- error stringExample:
invalid request body
ErrorInvalidSenderEmailAddress
- error stringExample:
invalid email address. You can only connect business email accounts (name@company.com)
ErrorInvalidSenderEmailID
- error stringExample:
invalid sender email ID
ErrorInvalidSequence
- error stringExample:
the first step must have a delayDays of 0
ErrorInvalidWarmupSettings
- error stringExample:
startLimit (50) cannot be higher than capLimit (40)
ErrorInvalidWebhookID
- error stringExample:
invalid webhook ID
ErrorInvalidWebhookType
- error stringExample:
invalid webhook type. Valid values: EmailSent, EmailReply, EmailBounce, EmailUnsubscribe, LeadCategoryUpdate, LeadCreated, CampaignStatusChanged, CreditBalanceLow, AutopilotRunStatusChanged, DfyOrderCompleted
ErrorNotFound
- error stringExample:
lead not found
ErrorResponse
- error stringExample:
error message
ErrorSenderEmailAlreadyConnected
- error stringExample:
this email address is already connected to another workspace
ErrorSenderEmailNoDomain
- error stringExample:
sender email has no valid domain
ErrorSenderEmailNotConnected
- error stringExample:
sender emails not connected: 42
ErrorSenderEmailNotFound
- error stringExample:
sender email not found
ErrorSenderEmailPlanLimit
- error stringExample:
your plan does not allow connecting another sender email
ErrorUnsupportedCampaignFlow
- error stringExample:
campaign flow does not support sequences. Valid flows: multiple_leads_scheduled, api
ErrorWarmupSettingsConflict
- error stringExample:
warm-up is off for this mailbox. Send enabled: true in the same request to switch it on with these settings
ErrorWebhookNotFound
- error stringExample:
webhook not found
GetCampaignResponse
- createdAt stringExample:
2024-01-10T10:30:00Z - emails CampaignEmailCounts
- emoji stringExample:
🚀 - flow stringExample:
multiple_leads_scheduled - id integerExample:
123 - launchAt string
"0001-01-01T00:00:00Z" until the campaign is first launched.
Example:2024-01-15T09:00:00Z - minimumHealth CampaignMinimumHealth
MinimumHealth is what the campaign's minimum health score is doing: each connected account's score, which accounts it holds back and why. Null only when the scores could not be read this time.
- name stringExample:
Q1 Outreach Campaign - schedule CampaignSchedule
- sendAt string
"0001-01-01T00:00:00Z" while not set.
Example:2024-01-15T10:00:00Z - settings CampaignSettings
- stats CampaignDetailStats
- status stringExample:
running - timezone stringExample:
America/New_York - updatedAt stringExample:
2024-01-15T10:30:00Z
GetCampaignStatsResponse
- campaignId integerExample:
123 - daily array of CampaignStatsDay
- steps array of CampaignStatsStep
- totals CampaignStatsTotals
- variants array of CampaignStatsVariant
GetLeadConversationResponse
- items array of ConversationItem
- leadId integerExample:
123 - total integerExample:
5
GetLeadResponse
- company stringExample:
Acme Corp - createdAt stringExample:
2024-01-15T10:30:00Z - customVariables map of object
CustomVariables are the lead's merge tags beyond the named fields. Always present; null or empty when the lead has none.
- email stringExample:
john.doe@example.com - firstName stringExample:
John - id integerExample:
123 - lastName stringExample:
Doe - linkedin stringExample:
https://linkedin.com/in/johndoe - meetingBookedAt string
MeetingBookedAt is when a meeting was explicitly marked as booked with this lead (see POST /leads/{id}/meeting) and null while no meeting is marked.
Example:2026-07-30T14:05:00Z - phone stringExample:
+1234567890 - tag string
Tag is the lead's engagement category (interested, not_interested, bounced, out_of_office, delivery_incomplete, meeting_booked) and null while the lead has never been categorized.
Example:interested - title stringExample:
Software Engineer - updatedAt stringExample:
2024-01-15T10:30:00Z - website stringExample:
https://example.com
GetSequenceResponse
- campaignId integerExample:
8589949820 - signature stringExample:
<p>Robby Frank</p> - steps array of SequenceStep
- total integerExample:
3
ICPPersona
- seniority stringExample:
VP - title stringExample:
VP of Sales
ICPResponse
- audienceSizedAt string
AudienceSizedAt is when the audience size was last refreshed (RFC3339), or null when it has never been sized.
Example:2026-07-01T10:30:00Z - companySizes array of string
- createdAt stringExample:
2026-07-01T10:30:00Z - estimatedAudienceSize integerExample:
12345 - id integerExample:
12 - industries array of string
- isGenerated boolean
IsGenerated is true while the profile is exactly what the AI proposed; any human edit clears it.
- isPrimary boolean
IsPrimary marks the workspace's active profile. At most one per space.
- keywords array of string
- locations array of string
- name stringExample:
Mid-market SaaS RevOps leaders - personas array of ICPPersona
- seniorities array of string
- sourceWebsite stringExample:
https://acme.com - summary string
- titles array of string
ICPResult
- icp ICPResponse
InboxPlacementDailyStatResponse
- date string
Date is the UTC day.
- inbox integerExample:
180 - inboxRate integerExample:
81 - missing integerExample:
4 - promotions integerExample:
12 - runs integerExample:
2 - spam integerExample:
24
InboxPlacementFindingResponse
- action string
Action is what to do about it. Every finding has one: a report that only says what is wrong makes the reader's day worse without improving their delivery.
Example:Publish a DMARC record. Start with p=none to observe, then move to quarantine. - detail stringExample:
acme.com publishes no DMARC record. - senderAddress stringExample:
tom@acme.com - senderEmailId integerExample:
3 - severity string
Severity is critical, warning or info.
Example:critical - title stringExample:
DMARC record missing
InboxPlacementForbiddenResponse
- code string
Code is inbox_placement_required or inbox_placement_hypergrowth_required.
Example:inbox_placement_required - error string
Error is written for a person to read and can be shown as-is.
Example:Inbox Placement is a paid add-on. Add it in Settings to test where your emails land. - tier string
Tier is the tier the workspace currently holds: none, growth or hypergrowth.
Example:none
InboxPlacementInsightsResponse
- findings array of InboxPlacementFindingResponse
- inboxRate integerExample:
80 - mailboxesAtRisk integerExample:
2 - mailboxesChecked integerExample:
9 - missingRate integerExample:
3 - providerBreakdown array of InboxPlacementProviderResponse
- runsInWindow integerExample:
14 - spamRate integerExample:
12 - windowDays integer
WindowDays is how far back the rates below were computed over.
Example:30
InboxPlacementListResponse
- count integerExample:
14 - items array of InboxPlacementRunResponse
InboxPlacementProviderResponse
- inbox integerExample:
14 - inboxRate integerExample:
77 - label stringExample:
Gmail / Google Workspace - missing integerExample:
0 - promotions integerExample:
2 - provider stringExample:
google - seeds integerExample:
18 - spam integerExample:
2
InboxPlacementResultListResponse
- count integerExample:
120 - items array of InboxPlacementResultResponse
- runId integerExample:
481
InboxPlacementResultResponse
- deliverySeconds integer
DeliverySeconds is how long the probe took to appear. -1 when never detected. A slow delivery is itself a signal: greylisting and throttling both show up here before they show up in a placement number.
Example:46 - detectedAt string
- error string
- id integerExample:
90211 - placement string
Placement is pending, inbox, spam, promotions, social, updates, missing or failed.
Example:inbox - seedAddress stringExample:
seed-104@example.net - seedProvider stringExample:
google - senderAddress stringExample:
tom@acme.com - sentAt string
InboxPlacementRunDetailResponse
- completedAt string
- createdAt string
- error string
- failed integerExample:
0 - id integerExample:
481 - inbox integerExample:
96 - inboxRate integer
InboxRate is the whole-percentage share of SCORED probes that reached the primary inbox. -1 when nothing has been scored.
Example:80 - messagesExpected integerExample:
120 - messagesSent integerExample:
120 - missing integer
Missing counts probes never found in any folder, which usually means a silent block. Reported apart from spam because it is a worse problem with a different fix.
Example:4 - promotions integer
Promotions counts every Gmail category tab: promotions, social and updates. Delivered, but filtered away from the reader.
Example:8 - providerBreakdown array of InboxPlacementProviderResponse
- seedsTargeted integerExample:
40 - senderBreakdown array of InboxPlacementSenderResponse
- sendersTargeted integerExample:
3 - spam integerExample:
12 - spamScore integer
SpamScore is the content spam score in tenths of a point, so 47 is 4.7. -1 when not scored.
Example:12 - spamScoreRules array of InboxPlacementSpamRuleResponse
- startedAt string
- status string
Status is pending, sending, collecting, completed, failed or cancelled. Counters are only final once status is completed.
Example:completed - testId integerExample:
12 - trigger string
Trigger is manual or scheduled.
Example:scheduled
InboxPlacementRunResponse
- completedAt string
- createdAt string
- error string
- failed integerExample:
0 - id integerExample:
481 - inbox integerExample:
96 - inboxRate integer
InboxRate is the whole-percentage share of SCORED probes that reached the primary inbox. -1 when nothing has been scored.
Example:80 - messagesExpected integerExample:
120 - messagesSent integerExample:
120 - missing integer
Missing counts probes never found in any folder, which usually means a silent block. Reported apart from spam because it is a worse problem with a different fix.
Example:4 - promotions integer
Promotions counts every Gmail category tab: promotions, social and updates. Delivered, but filtered away from the reader.
Example:8 - seedsTargeted integerExample:
40 - sendersTargeted integerExample:
3 - spam integerExample:
12 - spamScore integer
SpamScore is the content spam score in tenths of a point, so 47 is 4.7. -1 when not scored.
Example:12 - startedAt string
- status string
Status is pending, sending, collecting, completed, failed or cancelled. Counters are only final once status is completed.
Example:completed - testId integerExample:
12 - trigger string
Trigger is manual or scheduled.
Example:scheduled
InboxPlacementSenderResponse
- failed integerExample:
0 - inbox integerExample:
31 - inboxRate integerExample:
77 - missing integerExample:
1 - promotions integerExample:
2 - senderAddress stringExample:
tom@acme.com - senderEmailId integerExample:
3 - sent integerExample:
40 - spam integerExample:
6
InboxPlacementSpamRuleResponse
- advice stringExample:
Write the subject in sentence case. - description stringExample:
The subject line is in capitals. - name stringExample:
SUBJECT_ALL_CAPS - points integer
Points is the rule's cost in tenths of a point, so 15 is 1.5 points.
Example:15
InboxPlacementStatsByDateResponse
- days array of InboxPlacementDailyStatResponse
- from string
- to string
InboxPlacementTestListResponse
- count integerExample:
3 - items array of InboxPlacementTestResponse
InboxPlacementTestResponse
- createdAt string
- id integerExample:
12 - intervalHours integer
IntervalHours is how often a recurring test repeats. Null for one-time.
Example:24 - isPaused booleanExample:
false - kind string
Kind is one_time or recurring.
Example:recurring - lastRunAt string
- name stringExample:
Q3 outbound - main sequence - nextRunAt string
- seedProviders array of string
SeedProviders restricts the seed panel. Empty means every provider.
Example:["google","microsoft"] - senderEmailIds array of integer
SenderEmailIDs are the mailboxes the test sends from.
Example:[1,2,3] - subject stringExample:
Question about your onboarding flow
InstantlyAccount
- dailyLimit integerExample:
30 - email stringExample:
jane@acme.com - firstName stringExample:
Jane - lastName stringExample:
Doe - provider string
google | microsoft | other
Example:google - status integerExample:
1
InstantlyAccountsRequest
- apiKey string required
APIKey is the caller's Instantly.ai API key.
Example:insta_xxx
InstantlyAccountsResponse
- accounts array of InstantlyAccount
- imapCsvTemplate string
ImapCsvTemplate is a ready-to-fill CSV (one row per account, password column empty) for the bulk IMAP/SMTP connection flow.
InstantlyImportRequest
- apiKey string required
APIKey is the caller's Instantly.ai API key. It is validated with a lightweight call to Instantly before the import job is enqueued.
Example:insta_xxx
InstantlyImportResponse
- jobId stringExample:
9f8b1c2a-1234-4a5b-9c8d-0e1f2a3b4c5d - message stringExample:
instantly import started - status stringExample:
queued
InsufficientCreditsErrorResponse
- code stringExample:
insufficient_credits - error stringExample:
starting this run needs 50 prospect credits and the workspace has 0; buy credits via POST /credits/purchase, then start the run again - have integerExample:
0 - need integerExample:
50
KillAutopilotRunRequest
- reason string
Reason is recorded in the run's audit trail. Trimmed and capped at 200 characters.
Example:customer requested stop
LaunchCampaignResponse
- campaign object
- message stringExample:
campaign launched/resumed successfully
LeadCategoryState
- id integerExample:
123 - meetingBookedAt string
MeetingBookedAt is when the meeting was marked as booked and null while no meeting is marked.
Example:2026-07-30T14:05:00Z - tag string
Tag is the lead's engagement category and null while the lead has never been categorized.
Example:meeting_booked
LeadFinderError
- available integerExample:
10 - cap integer
- count integer
- error string
Error is the machine code: invalid_filters or invalid_request (400), insufficient_credits (402), plan_required (403), not_found or campaign_not_found (404), provider_unavailable or import_running (409), results_expired (410), contact_cap_reached (422), rate_limited or budget_exhausted (429), internal (500).
Example:invalid_filters - field stringExample:
seniorities - importId integer
ImportID is the running import an import_running refusal waits on.
Example:8813 - message string
- needed integerExample:
25 - reason string
Reason details the code. invalid_filters: unknown_value, too_many_values, value_too_long, invalid_domain, mixed_geo_levels, location_needs_country, no_filters, unknown_field or malformed. 429: searches_per_minute, empty_searches, daily_preview_limit, running_imports, daily_import_limit, daily_budget, monthly_budget or fair_use_floor.
Example:unknown_value - retryAfterSeconds integerExample:
30 - value stringExample:
Boss
LeadFinderFilters
- companySizes array of string
- continents array of string
- countries array of string
- creditsPerProspect integer
CreditsPerProspect is what adding one person to a campaign costs, read from the pricing table at request time.
Example:1 - headquartersCountries array of string
- industries array of string
- jobFunctions array of string
- limits LeadFinderLimits
- regions array of string
- revenue array of string
- seniorities array of string
LeadFinderFilterSet
- cities array of stringExample:
["Dublin"] - companyKeywords string
CompanyKeywords is one phrase matched against what the employer does.
- companyName string
CompanyName is one phrase matched against the employer's name.
- companySizes array of string
CompanySizes are headcount bands from GET /lead-finder/filters.
Example:["51 to 200"] - continents array of string
- countries array of string
Countries, Regions and Continents are values from GET /lead-finder/filters, where the person is. Use one of the three at a time.
Example:["Ireland"] - domains array of string
Domains and ExcludeDomains are company domains, up to 1,000 each.
Example:["acme.com"] - excludeCountries array of string
- excludeDomains array of string
- excludeHeadquartersCountries array of string
- excludeIndustries array of string
- excludeJobTitles array of stringExample:
["Intern"] - headquartersCountries array of string
HeadquartersCountries are where the employer is headquartered.
- industries array of string
Industries are values from GET /lead-finder/filters.
Example:["Software Development"] - jobFunctions array of string
JobFunctions are values from GET /lead-finder/filters.
Example:["Sales & Business Development"] - jobTitles array of string
JobTitles are free text, matched as OR terms.
Example:["Head of Sales","VP Sales"] - regions array of string
- revenue array of string
Revenue is revenue bands from GET /lead-finder/filters.
- seniorities array of string
Seniorities are values from GET /lead-finder/filters.
Example:["Director"] - states array of string
States and Cities are free text, matched inside the person's location.
- technologies array of string
Technologies are free text: tools the employer uses.
Example:["HubSpot"]
LeadFinderImport
- added integerExample:
22 - audienceKey string
AudienceKey names the filters the people came from, as on a search.
- campaignId integerExample:
123 - campaignName stringExample:
Irish sales leaders - createdAt string
- creditsPerProspect integerExample:
1 - creditsSpent integer
CreditsSpent is what the import has charged so far. People added while the workspace's credits were free add nothing to it.
Example:22 - endReason string
EndReason says how an import ended: all_selected or requested_reached (finished), audience_exhausted or fetch_limit (a first_n import stopped early), or canceled. A failed import has none; see LastError.
- expired integerExample:
0 - finishedAt string
- importId integerExample:
8812 - lastError string
LastError says why a failed import stopped: insufficient_credits, contact_cap_reached, results_expired, budget_exhausted, provider_blocked, provider_unavailable (the people database was down or in maintenance; start the import again later), rate_limited, invalid_filters, campaign_not_found or internal. A failed import can still have added and charged people.
- mode stringExample:
selected - requested integerExample:
25 - skipReasons map of integer
SkipReasons counts skipped people by reason: already_in_workspace, blocklisted, reveal_returned_no_address, consumer_mailbox, invalid_email or contact_cap_reached.
- skipped integerExample:
3 - startsAt integer
StartsAt is the position in the results a first_n import started from.
Example:201 - status string
Status is running, completed, failed or canceled. Added, CreditsSpent and Status can still change until FinishedAt is set.
Example:completed - topUpOf integer
TopUpOf is set on an import a saved search's weekly top-up started (set up in the app): the saved search's id.
- verification LeadFinderVerification
- verifyEmails booleanExample:
true
LeadFinderImportCreated
- audienceKey string
AudienceKey names the import's filters, as on a search.
- available integer
Available is the wallet's spendable balance when the import started. While the workspace's credits are free (unlimited on GET /credits/balance) it is the workspace's own balance, which the import does not use.
Example:4975 - creditsPerProspect integerExample:
1 - estimatedCredits integer
EstimatedCredits is Requested x CreditsPerProspect, the most this import can cost in credits. Skipped people cost no credits; metered verification is billed separately.
Example:25 - expired integer
Expired counts refs that were no longer stored and were dropped.
Example:0 - importId integerExample:
8812 - requested integer
Requested is how many people the import will try to add.
Example:25 - startsAt integer
StartsAt is the position in the results a first_n import starts from: 1 is the first person. Left out for a selected import.
Example:201 - status stringExample:
running
LeadFinderImportRequest
- campaignId integer
CampaignID is the campaign the people are added to.
Example:123 - count integer
Count is how many people to add, for mode first_n: 1 to 5,000.
Example:200 - filters LeadFinderFilterSet
Filters are the filters to add from, for mode first_n. At least one include filter is required; the rules are those of a search. For mode selected they are optional: the search the refs came from, so the people count towards what those filters have added (progress on a search).
- fromStart boolean
FromStart makes a first_n import start from the top of the results instead of after the last first_n import of the same filters.
Example:false - mode string
Mode is "selected" (add the people named in Refs) or "first_n" (add up to Count people matching Filters who are not in the workspace yet, continuing after the last first_n import of the same filters).
One of: "selected", "first_n". Example:selected - refs array of string
Refs are result refs from searches, for mode selected: 1 to 1,000.
Example:["r_Q2x9LmVwZ3JhY2VIb3BwZX"] - verifyEmails boolean
VerifyEmails checks each address with the paid verification waterfall before it is added: one or two metered checks per address, billed on the next invoice (GET /email-verification/rates), including addresses that turn out invalid. Invalid addresses are skipped and cost no credits; catch-all and unconfirmed ones are added and charged, and so is every address once the monthly verification allowance is used up. Defaults to true.
Example:true
LeadFinderImports
- imports array of LeadFinderImport
LeadFinderLimits
- defaultPageSize integerExample:
25 - maxChipsPerField integerExample:
50 - maxDomainsPerField integerExample:
1000 - maxFirstN integerExample:
5000 - maxPage integerExample:
100 - maxRefsPerImport integerExample:
1000 - maxRunningImports integerExample:
3 - maxSavedSearchName integerExample:
80 - maxSavedSearches integer
MaxSavedSearches and MaxSavedSearchName bound the searches a workspace saves in the app, and TopUpHourUTC is the hour of the day, in UTC, a saved search's weekly top-up runs.
Example:100 - maxValueLength integerExample:
100 - pageSizes array of integerExample:
[25,50] - rowsLeftToday integer
RowsLeftToday is what is left of it this UTC day.
Example:1950 - rowsPerDay integer
RowsPerDay is the account's daily browsing allowance in result rows.
Example:2000 - topUpHourUtc integerExample:
14
LeadFinderPerson
- company LeadFinderPersonCompany
- firstName stringExample:
Grace - inWorkspace boolean
InWorkspace is true for someone Lead Finder added to this workspace whose lead is still there, so adding them again is skipped for free. A person who is a lead from another source shows false; adding them is still skipped and costs nothing.
Example:false - jobFunction stringExample:
Sales & Business Development - lastInitial stringExample:
H - location LeadFinderPersonLocation
- ref string
Ref identifies the person for POST /lead-finder/imports. It stays valid for 60 minutes after the page it came on was last shown.
Example:r_Q2x9LmVwZ3JhY2VIb3BwZX - seniority stringExample:
Director - title stringExample:
Head of Sales
LeadFinderPersonCompany
- industry stringExample:
Software Development - logoUrl string
LogoURL is the company's icon, an image of at most 64 pixels served by this API with no key needed. The URL does not contain the company's domain. It is left out when the company has no website on record, and answers 404 when the website has no icon.
Example:https://api.emailchaser.com/lead-finder/logos/l_2mEuK4r1Xw0pVn8qFh7ZcT5bLd9sYoJ3aGk6 - name stringExample:
Hopper Ltd - revenueBand string
- sizeBand stringExample:
51 to 200
LeadFinderPersonLocation
- city stringExample:
Dublin - country stringExample:
Ireland - state string
LeadFinderProgress
- added integer
Added is how many people they added.
Example:1000 - adds integer
Adds is how many imports there were, selected ones included.
Example:2 - lastAddAt string
LastAddAt is when the latest import from these filters started.
- nextFrom integer
NextFrom is the position in the results (1 is the first person) the next first_n import of these filters starts from.
Example:901 - runningImportId integer
RunningImportID is a first_n import of these filters still running. Another first_n import of the same filters is refused (409 import_running) until it ends.
Example:8813
LeadFinderSearch
- audienceKey string
AudienceKey names the filters: the same picks in any order give the same key. Imports from these filters carry it too.
Example:4f1c0e9a2b7d4c3e8f6a5b1d0c9e8f7a6b5c4d3e2f1a0b9c8d7e6f5a4b3c2d1e - creditsPerProspect integerExample:
1 - error string
Error is set on a failed search: rate_limited, provider_blocked, provider_unavailable (the people database is down or in maintenance; try again later), timeout, invalid_filters, budget_exhausted, expired or internal.
- hasMore booleanExample:
true - maxPage integerExample:
100 - message string
- page integerExample:
1 - pageSize integerExample:
25 - progress LeadFinderProgress
Progress is what earlier imports from these filters did in the workspace. Left out before the first one.
- results array of LeadFinderPerson
Results are the people on this page, masked.
- rowsLeftToday integer
RowsLeftToday is the account's browsing allowance left this UTC day.
Example:1975 - searchId stringExample:
s_c32d55f8dbd501c71bea43ee - status string
Status is running, done or failed.
Example:done - total integer
Total is how many people match; TotalIsExact says whether it is a count or a lower bound, and TotalStatus whether the count has landed (pending, done or failed).
Example:2147 - totalIsExact booleanExample:
true - totalStatus stringExample:
done
LeadFinderSearchRequest
- filters LeadFinderFilterSet
Filters: at least one include filter is required. Enum fields take values from GET /lead-finder/filters. Free-text fields take up to 50 values of up to 100 characters each, and a value holding commas is split into one term per comma. Use only one of countries, regions and continents; states and cities go with countries or on their own. A broken rule is a 400 invalid_filters naming the field, value and reason.
- page integer
Page is 1-based, up to limits.maxPage. Defaults to 1.
Example:1 - pageSize integer
PageSize is 25 (the default) or 50.
Example:25
LeadFinderVerification
- catchAll integerExample:
2 - invalid integerExample:
1 - limitReached integerExample:
0 - unknown integerExample:
0 - valid integerExample:
20
LeadInput
- company string
- customVariables map of object
CustomVariables holds any attribute the eight named fields do not cover, for example the page a visitor landed on. Each key becomes a merge tag usable in email copy as {key}. Keys are matched case-insensitively with spaces treated as underscores, so "Page Visited" and "page_visited" are the same tag. Values are stored as given; non-string values are rendered with their JSON representation at send time.
- email string required
- firstName string
- lastName string
- linkedin string
- middleName string
Saved when the lead is created. Not changed when a lead with this email already exists.
- phone string
- title string
- website string
LeadMeetingResponse
- lead LeadCategoryState
- message stringExample:
meeting marked as booked
LeadResponse
- company stringExample:
Acme Corp - createdAt stringExample:
2024-01-15T10:30:00Z - customVariables map of object
CustomVariables are the lead's merge tags beyond the named fields.
- email stringExample:
john.doe@example.com - firstName stringExample:
John - id integerExample:
123 - lastName stringExample:
Doe - linkedin stringExample:
https://linkedin.com/in/johndoe - meetingBookedAt string
MeetingBookedAt is when a meeting was explicitly marked as booked with this lead (see POST /leads/{id}/meeting) and null while no meeting is marked.
Example:2026-07-30T14:05:00Z - middleName stringExample:
A. - phone stringExample:
+1234567890 - tag string
Tag is the lead's engagement category (interested, not_interested, bounced, out_of_office, delivery_incomplete, meeting_booked) and null while the lead has never been categorized.
Example:interested - title stringExample:
Software Engineer - updatedAt stringExample:
2024-01-15T10:30:00Z - website stringExample:
https://example.com
ListAutopilotRunsResponse
- runs array of AutopilotRunResponse
- total integerExample:
2
ListCampaignsResponse
- campaigns array of CampaignListItem
- hasMore boolean
- limit integer
- page integer
- total integer
ListCreditTransactionsResponse
- total integerExample:
12 - transactions array of CreditTransactionItem
ListDfyOrdersResponse
- orders array of DfyOrderResponse
- total integerExample:
3
ListEmailVerificationJobsResponse
- count integerExample:
3 - next booleanExample:
false - results array of EmailVerificationJobResponse
ListEmailVerificationRecordsResponse
- count integerExample:
2500 - next booleanExample:
true - results array of EmailVerificationRecordResponse
ListICPsResponse
- icps array of ICPResponse
- total integerExample:
3
ListLeadsResponse
- hasMore booleanExample:
true - leads array of LeadResponse
- limit integerExample:
20 - page integerExample:
1 - total integerExample:
42
ListRepliesResponse
- hasMore booleanExample:
true - limit integerExample:
20 - page integerExample:
1 - replies array of ReplyItem
- total integerExample:
42
ListReplyDraftsResponse
- drafts array of ReplyDraftItem
- hasMore booleanExample:
false - limit integerExample:
20 - page integerExample:
1 - total integerExample:
3
ListSenderEmailsResponse
- hasMore boolean
- limit integer
- page integer
- senderEmails array of SenderEmailListItem
- total integer
ListWebhooksResponse
- total integerExample:
2 - webhooks array of WebhookResponse
ListWorkspacesResponse
- total integerExample:
3 - workspaces array of WorkspaceItem
MemberInfo
- created_at string
- email_address string
- name string
MoveLeadRequest
- targetCampaignId integer required
MoveLeadResponse
- leadId integerExample:
123 - message stringExample:
lead moved successfully - sourceCampaignId integerExample:
1 - targetCampaignId integerExample:
2
MxCheckResult
- hosts array of string
Hosts are the domain's mail servers as "preference host", lowest preference (highest priority) first.
Example:["1 aspmx.l.google.com"] - issues array of string
- status string
Status is one of OK, WARNING, MISSING, ERROR.
Example:OK
OutcomesReportCreditReason
- credits integerExample:
120 - reason stringExample:
prospect_reveal
OutcomesReportOutcomes
- meetings integer
Meetings counts leads marked as having booked a meeting in the window.
Example:2 - positiveReplies integer
PositiveReplies counts leads whose reply was categorized as interested.
Example:5 - replies integerExample:
12 - sent integerExample:
400
OutcomesReportResponse
- campaignId integer
CampaignID echoes the campaign filter when one was given. Only the outcome side is narrowed by it; spend stays workspace-level.
Example:12 - costPerMeeting number
CostPerMeeting is total spend divided by meetings, null when there are none.
Example:11.48 - costPerPositive number
CostPerPositive is total spend divided by positive replies, null when there are none.
Example:4.59 - costPerReply number
CostPerReply is total spend divided by replies, null when there are none.
Example:1.91 - outcomes OutcomesReportOutcomes
- since string
Since echoes the window start, or null when the window is open-ended.
Example:2026-07-01T00:00:00Z - spend OutcomesReportSpend
- until string
Until echoes the window end, or null when the window is open-ended.
Example:2026-07-31T00:00:00Z
OutcomesReportSpend
- credits integer
Credits is the total of settled credit debits in the window. In-flight reservations are excluded until they settle.
Example:120 - creditsByReason array of OutcomesReportCreditReason
- creditsUsd number
CreditsUsd values the spent credits at the list price per credit.
Example:3.96 - dfyOrders integer
DfyOrders is how many done-for-you orders were placed in the window (failed and canceled orders are excluded).
Example:1 - dfyOrdersUsd numberExample:
18.99 - totalUsd numberExample:
22.95
PauseCampaignResponse
- campaign object
- message stringExample:
campaign paused successfully
PurchaseCreditsErrorResponse
- code string
Code is machine-readable:
- invalid_request: malformed body or credits outside 1000..10000; fix the request. No charge was made.
- billing_required: the workspace has no active subscription with a saved default card; fix billing in the Emailchaser app, then retry. No charge was made.
- payment_failed: the charge was attempted and refused (declined, expired, insufficient funds); fix the card, then retry. No money moved.
- credits_free: this workspace's credits are free, so there is nothing to buy. No charge was made.
- temporarily_unavailable: the purchase stopped before any charge because a check could not be read. No charge was made; retry shortly.
- purchase_incomplete: the card WAS charged but crediting failed; support is already notified. Do NOT retry - a retry charges again.
- purchase_unconfirmed: the outcome is unknown, or the purchase completed but the new balance could not be read; check /credits/transactions for a stripe_topup entry before retrying.
Example:billing_required - error stringExample:
an active subscription with a saved default payment method is required to buy credits
PurchaseCreditsRequest
- credits integer required
Credits is how many prospect credits to buy. Minimum 1000, maximum 10000 per call.
Example:5000
PurchaseCreditsResponse
- amountUsd number
AmountUsd is what the saved default payment method was charged, in US dollars.
Example:100 - creditsPurchased integer
CreditsPurchased is how many credits were bought and granted.
Example:5000 - newBalance integer
NewBalance is the available credit balance after the grant.
Example:5000
RegisterWebhookRequest
- name string
- type string required
- url string required
RegisterWebhookResponse
- message stringExample:
webhook registered successfully - webhook WebhookResponse
ReplaceSequenceRequest
- signature string
Signature omitted keeps the campaign's current signature; pass an empty string to clear it. Editing one body should not silently drop a signature the caller never asked about.
- At least 1 item. At most 20 items
ReplaceSequenceResponse
- campaignId integerExample:
8589949820 - message stringExample:
campaign sequence replaced successfully - signature stringExample:
<p>Robby Frank</p> - steps array of SequenceStep
- total integerExample:
3
ReplyDraftItem
- body stringExample:
Thanks for getting back to me - would Tuesday work for a quick call? - cc array of stringExample:
["sam@acme.com"] - createdAt stringExample:
2026-07-30T14:06:00Z - id integerExample:
789 - inReplyToEmailId integer
InReplyToEmailID is the inbound reply this draft answers. It is null in the rare case the draft's conversation can no longer be resolved (e.g. the inbound email was deleted).
Example:456 - leadId integerExample:
123 - subject stringExample:
Re: Quick question - to array of string
To and Cc are who the draft goes to when sent, as Reply All does it: the person who wrote the reply in To, and everyone else they addressed (their To and Cc lines, minus your workspace's own mailboxes) in Cc.
Example:["jane@acme.com"]
ReplyItem
- body stringExample:
Sounds interesting - can you send more details? - campaignId integer
CampaignID is null for standalone replies that could not be attributed to a campaign.
Example:12 - fromAddress stringExample:
jane@prospect.com - id integerExample:
456 - leadId integerExample:
123 - receivedAt stringExample:
2026-07-30T14:05:00Z - responseCategory string
ResponseCategory is null while AI categorization is still pending.
Example:interested - subject stringExample:
Re: Quick question - threadId stringExample:
19842fa1b2c3d4e5
SearchDfyDomainsResponse
- domains array of DfyDomainSuggestion
- totalAvailable integerExample:
7 - totalChecked integerExample:
10
SenderEmailDNSResponse
- checkedAt string
CheckedAt is when the live DNS lookups ran (this request).
Example:2026-07-31T10:30:00Z - dkim DkimCheckResult
- dmarc DmarcCheckResult
- domain stringExample:
example.com - senderEmailId integerExample:
123 - spf SpfCheckResult
- warmup SenderEmailWarmupStatus
SenderEmailListItem
- address stringExample:
john@example.com - campaignIds array of integerExample:
[1,2,3] - createdAt stringExample:
2024-01-10T10:30:00Z - currentDailyLimit integerExample:
35 - familyName stringExample:
Doe - givenName stringExample:
John - healthScore integer
Health score 0-100, higher is better: the share of this account's warm-up emails over the last 7 full days that landed in the inbox rather than spam; 90+ is the app's bar for campaigns. It moves daily as warm-up emails land in the inbox (up) or in spam (down). Null while warm-up is off or before 20 warm-up emails were checked. The same number the app shows as the account's health score.
Example:96 - id integerExample:
123 - isConnected booleanExample:
true - manuallyDisconnected booleanExample:
false - maximumSendingsLimitPerDay integerExample:
50 - minimumSendingsLimitPerDay integerExample:
20 - provider stringExample:
google - toggleGradualBuildUp booleanExample:
true - updatedAt stringExample:
2024-01-15T10:30:00Z
SenderEmailResponse
- address stringExample:
john@example.com - campaignIds array of integerExample:
[1,2,3] - connectionHistory array of ConnectionHistoryItem
The account's last 20 connection events, newest first. Null in the response to PUT /sender-emails/{id}.
- createdAt stringExample:
2024-01-10T10:30:00Z - currentDailyLimit integerExample:
35 - errorCode stringExample:
AUTH_FAILED - errorMessage stringExample:
Authentication failed - familyName stringExample:
Doe - givenName stringExample:
John - healthScore integer
Health score 0-100, higher is better: the share of this account's warm-up emails over the last 7 full days that landed in the inbox rather than spam; 90+ is the app's bar for campaigns. It moves daily as warm-up emails land in the inbox (up) or in spam (down). Null while warm-up is off or before 20 warm-up emails were checked. The same number the app shows as the account's health score.
Example:96 - id integerExample:
123 - isConnected booleanExample:
true - lastDisconnectedAt stringExample:
2024-01-15T10:30:00Z - lastReconnectedAt stringExample:
2024-01-16T09:00:00Z - manuallyDisconnected booleanExample:
false - maximumSendingsLimitPerDay integerExample:
50 - minimumSendingsLimitPerDay integerExample:
20 - pictureUrl stringExample:
https://example.com/avatar.jpg - provider stringExample:
google - provisioningStatus stringExample:
complete - signature stringExample:
Best regards, John Doe - toggleGradualBuildUp booleanExample:
true - updatedAt stringExample:
2024-01-15T10:30:00Z
SenderEmailWarmupSettingsResponse
- activatedAt string
ActivatedAt is when warm-up was first switched on; the ramp counts days from here. Null until then.
Example:2026-09-10T12:00:00Z - capLimit integer
CapLimit is the most warm-up emails a day; the ramp stops here.
Example:40 - configured boolean
Configured is true once the mailbox has warm-up settings of its own. While false the mailbox has never been enrolled, and the values below are the defaults that switching warm-up on would use.
Example:true - currentPerDay integer
CurrentPerDay is today's ramp target, 0 while warm-up is off. On a weekend a weekdays-only mailbox still shows its ramp value, although no warm-up emails send that day.
Example:6 - enableReplies boolean
EnableReplies lets warm-up recipients reply, adding reply signals.
Example:false - enabled boolean
Enabled is true while the mailbox is warming.
Example:true - healthScore integer
Health score 0-100, higher is better: the share of this account's warm-up emails over the last 7 full days that landed in the inbox rather than spam; 90+ is the app's bar for campaigns. It moves daily as warm-up emails land in the inbox (up) or in spam (down). Null while warm-up is off or before 20 warm-up emails were checked.
Example:96 - increaseBy integer
IncreaseBy is how many warm-up emails are added each day until CapLimit.
Example:2 - senderEmailId integerExample:
123 - startLimit integer
StartLimit is how many warm-up emails go out on the first day.
Example:2 - timezone string
Timezone is the IANA timezone the warm-up send window runs in.
Example:UTC - weekdaysOnly boolean
WeekdaysOnly limits warm-up sending to Monday through Friday.
Example:true
SenderEmailWarmupStatus
- cap integer
Cap is the configured maximum warm-up emails per day; the ramp stops there. 0 while the mailbox has never been enrolled.
Example:10 - currentPerDay integer
CurrentPerDay is today's warm-up ramp target (warm-up emails per day), 0 while not enrolled. On weekends of a weekdays-only account the ramp value still shows even though no warm-up emails send that day.
Example:6 - enrolled boolean
Enrolled is true while the mailbox has warm-up enabled.
Example:true - healthScore integer
Health score 0-100, higher is better: the share of this account's warm-up emails over the last 7 full days that landed in the inbox rather than spam; 90+ is the app's bar for campaigns. It moves daily as warm-up emails land in the inbox (up) or in spam (down). Null while warm-up is off or before 20 warm-up emails were checked.
Example:96
SenderReputationListResponse
- count integerExample:
9 - items array of SenderReputationResponse
SenderReputationResponse
- blacklistListings array of BlacklistListingResponse
- blacklistsChecked integer
BlacklistsChecked is how many zones were queried, reported next to the listing count so the number can never be read as a total.
Example:23 - blacklistsListed integerExample:
1 - checkedAt string
- dkimStatus stringExample:
OK - dmarcPolicy stringExample:
quarantine - dmarcStatus stringExample:
MISSING - dnsIssues array of string
- domain stringExample:
acme.com - healthScore integer
HealthScore is 0-100 combining placement, authentication and blacklist standing. -1 when it cannot be computed.
Example:71 - mxStatus stringExample:
OK - placementScore integer
PlacementScore is the inbox rate over recent completed runs. -1 when the mailbox has never been tested.
Example:77 - senderAddress stringExample:
tom@acme.com - senderEmailId integerExample:
3 - sendingIp string
SendingIP is empty for mailboxes on a shared provider (Gmail, Microsoft), which have no dedicated IP of their own to check.
Example:203.0.113.5 - spfStatus string
Each status is OK, WARNING, MISSING or ERROR.
Example:OK
SendReplyDraftResponse
- body stringExample:
Thanks for getting back to me - would Tuesday work for a quick call? - cc array of stringExample:
["sam@acme.com"] - id integerExample:
789 - leadId integerExample:
123 - recipient stringExample:
jane@acme.com - status stringExample:
scheduled - subject stringExample:
Re: Quick question - to array of string
To and Cc are who the reply is being sent to (see ReplyDraftItem).
Example:["jane@acme.com"]
SequenceStep
- body stringExample:
<p>Hi {first_name},</p> - contentType stringExample:
html - delayDays integerExample:
0 - order integerExample:
1 - subject stringExample:
Quick question, {first_name} - useSameThread booleanExample:
true - variants array of SequenceVariant
SequenceStepInput
- body string requiredAt least 1 characters
- contentType stringOne of: "html", "text"
- delayDays integerMinimum 0. Maximum 365
- order integerMinimum 1
- subject string requiredAt least 1 characters. At most 998 characters
- useSameThread boolean
- variants array of SequenceVariantInputAt most 25 items
SequenceVariant
- body stringExample:
<p>Hi {first_name},</p> - label stringExample:
B - subject stringExample:
Quick question about {company_name}
SequenceVariantInput
- body string
- label string requiredAt least 1 characters. At most 2 characters
- subject string requiredAt least 1 characters. At most 998 characters
SetupPingRequest
- agent string
Agent is the assistant's self-reported name, in any form; the backend normalizes it to a short lowercase identifier.
SetupPingResponse
- agent string
- ok boolean
SourceProspectsRequest
- campaignId integer required
CampaignID is the campaign the sourced prospects are added to.
Example:123 - count integer
Count is how many prospects to add in this request. Defaults to 50, capped at 500. A stored prospect costs the reveal price in credits (1 at the time of writing); the response states the price it charged and the total the batch is expected to cost, so nothing has to trust this comment to stay current.
Example:50 - icpId integer
IcpID names the Ideal Customer Profile whose targeting criteria drive the search. Omitted, the workspace's primary profile is used.
Example:7
SourceProspectsResponse
- campaignId integerExample:
123 - creditsPerProspect integer
CreditsPerProspect is what one stored prospect debits, read from the pricing table at request time. It is reported because the price has changed twice (1 to 5 in August 2026, back to 1 in September 2026 when the contact data moved to a flat monthly plan) and every caller that budgets from a hardcoded number budgets wrong the day it changes again.
Example:1 - estimatedCredits integer
EstimatedCredits is Requested x CreditsPerProspect: the ceiling this batch can cost. The run settles against prospects actually stored, so the real debit is this or less.
Example:50 - icpId integer
IcpID is the profile that was used, echoed back so callers relying on the primary-profile default can see which one it resolved to.
Example:7 - prospectSearchId integer
ProspectSearchID identifies the search being advanced. Repeated requests for the same campaign and profile return the same id: the search resumes from its provider cursor instead of re-revealing the same people.
Example:42 - requested integerExample:
50 - status stringExample:
queued
SpaceDetails
- completed_campaigns integer
- draft_campaigns integer
- members array of MemberInfo
- not_started_campaigns integer
- paused_campaigns integer
- running_campaigns integer
- space_id integer
- total_campaigns integer
- total_members integer
SpfCheckResult
- issues array of string
- record stringExample:
v=spf1 include:_spf.google.com ~all - status string
Status is one of OK, WARNING, MISSING, ERROR.
Example:OK
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
UpdateBillingProfileRequest
- addressLineOne string requiredExample:
1 Example Street - addressLineTwo stringExample:
Suite 200 - city string requiredExample:
New York - company string requiredExample:
Acme Ltd - country string required
Country is an ISO 3166-1 alpha-2 code, e.g. US. Case-insensitive on input.
Example:US - firstName string requiredExample:
Jane - lastName string requiredExample:
Doe - phone string requiredExample:
2125550142 - phoneCc string required
PhoneCc is the telephone country calling code without the plus, e.g. 1.
Example:1 - postalCode string requiredExample:
10001 - state string requiredExample:
NY
UpdateCampaignRequest
- allowNonBusinessEmails boolean
- dailyLimit integer
DailyLimit caps the total emails (initial + follow-ups) this campaign may schedule per calendar day in the campaign timezone. Omit to leave the cap unchanged; it cannot be cleared through this endpoint.
Minimum 1. Maximum 10000 - emoji stringAt least 1 characters. At most 10 characters
- ignoreOutOfOfficeReplies boolean
- isEnabledCatchallValidated boolean
- isEnabledEmailVerifier boolean
- isEnabledIgnoreHardBouncedLeads boolean
- isEnabledIgnoreLeadsWhoAlreadyResponded boolean
- isEnabledLlm boolean
Settings - all optional boolean flags
- isEnabledSkipLeadIfAlreadyExists boolean
- isEnabledStopFollowUpsAcrossCampaigns boolean
- isEnabledStopFollowUpsForSameCompany boolean
- isEnabledStopFollowUpsOnReply boolean
- maximumSendingLimitPerSenderEmail integerMinimum 1. Maximum 10000
- maximumSendingLimitPerSenderEmailVariation integerMinimum 0. Maximum 100
- maximumTimeBetweenEmails integerMinimum 2. Maximum 30
- minimumHealthScore integer
MinimumHealthScore, 1-100, is the lowest email account health score (see healthScore on the sender emails) that may send in this campaign. An account below it, or with no score yet, sends nothing here, first emails and follow-ups alike, until its score is back at or above it; its conversations wait for it and never move to another account. Send 0 to remove the minimum; omit to leave it unchanged. A running campaign re-plans its unsent emails at once.
Minimum 0. Maximum 100. Example:80 - minimumTimeBetweenEmails integerMinimum 2. Maximum 30
- name stringAt least 1 characters. At most 255 characters
- timezone string
UpdateCampaignResponse
- campaign object
- message stringExample:
campaign updated successfully
UpdateCampaignScheduleRequest
- daysSchedule array of string
DaysSchedule is the set of weekdays the campaign may send on. Accepts weekday numbers as strings, where Sunday is 0 ("1" is Monday), or weekday names such as "monday". Names are matched case-insensitively and common short forms ("mon", "tues") work. It is sent as an array, but stored as numbers and returned as one comma-separated string: a request sending Monday to Friday by name reads back as "1,2,3,4,5".
For multiple leads scheduled campaigns (flow 3) and API campaigns.
Example:["1","2","3","4","5"] - endSchedule string
- everySchedule integerMinimum 1
- maximumTimeBetweenEmails integerMinimum 2. Maximum 30
- minimumTimeBetweenEmails integerMinimum 2. Maximum 30
- sendAt string
For single lead scheduled campaigns (flow 2)
- startSchedule string
- timezone string required
Common field for all flows
UpdateCampaignScheduleResponse
- campaign object
- message stringExample:
campaign schedule updated successfully
UpdatedLead
- customVariables map of object
CustomVariables is returned only for a lead in no campaign.
- email stringExample:
john.doe@example.com - firstName stringExample:
John - id integerExample:
123 - lastName stringExample:
Doe
UpdateICPRequest
- companySizes array of string
- industries array of string
- keywords array of string
- locations array of string
- name string
- seniorities array of string
- summary string
- titles array of string
UpdateLeadCategoryRequest
- category string required
Category must be one of the lead category values: interested, not_interested, bounced, out_of_office, delivery_incomplete, meeting_booked.
Example:interested
UpdateLeadCategoryResponse
- lead LeadCategoryState
- message stringExample:
lead category updated successfully
UpdateLeadRequest
- company string
- customVariables map of object
CustomVariables replaces the lead's whole custom variable map when provided. Omit it to leave the existing variables untouched.
- email string
For a lead in a campaign, a different email does not change this lead: it creates a lead with the new email in the same campaign, or overwrites the lead that already has it.
- firstName string
- lastName string
- linkedin string
- middleName string
Accepted but never saved by this endpoint.
- phone string
- title string
- website string
UpdateLeadResponse
- lead UpdatedLead
- message stringExample:
lead updated successfully
UpdateReplyDraftRequest
- body stringExample:
Thanks for getting back to me - would Tuesday work for a quick call? - subject stringExample:
Re: Quick question
UpdateSenderEmailRequest
- currentDailyLimit integerMinimum 0. Maximum 1000
- familyName stringAt most 255 characters
- givenName stringAt least 1 characters. At most 255 characters
- maximumSendingsLimitPerDay integer
Daily sending limits
Minimum 1. Maximum 1000 - minimumSendingsLimitPerDay integerMinimum 1. Maximum 1000
- signature string
- toggleGradualBuildUp boolean
Gradual build-up toggle. While on, daily sending is capped at min(5 x weeks since the account was connected, 50, maximumSendingsLimitPerDay); turn it off to send above 50 a day.
UpdateSenderEmailResponse
- message stringExample:
sender email updated successfully - senderEmail SenderEmailResponse
UpdateSenderEmailWarmupRequest
- capLimit integer
CapLimit is the most warm-up emails a day; the ramp stops here.
Minimum 1. Maximum 200. Example:40 - enableReplies boolean
EnableReplies lets warm-up recipients reply, adding reply signals.
Example:false - enabled boolean
Enabled switches warm-up on (true) or off (false). A mailbox that has never been enrolled needs enabled: true to take any other setting.
Example:true - increaseBy integer
IncreaseBy is how many warm-up emails are added each day until CapLimit.
Minimum 1. Maximum 50. Example:2 - startLimit integer
StartLimit is how many warm-up emails go out on the first day.
Minimum 1. Maximum 200. Example:2 - timezone string
Timezone is the IANA timezone the warm-up send window runs in.
Example:America/New_York - weekdaysOnly boolean
WeekdaysOnly limits warm-up sending to Monday through Friday.
Example:true
UpdateWebhookRequest
- isEnabled boolean
- name stringAt least 1 characters. At most 255 characters
- type string
- url string
UpdateWebhookResponse
- message stringExample:
webhook updated successfully - webhook WebhookResponse
WebhookResponse
- createdAt stringExample:
2024-01-15T10:30:00Z - id integerExample:
123 - isEnabled booleanExample:
true - name stringExample:
LeadCreated webhook - status stringExample:
active - type stringExample:
LeadCreated - url stringExample:
https://hook.make.com/abc123
WorkspaceItem
- createdAt stringExample:
2026-08-19T10:30:00Z - iconUrl string
IconURL is where the workspace's icon image can be loaded from. Empty when the workspace has none. Icons are uploaded in the app.
Example:https://whitelabel-assets.emailchaser.com/workspace-icons/51539607552/1766000000-a1b2c3d4e5f6.png - id integerExample:
51539607552 - isCurrent boolean
IsCurrent is true for the workspace the calling API key is bound to.
Example:false - name stringExample:
Acme Outbound
Generated from the Emailchaser API's own OpenAPI definition, so it always matches the running API.