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 integer
    Example: 10
  • message string
    Example: 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 integer
    Example: 35627

AudienceSizeRequest

  • companySizes array of string
    Example: ["11-50","51-200"]
  • industries array of string
    Example: ["Software"]
  • keywords array of string
    Example: ["b2b saas"]
  • locations array of string
    Example: ["United States"]
  • seniorities array of string
    Example: ["owner","director"]
  • titles array of string
    Example: ["CEO","Head of Sales"]

AudienceSizeResponse

AutopilotAuditEvent

  • actor string
    Example: system
  • at string
    Example: 2026-07-01T10:30:00Z
  • message string
    Example: found prospects to reveal; no credits spent, waiting for approval before revealing them
  • stage string
    Example: 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 integer
    Example: 2310
  • creditsUsd number
    Example: 57.75
  • domains integer
    Example: 5
  • expectedMeetingsPerMonth number

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

    Example: 6.1
  • feasible boolean

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

    Example: true
  • firstMonthUsd number

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

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

    Notes explains anything worth surfacing to a human.

  • prospectsPerMonth integer
    Example: 2310
  • recurringUsd number

    RecurringUsd is the steady-state monthly cost.

    Example: 427.75
  • setupUsd number

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

    Example: 111.95

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 integer
    Example: 1234
  • createdAt string
    Example: 2026-07-01T10:30:00Z
  • icpId integer
    Example: 12
  • id integer
    Example: 7
  • killSwitch boolean

    KillSwitch reports whether the run has been permanently halted.

    Example: false
  • lastAdvancedAt string

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

    Example: 2026-07-01T10:30:00Z
  • lastError string
  • prospectSearchId integer
    Example: 56
  • replyMode string
    Example: draft
  • status string

    Status is one of: pending, building_icp, writing_sequence, sourcing_prospects, awaiting_approval, provisioning_infrastructure, running, paused, completed, failed. A run is at sourcing_prospects twice: before approval it checks for free that prospects match, after approval (approvedAt set) it reveals the first batch, which spends credits.

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

AutopilotRunResult

BillingProfile

  • addressLineOne string
    Example: 1 Example Street
  • addressLineTwo string
    Example: Suite 200
  • city string
    Example: New York
  • company string
    Example: Acme Ltd
  • country string

    Country is an ISO 3166-1 alpha-2 code, uppercase.

    Example: US
  • firstName string
    Example: Jane
  • lastName string
    Example: Doe
  • phone string
    Example: 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 string
    Example: 10001
  • state string
    Example: NY
  • updatedAt string

    UpdatedAt is when the profile was last written (RFC3339).

    Example: 2026-08-03T10:30:00Z

BillingProfileResult

BlacklistListingResponse

  • answer string
    Example: 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 string
    Example: ip
  • name string
    Example: Spamhaus ZEN
  • reason string
    Example: On the SBL: the IP is on Spamhaus's main spam-source list.
  • txt string
  • value string
    Example: 203.0.113.5
  • zone string
    Example: 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 integer
    Example: 17
  • message string
    Example: 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 string
    Example: 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 integer
    Example: 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

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 string
    Example: 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 integer
    Example: 123

CampaignDetailStats

  • bouncedLeadsCount integer
  • contactedLeadsCount integer
  • emailsSentCount integer
  • leadsRespondedPositivelyCount integer
  • repliedLeadsCount integer

CampaignEmailCounts

  • blocked integer
    Example: 2
  • bounced integer
    Example: 20
  • canceled integer
    Example: 15
  • catchAll integer
    Example: 12
  • deferred integer
    Example: 5
  • delivered integer
    Example: 280
  • draft integer
    Example: 20
  • dropped integer
    Example: 3
  • errorOnSent integer
    Example: 5
  • followUp integer
    Example: 50
  • followUpCanceled integer
    Example: 10
  • followUpDraft integer
    Example: 10
  • invalid integer
    Example: 8
  • pending integer
    Example: 100
  • replied integer
    Example: 50
  • scheduled integer
    Example: 500
  • sent integer
    Example: 300
  • spamReport integer
    Example: 2
  • total integer
    Example: 1000
  • waitingForReschedule integer
    Example: 5

CampaignListItem

  • createdAt string
  • emoji string
  • flow string
  • id integer
  • name string
  • 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 string
    Example: 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 string
    Example: 17:00
  • everySchedule integer
    Example: 30
  • maximumTimeBetweenEmails integer
    Example: 15
  • minimumTimeBetweenEmails integer
    Example: 5
  • startSchedule string
    Example: 09:00

CampaignSettings

  • allowNonBusinessEmails boolean
    Example: 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 boolean
    Example: true
  • isEnabledCatchallValidated boolean
    Example: true
  • isEnabledEmailVerifier boolean
    Example: false
  • isEnabledIgnoreHardBouncedLeads boolean
    Example: true
  • isEnabledIgnoreLeadsWhoAlreadyResponded boolean
    Example: true
  • isEnabledLlm boolean
    Example: true
  • isEnabledSkipLeadIfAlreadyExists boolean
    Example: false
  • isEnabledStopFollowUpsAcrossCampaigns boolean
    Example: true
  • isEnabledStopFollowUpsForSameCompany boolean
    Example: false
  • isEnabledStopFollowUpsOnReply boolean
    Example: true
  • maximumSendingLimitPerSenderEmail integer
    Example: 50
  • maximumSendingLimitPerSenderEmailVariation integer
    Example: 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 string
    Example: 2026-07-01
  • positive integer
    Example: 1
  • replied integer
    Example: 3
  • sent integer
    Example: 40

CampaignStatsStep

  • index integer
    Example: 0
  • replied integer
    Example: 45
  • sent integer
    Example: 600

CampaignStatsTotals

  • bounced integer
    Example: 14
  • meetings integer
    Example: 7
  • positive integer
    Example: 32
  • replied integer
    Example: 85
  • sent integer
    Example: 1200

CampaignStatsVariant

  • label string
    Example: A
  • positive integer
    Example: 18
  • replied integer
    Example: 45
  • sent integer
    Example: 600

CancelEmailVerificationJobResponse

  • message string
    Example: job canceled

CheckDfyDomainResponse

  • available boolean
    Example: true
  • domain string
    Example: acme-outreach.com
  • price number
    Example: 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 string
    Example: 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 required
    Example: ["acme-outreach.com","acme-outreach.org"]

CheckDfyDomainsResponse

ConnectionHistoryItem

  • campaignId integer
    Example: 10
  • createdAt string
    Example: 2024-01-15T10:30:00Z
  • disconnectionReason string
    Example: token_expired
  • errorCode string
    Example: AUTH_FAILED
  • errorMessage string
    Example: Token has expired
  • eventType string
    Example: disconnected
  • id integer
    Example: 456
  • userId integer
    Example: 5

ConnectSenderEmailRequest

  • email string required
  • firstName string
    At 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 string
    At most 255 characters
  • loginString string

    LoginString defaults to the email address when omitted, which is what most providers expect.

  • password string required
    At least 1 characters
  • smtpServerUrl string required
    At least 1 characters

ConnectSenderEmailResponse

ConversationItem

  • body string
    Example: Hi Jane, I noticed that...
  • campaignId integer
    Example: 12
  • createdAt string
    Example: 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 string
    Example: jane@prospect.com
  • id integer
    Example: 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 string
    Example: sent
  • subject string
    Example: Quick question
  • threadId string
    Example: 19842fa1b2c3d4e5

CopilotICP

  • companySizes array of string
  • icpName string
    Example: 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 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 array of CopilotSequenceStep required

    Sequence is the cold-email sequence to seed the draft campaign with.

CopilotLaunchResponse

  • campaignId integer
    Example: 1234
  • jobId string
    Example: 5678
  • message string
    Example: draft campaign created; lead finding started
  • status string
    Example: draft

CopilotPersona

  • seniority string
    Example: VP
  • title string
    Example: 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

CopilotSequenceStep

  • body string required
    Example: 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 required
    Example: 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 string
    At 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 integer
    Minimum 1. Maximum 10000
  • maximumSendingLimitPerSenderEmailVariation integer
    Minimum 0. Maximum 100
  • maximumTimeBetweenEmails integer
    Minimum 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 integer
    Minimum 2. Maximum 30
  • name string required
    At least 1 characters. At most 255 characters
  • timezone string

CreateCampaignResponse

  • campaign CreatedCampaign
  • message string
    Example: 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 string
    Example: run_abc12345_...
  • id integer
    Example: 12
  • name string
    Example: Acme Outbound key
  • scopes array of string
    Example: ["read","read_write"]

CreatedCampaign

  • createdAt string
    Example: 2024-01-15T10:30:00Z
  • emoji string
    Example: 📥
  • flow string
    Example: multiple_leads_scheduled
  • id integer
    Example: 8589949820
  • name string
    Example: RB2B High Intent
  • status string
    Example: draft
  • timezone string
    Example: America/New_York
  • updatedAt string
    Example: 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 string
    Example: john.doe@example.com
  • id integer
    Example: 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 required
    Example: 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 integer
    Example: 5
  • leads array of CreatedLead
  • message string
    Example: leads processed successfully

CreateOrUpdateLeadsRequest

  • campaignId integer
  • leads array of LeadInput required
    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

  • 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 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 integer
    Example: 1500
  • lifetimeGranted integer
    Example: 5000
  • lifetimeUsed integer
    Example: 3400
  • monthlyGrant integer
    Example: 2000
  • reserved integer
    Example: 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 string
    Example: 2026-07-01T10:30:00Z
  • description string
    Example: 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 integer
    Example: 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 integer
    Example: 123
  • message string
    Example: campaign deleted successfully

DeleteICPResponse

  • success boolean
    Example: true

DeleteLeadResponse

  • id integer
    Example: 123
  • message string
    Example: lead deleted successfully

DeleteWebhookResponse

  • id integer
    Example: 123
  • message string
    Example: webhook deleted successfully

DetachCampaignSenderResponse

  • campaignId integer
    Example: 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 string
    Example: 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 required
    Example: acme-mail.com

DfyDomainSuggestion

  • available boolean
    Example: true
  • domain string
    Example: acme-mail.com
  • price number
    Example: 13.99
  • tld string
    Example: com

DfyMailboxInput

  • domainName string required
    Example: acme-mail.com
  • firstName string required
    Example: John
  • lastName string required
    Example: Doe
  • profilePicture string
  • username string required
    Example: john

DfyOrderConflictResponse

  • error string
    Example: acme-mail.com is already on order 9.
  • existingOrderId integer
    Example: 9

DfyOrderResponse

  • completedAt string

    CompletedAt is when the order completed (RFC3339), or null.

    Example: 2026-07-01T10:35:00Z
  • cost_breakdown object
  • createdAt string
    Example: 2026-07-01T10:30:00Z
  • domains object
  • externalOrderId string
    Example: cmr_order_456
  • failureReason string
  • forwardingDomain object
  • id integer
    Example: 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

DkimCheckResult

  • checkedSelectors array of string

    CheckedSelectors is every selector name looked up, in the order tried.

  • issues array of string
  • record string
    Example: 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 string
    Example: 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 string
    Example: 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 string
    Example: 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 string
    Example: 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 string
    Example: no billing profile set for this workspace

ErrorCampaignNotFound

  • error string
    Example: campaign not found

ErrorCampaignValidation

  • error string
    Example: campaign schedule days not configured

ErrorFailedToCheckDNS

  • error string
    Example: failed to check dns records

ErrorFailedToConnectSenderEmail

  • error string
    Example: failed to connect sender email

ErrorFailedToCreateCampaign

  • error string
    Example: failed to create campaign

ErrorFailedToCreateLeads

  • error string
    Example: failed to create leads

ErrorFailedToDeleteCampaign

  • error string
    Example: failed to delete campaign

ErrorFailedToDeleteLead

  • error string
    Example: failed to delete lead

ErrorFailedToDeleteWebhook

  • error string
    Example: failed to delete webhook

ErrorFailedToGetWarmupSettings

  • error string
    Example: failed to get warm-up settings

ErrorFailedToLaunchCampaign

  • error string
    Example: failed to launch/resume campaign

ErrorFailedToMoveLead

  • error string
    Example: failed to move lead

ErrorFailedToPauseCampaign

  • error string
    Example: failed to pause campaign

ErrorFailedToRegisterWebhook

  • error string
    Example: failed to register webhook

ErrorFailedToReplaceSequence

  • error string
    Example: failed to replace campaign sequence

ErrorFailedToRetrieveLeads

  • error string
    Example: failed to retrieve leads

ErrorFailedToRetrieveSequence

  • error string
    Example: failed to retrieve campaign sequence

ErrorFailedToUpdateCampaign

  • error string
    Example: failed to update campaign

ErrorFailedToUpdateLead

  • error string
    Example: failed to update lead

ErrorFailedToUpdateSenderEmail

  • error string
    Example: failed to update sender email

ErrorFailedToUpdateWarmupSettings

  • error string
    Example: failed to update warm-up settings

ErrorFailedToUpdateWebhook

  • error string
    Example: failed to update webhook

ErrorForbidden

  • error string
    Example: forbidden

ErrorInvalidCampaignID

  • error string
    Example: invalid campaign ID

ErrorInvalidCategory

  • error string
    Example: invalid category, must be one of: interested, not_interested, bounced, out_of_office, delivery_incomplete, meeting_booked

ErrorInvalidLeadID

  • error string
    Example: invalid lead ID

ErrorInvalidRequest

  • error string
    Example: invalid request body

ErrorInvalidSenderEmailAddress

  • error string
    Example: invalid email address. You can only connect business email accounts (name@company.com)

ErrorInvalidSenderEmailID

  • error string
    Example: invalid sender email ID

ErrorInvalidSequence

  • error string
    Example: the first step must have a delayDays of 0

ErrorInvalidWarmupSettings

  • error string
    Example: startLimit (50) cannot be higher than capLimit (40)

ErrorInvalidWebhookID

  • error string
    Example: invalid webhook ID

ErrorInvalidWebhookType

  • error string
    Example: invalid webhook type. Valid values: EmailSent, EmailReply, EmailBounce, EmailUnsubscribe, LeadCategoryUpdate, LeadCreated, CampaignStatusChanged, CreditBalanceLow, AutopilotRunStatusChanged, DfyOrderCompleted

ErrorNotFound

  • error string
    Example: lead not found

ErrorResponse

  • error string
    Example: error message

ErrorSenderEmailAlreadyConnected

  • error string
    Example: this email address is already connected to another workspace

ErrorSenderEmailNoDomain

  • error string
    Example: sender email has no valid domain

ErrorSenderEmailNotConnected

  • error string
    Example: sender emails not connected: 42

ErrorSenderEmailNotFound

  • error string
    Example: sender email not found

ErrorSenderEmailPlanLimit

  • error string
    Example: your plan does not allow connecting another sender email

ErrorUnauthorized

  • error string
    Example: unauthorized

ErrorUnsupportedCampaignFlow

  • error string
    Example: campaign flow does not support sequences. Valid flows: multiple_leads_scheduled, api

ErrorWarmupSettingsConflict

  • error string
    Example: warm-up is off for this mailbox. Send enabled: true in the same request to switch it on with these settings

ErrorWebhookNotFound

  • error string
    Example: webhook not found

GetCampaignResponse

  • createdAt string
    Example: 2024-01-10T10:30:00Z
  • emoji string
    Example: 🚀
  • flow string
    Example: multiple_leads_scheduled
  • id integer
    Example: 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 string
    Example: Q1 Outreach Campaign
  • sendAt string

    "0001-01-01T00:00:00Z" while not set.

    Example: 2024-01-15T10:00:00Z
  • status string
    Example: running
  • timezone string
    Example: America/New_York
  • updatedAt string
    Example: 2024-01-15T10:30:00Z

GetCampaignStatsResponse

GetLeadConversationResponse

  • items array of ConversationItem
  • leadId integer
    Example: 123
  • total integer
    Example: 5

GetLeadResponse

  • company string
    Example: Acme Corp
  • createdAt string
    Example: 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 string
    Example: john.doe@example.com
  • firstName string
    Example: John
  • id integer
    Example: 123
  • lastName string
    Example: Doe
  • linkedin string
    Example: 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 string
    Example: +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 string
    Example: Software Engineer
  • updatedAt string
    Example: 2024-01-15T10:30:00Z
  • website string
    Example: https://example.com

GetSequenceResponse

  • campaignId integer
    Example: 8589949820
  • signature string
    Example: <p>Robby Frank</p>
  • steps array of SequenceStep
  • total integer
    Example: 3

ICPPersona

  • seniority string
    Example: VP
  • title string
    Example: 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 string
    Example: 2026-07-01T10:30:00Z
  • estimatedAudienceSize integer
    Example: 12345
  • id integer
    Example: 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 string
    Example: Mid-market SaaS RevOps leaders
  • personas array of ICPPersona
  • seniorities array of string
  • sourceWebsite string
    Example: https://acme.com
  • summary string
  • titles array of string

ICPResult

InboxPlacementDailyStatResponse

  • date string

    Date is the UTC day.

  • inbox integer
    Example: 180
  • inboxRate integer
    Example: 81
  • missing integer
    Example: 4
  • promotions integer
    Example: 12
  • runs integer
    Example: 2
  • spam integer
    Example: 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 string
    Example: acme.com publishes no DMARC record.
  • senderAddress string
    Example: tom@acme.com
  • senderEmailId integer
    Example: 3
  • severity string

    Severity is critical, warning or info.

    Example: critical
  • title string
    Example: 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

  • inboxRate integer
    Example: 80
  • mailboxesAtRisk integer
    Example: 2
  • mailboxesChecked integer
    Example: 9
  • missingRate integer
    Example: 3
  • providerBreakdown array of InboxPlacementProviderResponse
  • runsInWindow integer
    Example: 14
  • spamRate integer
    Example: 12
  • windowDays integer

    WindowDays is how far back the rates below were computed over.

    Example: 30

InboxPlacementListResponse

InboxPlacementProviderResponse

  • inbox integer
    Example: 14
  • inboxRate integer
    Example: 77
  • label string
    Example: Gmail / Google Workspace
  • missing integer
    Example: 0
  • promotions integer
    Example: 2
  • provider string
    Example: google
  • seeds integer
    Example: 18
  • spam integer
    Example: 2

InboxPlacementResultListResponse

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 integer
    Example: 90211
  • placement string

    Placement is pending, inbox, spam, promotions, social, updates, missing or failed.

    Example: inbox
  • seedAddress string
    Example: seed-104@example.net
  • seedProvider string
    Example: google
  • senderAddress string
    Example: tom@acme.com
  • sentAt string

InboxPlacementRunDetailResponse

  • completedAt string
  • createdAt string
  • error string
  • failed integer
    Example: 0
  • id integer
    Example: 481
  • inbox integer
    Example: 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 integer
    Example: 120
  • messagesSent integer
    Example: 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 integer
    Example: 40
  • senderBreakdown array of InboxPlacementSenderResponse
  • sendersTargeted integer
    Example: 3
  • spam integer
    Example: 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 integer
    Example: 12
  • trigger string

    Trigger is manual or scheduled.

    Example: scheduled

InboxPlacementRunResponse

  • completedAt string
  • createdAt string
  • error string
  • failed integer
    Example: 0
  • id integer
    Example: 481
  • inbox integer
    Example: 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 integer
    Example: 120
  • messagesSent integer
    Example: 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 integer
    Example: 40
  • sendersTargeted integer
    Example: 3
  • spam integer
    Example: 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 integer
    Example: 12
  • trigger string

    Trigger is manual or scheduled.

    Example: scheduled

InboxPlacementSenderResponse

  • failed integer
    Example: 0
  • inbox integer
    Example: 31
  • inboxRate integer
    Example: 77
  • missing integer
    Example: 1
  • promotions integer
    Example: 2
  • senderAddress string
    Example: tom@acme.com
  • senderEmailId integer
    Example: 3
  • sent integer
    Example: 40
  • spam integer
    Example: 6

InboxPlacementSpamRuleResponse

  • advice string
    Example: Write the subject in sentence case.
  • description string
    Example: The subject line is in capitals.
  • name string
    Example: 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

InboxPlacementTestListResponse

InboxPlacementTestResponse

  • createdAt string
  • id integer
    Example: 12
  • intervalHours integer

    IntervalHours is how often a recurring test repeats. Null for one-time.

    Example: 24
  • isPaused boolean
    Example: false
  • kind string

    Kind is one_time or recurring.

    Example: recurring
  • lastRunAt string
  • name string
    Example: 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 string
    Example: Question about your onboarding flow

InstantlyAccount

  • dailyLimit integer
    Example: 30
  • email string
    Example: jane@acme.com
  • firstName string
    Example: Jane
  • lastName string
    Example: Doe
  • provider string

    google | microsoft | other

    Example: google
  • status integer
    Example: 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 string
    Example: 9f8b1c2a-1234-4a5b-9c8d-0e1f2a3b4c5d
  • message string
    Example: instantly import started
  • status string
    Example: queued

InsufficientCreditsErrorResponse

  • code string
    Example: insufficient_credits
  • error string
    Example: starting this run needs 50 prospect credits and the workspace has 0; buy credits via POST /credits/purchase, then start the run again
  • have integer
    Example: 0
  • need integer
    Example: 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 string
    Example: campaign launched/resumed successfully

LeadCategoryState

  • id integer
    Example: 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 integer
    Example: 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 string
    Example: seniorities
  • importId integer

    ImportID is the running import an import_running refusal waits on.

    Example: 8813
  • message string
  • needed integer
    Example: 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 integer
    Example: 30
  • value string
    Example: 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
  • regions array of string
  • revenue array of string
  • seniorities array of string

LeadFinderFilterSet

  • cities array of string
    Example: ["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 string
    Example: ["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 integer
    Example: 22
  • audienceKey string

    AudienceKey names the filters the people came from, as on a search.

  • campaignId integer
    Example: 123
  • campaignName string
    Example: Irish sales leaders
  • createdAt string
  • creditsPerProspect integer
    Example: 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 integer
    Example: 0
  • finishedAt string
  • importId integer
    Example: 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 string
    Example: selected
  • requested integer
    Example: 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 integer
    Example: 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.

  • verifyEmails boolean
    Example: 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 integer
    Example: 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 integer
    Example: 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 string
    Example: 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 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

LeadFinderLimits

  • defaultPageSize integer
    Example: 25
  • maxChipsPerField integer
    Example: 50
  • maxDomainsPerField integer
    Example: 1000
  • maxFirstN integer
    Example: 5000
  • maxPage integer
    Example: 100
  • maxRefsPerImport integer
    Example: 1000
  • maxRunningImports integer
    Example: 3
  • maxSavedSearchName integer
    Example: 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 integer
    Example: 100
  • pageSizes array of integer
    Example: [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 integer
    Example: 14

LeadFinderPerson

  • firstName string
    Example: 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 string
    Example: Sales & Business Development
  • lastInitial string
    Example: H
  • 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 string
    Example: Director
  • title string
    Example: Head of Sales

LeadFinderPersonCompany

  • industry string
    Example: 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 string
    Example: Hopper Ltd
  • revenueBand string
  • sizeBand string
    Example: 51 to 200

LeadFinderPersonLocation

  • city string
    Example: Dublin
  • country string
    Example: 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 integer
    Example: 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 boolean
    Example: true
  • maxPage integer
    Example: 100
  • message string
  • page integer
    Example: 1
  • pageSize integer
    Example: 25
  • 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 string
    Example: 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 boolean
    Example: true
  • totalStatus string
    Example: done

LeadFinderSearchRequest

  • 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 integer
    Example: 2
  • invalid integer
    Example: 1
  • limitReached integer
    Example: 0
  • unknown integer
    Example: 0
  • valid integer
    Example: 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

LeadResponse

  • company string
    Example: Acme Corp
  • createdAt string
    Example: 2024-01-15T10:30:00Z
  • customVariables map of object

    CustomVariables are the lead's merge tags beyond the named fields.

  • email string
    Example: john.doe@example.com
  • firstName string
    Example: John
  • id integer
    Example: 123
  • lastName string
    Example: Doe
  • linkedin string
    Example: 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 string
    Example: A.
  • phone string
    Example: +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 string
    Example: Software Engineer
  • updatedAt string
    Example: 2024-01-15T10:30:00Z
  • website string
    Example: https://example.com

ListAutopilotRunsResponse

ListCampaignsResponse

  • campaigns array of CampaignListItem
  • hasMore boolean
  • limit integer
  • page integer
  • total integer

ListCreditTransactionsResponse

ListDfyOrdersResponse

ListEmailVerificationJobsResponse

ListEmailVerificationRecordsResponse

ListICPsResponse

ListLeadsResponse

  • hasMore boolean
    Example: true
  • leads array of LeadResponse
  • limit integer
    Example: 20
  • page integer
    Example: 1
  • total integer
    Example: 42

ListRepliesResponse

  • hasMore boolean
    Example: true
  • limit integer
    Example: 20
  • page integer
    Example: 1
  • replies array of ReplyItem
  • total integer
    Example: 42

ListReplyDraftsResponse

  • drafts array of ReplyDraftItem
  • hasMore boolean
    Example: false
  • limit integer
    Example: 20
  • page integer
    Example: 1
  • total integer
    Example: 3

ListSenderEmailsResponse

  • hasMore boolean
  • limit integer
  • page integer
  • senderEmails array of SenderEmailListItem
  • total integer

ListWebhooksResponse

ListWorkspacesResponse

MemberInfo

  • created_at string
  • email_address string
  • name string

MoveLeadRequest

  • targetCampaignId integer required

MoveLeadResponse

  • leadId integer
    Example: 123
  • message string
    Example: lead moved successfully
  • sourceCampaignId integer
    Example: 1
  • targetCampaignId integer
    Example: 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 integer
    Example: 120
  • reason string
    Example: 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 integer
    Example: 12
  • sent integer
    Example: 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
  • since string

    Since echoes the window start, or null when the window is open-ended.

    Example: 2026-07-01T00:00:00Z
  • 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 number
    Example: 18.99
  • totalUsd number
    Example: 22.95

PauseCampaignResponse

  • campaign object
  • message string
    Example: 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 string
    Example: 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 string
    Example: webhook registered successfully

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.

  • steps array of SequenceStepInput required
    At least 1 item. At most 20 items

ReplaceSequenceResponse

  • campaignId integer
    Example: 8589949820
  • message string
    Example: campaign sequence replaced successfully
  • signature string
    Example: <p>Robby Frank</p>
  • steps array of SequenceStep
  • total integer
    Example: 3

ReplyDraftItem

  • body string
    Example: Thanks for getting back to me - would Tuesday work for a quick call?
  • cc array of string
    Example: ["sam@acme.com"]
  • createdAt string
    Example: 2026-07-30T14:06:00Z
  • id integer
    Example: 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 integer
    Example: 123
  • subject string
    Example: 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 string
    Example: 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 string
    Example: jane@prospect.com
  • id integer
    Example: 456
  • leadId integer
    Example: 123
  • receivedAt string
    Example: 2026-07-30T14:05:00Z
  • responseCategory string

    ResponseCategory is null while AI categorization is still pending.

    Example: interested
  • subject string
    Example: Re: Quick question
  • threadId string
    Example: 19842fa1b2c3d4e5

SearchDfyDomainsResponse

  • domains array of DfyDomainSuggestion
  • totalAvailable integer
    Example: 7
  • totalChecked integer
    Example: 10

SenderEmailDNSResponse

SenderEmailListItem

  • address string
    Example: john@example.com
  • campaignIds array of integer
    Example: [1,2,3]
  • createdAt string
    Example: 2024-01-10T10:30:00Z
  • currentDailyLimit integer
    Example: 35
  • familyName string
    Example: Doe
  • givenName string
    Example: 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 integer
    Example: 123
  • isConnected boolean
    Example: true
  • manuallyDisconnected boolean
    Example: false
  • maximumSendingsLimitPerDay integer
    Example: 50
  • minimumSendingsLimitPerDay integer
    Example: 20
  • provider string
    Example: google
  • toggleGradualBuildUp boolean
    Example: true
  • updatedAt string
    Example: 2024-01-15T10:30:00Z

SenderEmailResponse

  • address string
    Example: john@example.com
  • campaignIds array of integer
    Example: [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 string
    Example: 2024-01-10T10:30:00Z
  • currentDailyLimit integer
    Example: 35
  • errorCode string
    Example: AUTH_FAILED
  • errorMessage string
    Example: Authentication failed
  • familyName string
    Example: Doe
  • givenName string
    Example: 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 integer
    Example: 123
  • isConnected boolean
    Example: true
  • lastDisconnectedAt string
    Example: 2024-01-15T10:30:00Z
  • lastReconnectedAt string
    Example: 2024-01-16T09:00:00Z
  • manuallyDisconnected boolean
    Example: false
  • maximumSendingsLimitPerDay integer
    Example: 50
  • minimumSendingsLimitPerDay integer
    Example: 20
  • pictureUrl string
    Example: https://example.com/avatar.jpg
  • provider string
    Example: google
  • provisioningStatus string
    Example: complete
  • signature string
    Example: Best regards, John Doe
  • toggleGradualBuildUp boolean
    Example: true
  • updatedAt string
    Example: 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 integer
    Example: 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

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 integer
    Example: 1
  • checkedAt string
  • dkimStatus string
    Example: OK
  • dmarcPolicy string
    Example: quarantine
  • dmarcStatus string
    Example: MISSING
  • dnsIssues array of string
  • domain string
    Example: acme.com
  • healthScore integer

    HealthScore is 0-100 combining placement, authentication and blacklist standing. -1 when it cannot be computed.

    Example: 71
  • mxStatus string
    Example: OK
  • placementScore integer

    PlacementScore is the inbox rate over recent completed runs. -1 when the mailbox has never been tested.

    Example: 77
  • senderAddress string
    Example: tom@acme.com
  • senderEmailId integer
    Example: 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 string
    Example: Thanks for getting back to me - would Tuesday work for a quick call?
  • cc array of string
    Example: ["sam@acme.com"]
  • id integer
    Example: 789
  • leadId integer
    Example: 123
  • recipient string
    Example: jane@acme.com
  • status string
    Example: scheduled
  • subject string
    Example: 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 string
    Example: <p>Hi {first_name},</p>
  • contentType string
    Example: html
  • delayDays integer
    Example: 0
  • order integer
    Example: 1
  • subject string
    Example: Quick question, {first_name}
  • useSameThread boolean
    Example: true
  • variants array of SequenceVariant

SequenceStepInput

  • body string required
    At least 1 characters
  • contentType string
    One of: "html", "text"
  • delayDays integer
    Minimum 0. Maximum 365
  • order integer
    Minimum 1
  • subject string required
    At least 1 characters. At most 998 characters
  • useSameThread boolean
  • variants array of SequenceVariantInput
    At most 25 items

SequenceVariant

  • body string
    Example: <p>Hi {first_name},</p>
  • label string
    Example: B
  • subject string
    Example: Quick question about {company_name}

SequenceVariantInput

  • body string
  • label string required
    At least 1 characters. At most 2 characters
  • subject string required
    At 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 integer
    Example: 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 integer
    Example: 50
  • status string
    Example: 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 string
    Example: 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 required
    Example: 1 Example Street
  • addressLineTwo string
    Example: Suite 200
  • city string required
    Example: New York
  • company string required
    Example: 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 required
    Example: Jane
  • lastName string required
    Example: Doe
  • phone string required
    Example: 2125550142
  • phoneCc string required

    PhoneCc is the telephone country calling code without the plus, e.g. 1.

    Example: 1
  • postalCode string required
    Example: 10001
  • state string required
    Example: 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 string
    At 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 integer
    Minimum 1. Maximum 10000
  • maximumSendingLimitPerSenderEmailVariation integer
    Minimum 0. Maximum 100
  • maximumTimeBetweenEmails integer
    Minimum 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 integer
    Minimum 2. Maximum 30
  • name string
    At least 1 characters. At most 255 characters
  • timezone string

UpdateCampaignResponse

  • campaign object
  • message string
    Example: 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 integer
    Minimum 1
  • maximumTimeBetweenEmails integer
    Minimum 2. Maximum 30
  • minimumTimeBetweenEmails integer
    Minimum 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 string
    Example: campaign schedule updated successfully

UpdatedLead

  • customVariables map of object

    CustomVariables is returned only for a lead in no campaign.

  • email string
    Example: john.doe@example.com
  • firstName string
    Example: John
  • id integer
    Example: 123
  • lastName string
    Example: 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

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

  • message string
    Example: lead updated successfully

UpdateReplyDraftRequest

  • body string
    Example: Thanks for getting back to me - would Tuesday work for a quick call?
  • subject string
    Example: Re: Quick question

UpdateSenderEmailRequest

  • currentDailyLimit integer
    Minimum 0. Maximum 1000
  • familyName string
    At most 255 characters
  • givenName string
    At least 1 characters. At most 255 characters
  • maximumSendingsLimitPerDay integer

    Daily sending limits

    Minimum 1. Maximum 1000
  • minimumSendingsLimitPerDay integer
    Minimum 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

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 string
    At least 1 characters. At most 255 characters
  • type string
  • url string

UpdateWebhookResponse

  • message string
    Example: webhook updated successfully

WebhookResponse

  • createdAt string
    Example: 2024-01-15T10:30:00Z
  • id integer
    Example: 123
  • isEnabled boolean
    Example: true
  • name string
    Example: LeadCreated webhook
  • status string
    Example: active
  • type string
    Example: LeadCreated
  • url string
    Example: https://hook.make.com/abc123

WorkspaceItem

  • createdAt string
    Example: 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 integer
    Example: 51539607552
  • isCurrent boolean

    IsCurrent is true for the workspace the calling API key is bound to.

    Example: false
  • name string
    Example: Acme Outbound

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