:
type: string
description: Reason why this contact was skipped
x-enumDescriptions:
contact_not_found: Contact ID was not found for the team
contacts_already_exists_in_current_campaign: Contact is already a part of current sequence
contacts_active_in_other_campaigns: Contact is active in other sequence
contacts_finished_in_other_campaigns: Contact is finished in other sequence
contacts_without_email: Contact does not have email
contacts_unverified_email: Contact does not have verified email
contacts_with_job_change: Contact has a pending job change event
contacts_in_same_company: Contact from the same company is part of the current sequence (Including
for completeness, but extremely rare - only for old users who had opted in for such feature)
contacts_without_ownership_permission: User does not have permission to reach out to contact
contacts_in_pending_state: Contact is already part of account queue (Rare for api only users - only
applicable for users who are using account based workflows in apollo)
contacts_with_unverified_user_managed_email: Contact has unverified user-managed email
emailer_campaign:
type: object
description: Complete emailer campaign object with statistics
properties:
id:
type: string
name:
type: string
archived:
type: boolean
active:
type: boolean
created_at:
type: string
format: date-time
user_id:
type: string
emailer_schedule_id:
type: string
nullable: true
max_emails_per_day:
type: integer
nullable: true
same_account_reply_policy_cd:
type: string
nullable: true
excluded_account_stage_ids:
type: array
items:
type: string
excluded_contact_stage_ids:
type: array
items:
type: string
label_ids:
type: array
items:
type: string
loaded_stats:
type: boolean
unique_scheduled:
oneOf:
- type: integer
- type: string
enum:
- loading
unique_delivered:
type: integer
unique_bounced:
type: integer
unique_opened:
type: integer
unique_replied:
type: integer
bounce_rate:
type: number
open_rate:
type: number
reply_rate:
type: number
contact_statuses:
type: object
properties:
active:
oneOf:
- type: integer
- type: string
enum:
- loading
failed:
type: integer
paused:
oneOf:
- type: integer
- type: string
enum:
- loading
finished:
oneOf:
- type: integer
- type: string
enum:
- loading
bounced:
oneOf:
- type: integer
- type: string
enum:
- loading
sharing_permission:
type: object
properties:
visibility:
type: string
access_type:
type: string
object_type:
type: string
object_id:
type: string
is_owner:
type: boolean
owner_id:
type: string
sharing_accesses:
type: array
items:
type: object
properties:
id:
type: string
shared_by:
type: string
user_or_team_id:
type: string
user_or_team_type:
type: string
access_type:
type: string
object_id:
type: string
object_type:
type: string
emailer_steps:
type: array
description: Array of sequence steps
items:
type: object
properties:
id:
type: string
emailer_campaign_id:
type: string
position:
type: integer
wait_time:
type: integer
type:
type: string
enum:
- auto_email
- call
- action_item
- manual_email
wait_mode:
type: string
enum:
- hour
- day
- week
note:
type: string
nullable: true
priority:
type: string
enum:
- high
- medium
- low
nullable: true
counts:
type: object
properties:
active:
type: integer
paused:
type: integer
finished:
type: integer
bounced:
type: integer
unique_scheduled:
oneOf:
- type: integer
- type: string
enum:
- loading
unique_skipped:
oneOf:
- type: integer
- type: string
enum:
- loading
unique_completed:
oneOf:
- type: integer
- type: string
enum:
- loading
emailer_touches:
type: array
description: Array of email templates/touches for the sequence
items:
type: object
properties:
id:
type: string
emailer_step_id:
type: string
emailer_template_id:
type: string
status:
type: string
enum:
- approved
- pending
- draft
type:
type: string
enum:
- new_thread
- reply
include_signature:
type: boolean
has_personalized_opener:
type: boolean
template_type:
type: string
unique_scheduled:
oneOf:
- type: integer
- type: string
enum:
- loading
unique_delivered:
type: integer
unique_bounced:
type: integer
unique_opened:
type: integer
unique_replied:
type: integer
bounce_rate:
type: number
nullable: true
open_rate:
type: number
nullable: true
reply_rate:
type: number
nullable: true
team:
type: object
properties:
id:
type: string
example: 6095a710bd01d100a506d4ac
sequences_finder_empty:
type: boolean
example: false
signals_hash:
type: object
description: Optional signals data for play recommendations and analytics
nullable: true
required:
- contacts
- skipped_contact_ids
- emailer_campaign
- emailer_steps
- emailer_touches
- team
'401':
description: Unauthorized - Invalid API key
content:
text/plain:
schema:
type: string
examples:
Invalid API Key:
value: Invalid API key. See https://docs.apollo.io/reference/authentication for how to authenticate.
'403':
description: Forbidden - Master API key required
content:
application/json:
schema:
type: object
properties:
error:
type: string
error_code:
type: string
examples:
Master API Key Required:
value:
error: This API key is not authorized to access api/v1/emailer_campaigns/add_contact_ids. Request an API
key from your administrator that includes this endpoint in its configured scope.
error_code: API_INACCESSIBLE
'422':
description: Unprocessable Entity - Validation errors
content:
application/json:
examples:
Add contact IDs:
value: "{\n \"error\": \"Please specify either contact_ids or label_names.\"\n}"
Add IDs:
value: "{\n \"error\": \"Please specify a emailer_campaign_id and send_email_from_email_account_id.\"\n\
}"
Inactive Email Accounts:
value: "{\n \"error\": \"These mailboxes are no longer active. test@example.com\"\n}"
Aggregate Accounts Not Supported:
value: "{\n \"error\": \"Aggregate accounts are not supported for this sequence. These are the aggregate\
\ accounts: 6633baaece5fbd01c791d7ca\"\n}"
schema:
oneOf:
- title: Add contact IDs
type: object
properties:
error:
type: string
example: Please specify either contact_ids or label_names.
- title: Add IDs
type: object
properties:
error:
type: string
example: Please specify a emailer_campaign_id and send_email_from_email_account_id.
- title: Inactive Email Accounts
type: object
properties:
error:
type: string
example: These mailboxes are no longer active. test@example.com
- title: Aggregate Accounts Not Supported
type: object
properties:
error:
type: string
example: 'Aggregate accounts are not supported for this sequence. These are the aggregate accounts:
6633baaece5fbd01c791d7ca'
'429':
description: Too Many Requests - Rate limit exceeded
content:
application/json:
examples:
Too many requests:
value: "{\n \"message\": \"The maximum number of api calls allowed for api/v1/emailer_campaigns/{sequence_id}/add_contact_ids\
\ is 600 times per hour. Please upgrade your plan from https://app.apollo.io/#/settings/plans/upgrade.\"\
\n}"
schema:
type: object
properties:
message:
type: string
example: The maximum number of api calls allowed for api/v1/emailer_campaigns/{sequence_id}/add_contact_ids
is 600 times per hour. Please upgrade your plan from https://app.apollo.io/#/settings/plans/upgrade.
/emailer_campaigns/remove_or_stop_contact_ids:
post:
summary: Update Contact Status in a Sequence
description: '## Endpoint essentials
**API key access:** `api/v1/emailer_campaigns/remove_or_stop_contact_ids` or `Master API key`
**OAuth scopes:** `emailer_campaigns_remove_or_stop_contact_ids`
**Credit usage:** `0 credits` — [Learn more about API pricing and credits](https://docs.apollo.io/docs/api-pricing).
Sequences
are outreach campaigns that sales teams use to reach out to contacts over a planned period of time.
Use the
Update Contact Status in a Sequence endpoint to either mark contacts as having `finished` a sequence, or to remove
them from a sequence entirely.'
tags:
- Sequences
operationId: update-contact-status-sequence
parameters:
- name: emailer_campaign_ids[]
in: query
description: 'The Apollo IDs for the sequences that you want to update. If you add multiple sequences, you will update
the status of the contacts across the chosen sequences.
To find sequence IDs, call the Search for Sequences endpoint and identify the `id` value for the sequence.
Example:
`66e9e215ece19801b219997f`'
required: true
schema:
type: array
items:
type: string
- name: contact_ids[]
in: query
description: 'The Apollo IDs for the contacts in the sequences. These are the contacts whose sequence status you want
to update.
To find contact IDs, call the Search for Contacts endpoint and identify the `id` value for the contact.
Example: `66e34b81740c50074e3d1bd4`'
required: true
schema:
type: array
items:
type: string
- name: mode
in: query
description: 'Choose 1 of the following options to update the sequence status of the contacts: - `mark_as_finished`:
Mark the contacts as having finished the sequence.
- `remove`: Remove the contacts from the sequence.
- `stop`: Indicate that the contacts progress in the sequence has halted.
'
required: true
schema:
type: string
responses:
'200':
description: '200'
content:
application/json:
examples:
OK:
value:
contacts:
- contact_roles: []
id: 66e34b81740c50074e3d1bd4
first_name: Fyodor
last_name: Dostoevsky
name: Fyodor Dostoevsky
linkedin_url: null
title: Chief Writer
contact_stage_id: null
owner_id: 67b307d00957c2000d08872b
creator_id: 60affe7d6e270a00f5db6fe4
person_id: null
email_needs_tickling: null
organization_name: Apollo.io
source: api
original_source: api
organization_id: null
headline: null
photo_url: null
present_raw_address: St. Petersburg, Russia
linkedin_uid: null
extrapolated_email_confidence: null
salesforce_id: null
salesforce_lead_id: null
salesforce_contact_id: null
salesforce_account_id: null
crm_owner_id: null
created_at: '2024-09-12T20:13:53.207Z'
emailer_campaign_ids:
- 66e9e215ece19801b219997f
direct_dial_status: null
direct_dial_enrichment_failed_at: null
city: Saint Petersburg
country: Russia
state: Saint Petersburg
email_status: verified
email_source: null
account_id: null
last_activity_date: '2025-03-09T20:31:17.000+00:00'
hubspot_vid: null
hubspot_company_id: null
crm_id: null
sanitized_phone: '+15555550117'
merged_crm_ids: null
updated_at: '2025-05-23T13:38:25.109Z'
queued_for_crm_push: false
suggested_from_rule_engine_config_id: null
email_unsubscribed: null
person_deleted: null
call_opted_out: null
label_ids: []
has_pending_email_arcgate_request: false
has_email_arcgate_request: false
existence_level: full
email: fyodor.dostoevsky@apollo.io
email_from_customer: true
custom_field_errors: {}
crm_record_url: null
email_status_unavailable_reason: null
email_true_status: User Managed
updated_email_true_status: true
source_display_name: Created from API
twitter_url: null
facebook_url: null
contact_campaign_statuses:
- id: 68782af181c7f0002159df25
emailer_campaign_id: 66e9e215ece19801b219997f
send_email_from_user_id: 66302798d03b9601c7934ebf
inactive_reason: manually finished
status: finished
added_at: '2025-07-16T22:42:57.372+00:00'
added_by_user_id: 60affe7d6e270a00f5db6fe4
finished_at: '2025-07-16T22:45:21.237+00:00'
paused_at: null
auto_unpause_at: null
send_email_from_email_address: test.marcus.hale@apollomail.io
send_email_from_email_account_id: 6633baaece5fbd01c791d7ca
manually_set_unpause: null
failure_reason: null
current_step_id: null
in_response_to_emailer_message_id: null
cc_emails: null
bcc_emails: null
to_emails: null
current_step_position: null
contact_emails:
- email_md5: cf4604bbd3c12ca9e36e20aa0aefac29
email_sha256: b5d981918efbd5a93eb10f834643a4277034f24e3b5cabc2631440c7ade49cf8
email_status: verified
extrapolated_email_confidence: null
position: 0
email: fyodor.dostoevsky@apollo.io
free_domain: false
source: User Managed
third_party_vendor_name: null
vendor_validation_statuses: []
email_needs_tickling: null
email_true_status: User Managed
email_status_unavailable_reason: null
time_zone: Asia/Krasnoyarsk
show_intent: false
phone_numbers:
- raw_number: 555-555-0117
sanitized_number: '+15555550117'
type: work_direct
position: 0
status: no_status
dnc_status: null
dnc_other_info: {}
dialer_flags: null
source_name: User Managed
vendor_validation_statuses: []
third_party_vendor_name: null
account_phone_note: null
free_domain: false
email_domain_catchall: false
typed_custom_fields:
5b75f1c11dc2727d43ae3bb9: test
5c4296857f799409361890ea: test2
emailer_campaigns:
- id: 66e9e215ece19801b219997f
num_contacts: 3
contact_statuses:
active: loading
failed: 0
paused: loading
finished: loading
bounced: loading
hard_bounced: loading
spam_blocked: loading
not_sent: loading
emailer_steps:
- id: 66e9e232ece19801b21999a4
emailer_campaign_id: 66e9e215ece19801b219997f
position: 1
wait_time: 4
type: auto_email
wait_mode: hour
note: null
max_emails_per_day: null
exact_datetime: null
priority: null
auto_skip_in_x_days: null
counts:
active: 0
paused: 0
finished: 4
bounced: 0
spam_blocked: 0
hard_bounced: 0
not_sent: 0
ab_test_details: {}
- id: 66e9e250ece19802d1196d07
emailer_campaign_id: 66e9e215ece19801b219997f
position: 2
wait_time: 3
type: call
wait_mode: day
note: ''
max_emails_per_day: null
exact_datetime: null
priority: high
auto_skip_in_x_days: null
counts:
active: 0
paused: 0
finished: 0
bounced: 0
spam_blocked: 0
hard_bounced: 0
not_sent: 0
ab_test_details: {}
note_text: ''
unique_scheduled: loading
unique_skipped: loading
unique_completed: loading
outcomes: []
- id: 66e9e265ece198053919497b
emailer_campaign_id: 66e9e215ece19801b219997f
position: 3
wait_time: 3
type: action_item
wait_mode: day
note: Decide the next step to take for contacts in the sequence.
max_emails_per_day: null
exact_datetime: null
priority: medium
auto_skip_in_x_days: null
counts:
active: 0
paused: 0
finished: 0
bounced: 0
spam_blocked: 0
hard_bounced: 0
not_sent: 0
ab_test_details: {}
unique_scheduled: loading
unique_skipped: loading
unique_completed: loading
summary: OK
schema:
type: object
properties:
entity_progress_job:
type: object
properties:
id:
type: string
example: 66e9fca8cc087302d18b83be
user_id:
type: string
example: 60affe7d6e270a00f5db6fe4
job_type:
type: string
example: sequence_remove_stop_contacts
entity_ids:
type: array
items:
type: string
example: 66e9e9e21fbdad01b2b33bbd
params:
type: object
properties:
sequence_ids:
type: array
items:
type: string
example: 66e9e215ece19801b219997f
mode:
type: string
example: mark_as_finished
stop_reason: {}
api_key:
type: string
example: dC3MrapHs3ktwPi1uy_-vp
access_token: {}
progress:
type: integer
example: 0
default: 0
batch_size:
type: integer
example: 999
default: 0
'401':
description: '401'
content:
text/plain:
examples:
Check API key:
value: Invalid API key. See https://docs.apollo.io/reference/authentication for how to authenticate.
'403':
description: '403'
content:
application/json:
examples:
Need master API key:
value: "{\n \"error\": \"This API key is not authorized to access api/v1/emailer_campaigns/remove_or_stop_contact_ids.\
\ Request an API key from your administrator that includes this endpoint in its configured scope.\",\n\
\ \"error_code\": \"API_INACCESSIBLE\"\n}"
schema:
type: object
properties:
error:
type: string
example: This API key is not authorized to access api/v1/emailer_campaigns/remove_or_stop_contact_ids.
Request an API key from your administrator that includes this endpoint in its configured scope.
error_code:
type: string
example: API_INACCESSIBLE
'429':
description: '429'
content:
application/json:
examples:
Too many requests:
value: "{\n \"message\": \"The maximum number of api calls allowed for api/v1/emailer_campaigns/remove_or_stop_contact_ids\
\ is 600 times per hour. Please upgrade your plan from https://app.apollo.io/#/settings/plans/upgrade.\"\
\n}"
schema:
type: object
properties:
message:
type: string
example: The maximum number of api calls allowed for api/v1/emailer_campaigns/remove_or_stop_contact_ids
is 600 times per hour. Please upgrade your plan from https://app.apollo.io/#/settings/plans/upgrade.
deprecated: false
/sequences:
post:
summary: Create a Sequence
description: '## Endpoint essentials
**API key access:** `api/v1/sequences/create` or `Master API key`
**OAuth scopes:** `emailer_campaigns_create`
**Credit usage:** `0 credits` — [Learn more about API pricing and credits](https://docs.apollo.io/docs/api-pricing).
Sequences
are outreach campaigns that sales teams use to reach out to contacts over a planned period of time.
Use the
Create a Sequence endpoint to create a new sequence in your team''s Apollo account, including its steps and email
templates.
To create a sequence with steps, add the `emailer_steps` array to the request body. Each email step
(`auto_email`, `manual_email`) can include one or more `emailer_touches` (email variants); adding more than one touch
to a step creates an A/B test, which requires a plan with A/B testing access.
To activate the sequence immediately
after creation, set `active` to `true`. Email touches only send if their `status` is `approved`, and a touch can only
be approved if its template has a non-empty body.
### Who owns a sequence created via API
The new sequence is owned by the user your request acts as, returned as `object_owner_id` (and its alias, `user_id`).
With an API key that user isn''t the teammate who created the key, so expect `object_owner_id` to differ from that
teammate''s profile — see [Authentication](https://docs.apollo.io/reference/authentication) for how the acting user
is resolved and how to confirm it.
This endpoint ignores `user_id` in the request body, so you can''t choose the owner at creation time. To reassign
ownership afterward, call [Update a Sequence](https://docs.apollo.io/reference/update-sequence) with a `user_id`.'
tags:
- Sequences
operationId: create-sequence
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
name:
type: string
description: 'A human-readable name for the sequence.
Example: `Q3 Outbound Outreach`'
permissions:
type: string
deprecated: true
description: '**Deprecated.** This parameter is still accepted, but it no longer controls who can access
the sequence and it is no longer returned in any sequence response.
New sequences are created
with restricted visibility, so only the owner can access the sequence until it is shared. To share it,
call the Update a Sequence endpoint with
the `sharing_permission` object.'
active:
type: boolean
description: Set to `true` to activate the sequence immediately after creation so contacts added to it start
receiving steps. If omitted or `false`, the sequence is created in an inactive state.
emailer_schedule_id:
type: string
description: The Apollo ID for the schedule that controls the days and times emails are sent. The schedule
must belong to your team and must not be empty.
user_id:
type: string
description: Ignored by this endpoint. The new sequence is always owned by the user your request acts as,
returned as `object_owner_id` (alias `user_id`) — see Authentication
for which user that is.
To assign a different owner, create the sequence and then call the Update a Sequence endpoint with the `user_id`
you want.
label_names:
type: array
items:
type: string
description: 'Add the names of lists (labels) to apply to the sequence. Labels that do not exist yet are
created.
Example: `["Outbound", "Q3"]`'
folder_id:
type: string
description: The Apollo ID for the folder in which to place the sequence.
sequence_by_exact_daytime:
type: boolean
description: Set to `true` to schedule every step at an exact date and time (`exact_datetime` becomes required
on each step) instead of using relative wait intervals (`wait_time`/`wait_mode`).
max_emails_per_day:
type: integer
description: The maximum number of emails the sequence sends per day. Must not be negative.
mark_finished_if_reply:
type: boolean
description: Set to `true` to mark contacts as finished in the sequence when they reply to an email.
mark_finished_if_click:
type: boolean
description: Set to `true` to mark contacts as finished in the sequence when they click a link in an email.
mark_finished_if_interested:
type: boolean
description: Set to `true` to mark contacts as finished in the sequence when they are marked as interested.
mark_paused_if_ooo:
type: boolean
description: Set to `true` to pause contacts in the sequence when an out-of-office auto-reply is detected.
days_to_wait_before_mark_as_response:
type: integer
description: The number of days to wait before an incoming email is no longer treated as a response to the
sequence.
create_task_if_email_open:
type: boolean
description: Set to `true` to automatically create a task when a contact opens an email a certain number
of times. Use `email_open_trigger_task_threshold` to set the number of opens.
email_open_trigger_task_threshold:
type: integer
description: The number of email opens that triggers task creation when `create_task_if_email_open` is `true`.
same_account_reply_delay_days:
type: integer
description: The number of days to pause other contacts at the same account after a reply is received. The
maximum value is `1000`.
excluded_account_stage_ids:
type: array
items:
type: string
description: The Apollo IDs for account stages to exclude from the sequence. All IDs must belong to your
team.
excluded_contact_stage_ids:
type: array
items:
type: string
description: The Apollo IDs for contact stages to exclude from the sequence. All IDs must belong to your
team.
ignore_apollo_global_email_bounce_list:
type: boolean
description: Set to `true` to send emails to contacts even if their email address is on Apollo's global
bounce list.
sequence_ruleset_id:
type: string
description: The Apollo ID for an existing sequence ruleset to apply shared sequence settings.
emailer_steps:
type: array
description: The steps to create in the sequence. Steps run in the order they appear in this array; the
first item becomes the first step. There is no separate ordering field on input.
items:
type: object
properties:
type:
type: string
description: 'The type of step. Choose 1 of the following options: - `auto_email`: An email
that Apollo sends automatically.
- `manual_email`: An email task that a user sends manually.
- `call`:
A phone call task.
- `action_item`: A general to-do task.
- `linkedin_step_connect`:
A LinkedIn connection request task.
- `linkedin_step_message`: A LinkedIn message task.
- `linkedin_step_view_profile`:
A LinkedIn profile view task.
- `linkedin_step_interact_post`: A LinkedIn post interaction
task.
Step types other than `auto_email` require a plan with access to basic task functions.'
wait_time:
type: integer
description: 'How long to wait after the previous step before this step runs. Required (along with
`wait_mode`) unless the sequence uses `sequence_by_exact_daytime`.
Example: `2`'
wait_mode:
type: string
description: 'The unit for `wait_time`. Choose 1 of the following options: `minute`, `hour`, `day`.'
exact_datetime:
type: string
description: The exact date and time at which the step runs, in ISO 8601 format. Required for each
step when `sequence_by_exact_daytime` is `true`; must be in the future and later than the datetimes
of all previous steps.
priority:
type: string
description: 'The priority of the task created for the step. Choose 1 of the following options: `high`,
`medium`, `low`. Not applicable to `auto_email` steps.'
note:
type: string
description: A note describing the step (for example, call talking points or action item instructions).
max_emails_per_day:
type: integer
description: The maximum number of emails to send per day for this step.
auto_skip_in_x_days:
type: integer
description: Automatically skip the task for this step if it is not completed within the given number
of days.
emailer_touches:
type: array
description: The email variants for the step. Applies to `auto_email`, `manual_email`, `linkedin_step_message`,
`linkedin_step_connect`, and `call` steps. Adding more than 1 touch to a step creates an A/B test,
which requires a plan with A/B testing access.
items:
type: object
properties:
type:
type: string
description: 'How the email threads with earlier steps. Choose 1 of the following options: - `new_thread`:
Start a new email thread.
- `reply_to_thread`: Reply to the thread started by a previous
step. A `reply_to_thread` touch must come after a step that starts a new thread.
'
status:
type: string
description: 'The review status of the touch. Choose 1 of the following options: - `approved`:
The touch is approved and will be sent. Requires a template with a non-empty body.
- `to_be_reviewed`:
The touch requires review before it sends. (default)
'
include_signature:
type: boolean
description: Set to `true` to append the sending user's email signature to the email.
emailer_template:
type: object
description: The email content for the touch. Provide `id` to update an existing template that
your team owns, or omit `id` to create a new template.
properties:
id:
type: string
description: The Apollo ID for an existing email template to use and update.
subject:
type: string
description: The subject line for the email. Supports dynamic variables such as `{{first_name}}`.
Leave empty on a `reply_to_thread` touch to reuse the thread's subject.
body_html:
type: string
description: The HTML body for the email. Supports dynamic variables such as `{{first_name}}`.
The HTML is sanitized; unsafe tags and attributes are removed.
attachment_ids:
type: array
items:
type: string
description: The Apollo IDs for attachments to include with the email.
examples:
Create and activate a 2-step sequence:
value:
name: Q3 Outbound Outreach
active: true
emailer_schedule_id: 66e9e215ece19801b2199900
label_names:
- Outbound
emailer_steps:
- type: auto_email
wait_time: 0
wait_mode: minute
emailer_touches:
- type: new_thread
status: approved
include_signature: true
emailer_template:
subject: Quick question, {{first_name}}
body_html: Hi {{first_name}},
I noticed {{company}} is growing quickly...
- type: auto_email
wait_time: 3
wait_mode: day
emailer_touches:
- type: reply_to_thread
status: approved
include_signature: true
emailer_template:
subject: ''
body_html: Hi {{first_name}}, just floating this back to the top of your inbox.
responses:
'200':
description: '200'
content:
application/json:
examples:
OK:
value:
emailer_campaign:
id: 68b1f3a2e1d2c40001a23b45
name: Q3 Outbound Outreach
description: null
archived: false
created_at: '2026-06-12T10:15:30.000Z'
emailer_schedule_id: 66e9e215ece19801b2199900
max_emails_per_day: null
user_id: 60affe7d6e270a00f5db6fe4
same_account_reply_policy_cd: null
excluded_account_stage_ids: []
excluded_contact_stage_ids: []
contact_email_event_to_stage_mapping: {}
label_ids:
- 68b1f3a3e1d2c40001a23b50
create_task_if_email_open: null
email_open_trigger_task_threshold: null
mark_finished_if_click: null
active: true
days_to_wait_before_mark_as_response: null
starred_by_user_ids: []
mark_finished_if_reply: null
mark_finished_if_interested: null
mark_paused_if_ooo: null
sequence_by_exact_daytime: null
last_used_at: null
sequence_ruleset_id: null
ignore_apollo_global_email_bounce_list: null
folder_id: null
same_account_reply_delay_days: null
is_performing_poorly: false
num_contacts_email_status_extrapolated: null
remind_ab_test_results: null
ab_test_step_ids: []
prioritized_by_user: null
creation_type: new
object_owner_id: 60affe7d6e270a00f5db6fe4
dmp_ids: []
content_center_type: null
product_profile_ids: []
status_reason: manual_approve
auto_pause_warning_level: null
auto_paused_at: null
auto_pause_bounce_rate: null
allowed_send_from_domains: []
project_workspace_context: {}
num_steps: 2
unique_scheduled: loading
unique_delivered: loading
unique_bounced: loading
unique_opened: loading
unique_hard_bounced: loading
unique_spam_blocked: loading
unique_replied: loading
unique_demoed: loading
unique_clicked: loading
unique_unsubscribed: loading
unique_opened_unfiltered: loading
unique_clicked_unfiltered: loading
unique_delivered_open_tracked: loading
unique_delivered_click_tracked: loading
bounce_rate: loading
open_rate: loading
click_rate: loading
reply_rate: loading
spam_block_rate: loading
opt_out_rate: loading
demo_rate: loading
loaded_stats: true
contact_statuses:
active: 0
failed: 0
paused: 0
finished: 0
bounced: 0
hard_bounced: 0
spam_blocked: 0
not_sent: 0
cc_emails: ''
bcc_emails: ''
underperforming_touches_count: 0
sharing_permission:
visibility: restricted
access_type: null
object_type: EmailerCampaign
object_id: 68b1f3a2e1d2c40001a23b45
is_owner: true
owner_id: 60affe7d6e270a00f5db6fe4
sharing_accesses: []
auto_pause_enabled: false
auto_pause_config:
evaluation_window_days: 7
min_volume: 200
warning_threshold_pct: 7
auto_pause_threshold_pct: 10
sharing_accesses: []
emailer_steps:
- id: 68b1f3a2e1d2c40001a23b46
emailer_campaign_id: 68b1f3a2e1d2c40001a23b45
position: 1
wait_time: 0
type: auto_email
wait_mode: minute
note: null
max_emails_per_day: null
exact_datetime: null
priority: null
auto_skip_in_x_days: null
counts:
active: 0
paused: 0
finished: 0
bounced: 0
spam_blocked: 0
hard_bounced: 0
not_sent: 0
ab_test_details: {}
- id: 68b1f3a2e1d2c40001a23b47
emailer_campaign_id: 68b1f3a2e1d2c40001a23b45
position: 2
wait_time: 3
type: auto_email
wait_mode: day
note: null
max_emails_per_day: null
exact_datetime: null
priority: null
auto_skip_in_x_days: null
counts:
active: 0
paused: 0
finished: 0
bounced: 0
spam_blocked: 0
hard_bounced: 0
not_sent: 0
ab_test_details: {}
emailer_touches:
- id: 68b1f3a2e1d2c40001a23b48
emailer_step_id: 68b1f3a2e1d2c40001a23b46
emailer_template_id: 68b1f3a2e1d2c40001a23b4a
status: approved
type: new_thread
include_signature: true
has_personalized_opener: null
personalized_opener_fallback_option: send_without_opener
generic_personalized_opener: null
template_type: null
generation_options: []
generation_tone: {}
content_center_type: null
product_profile_ids: []
composition_mode: null
project_workspace_id: null
unique_scheduled: loading
unique_delivered: loading
unique_delivered_open_tracked: loading
unique_delivered_click_tracked: loading
unique_bounced: loading
unique_hard_bounced: loading
unique_spam_blocked: loading
unique_opened: loading
unique_opened_unfiltered: loading
unique_clicked: loading
unique_clicked_unfiltered: loading
unique_replied: loading
unique_demoed: loading
unique_unsubscribed: loading
bounce_rate: loading
hard_bounce_rate: loading
spam_block_rate: loading
open_rate: loading
open_rate_unfiltered: loading
open_rate_tracked: loading
open_rate_unfiltered_tracked: loading
click_rate: loading
click_rate_unfiltered: loading
click_rate_tracked: loading
click_rate_unfiltered_tracked: loading
reply_rate: loading
demo_rate: loading
opt_out_rate: loading
- id: 68b1f3a2e1d2c40001a23b49
emailer_step_id: 68b1f3a2e1d2c40001a23b47
emailer_template_id: 68b1f3a2e1d2c40001a23b4b
status: approved
type: reply_to_thread
include_signature: true
has_personalized_opener: null
personalized_opener_fallback_option: send_without_opener
generic_personalized_opener: null
template_type: null
generation_options: []
generation_tone: {}
content_center_type: null
product_profile_ids: []
composition_mode: null
project_workspace_id: null
unique_scheduled: loading
unique_delivered: loading
unique_delivered_open_tracked: loading
unique_delivered_click_tracked: loading
unique_bounced: loading
unique_hard_bounced: loading
unique_spam_blocked: loading
unique_opened: loading
unique_opened_unfiltered: loading
unique_clicked: loading
unique_clicked_unfiltered: loading
unique_replied: loading
unique_demoed: loading
unique_unsubscribed: loading
bounce_rate: loading
hard_bounce_rate: loading
spam_block_rate: loading
open_rate: loading
open_rate_unfiltered: loading
open_rate_tracked: loading
open_rate_unfiltered_tracked: loading
click_rate: loading
click_rate_unfiltered: loading
click_rate_tracked: loading
click_rate_unfiltered_tracked: loading
reply_rate: loading
demo_rate: loading
opt_out_rate: loading
emailer_templates:
- id: 68b1f3a2e1d2c40001a23b4a
name: null
user_id: 60affe7d6e270a00f5db6fe4
starred_by_user_ids: []
subject: Quick question, {{first_name}}
archived: null
created_at: '2026-06-12T10:15:30.000Z'
global: false
body_text: null
folder_id: null
body_html: Hi {{first_name}},
I noticed {{company}} is growing quickly...
creation_type: null
prompt_template_id: null
description: null
highlights: null
has_ai_variables: false
label_ids: []
prompt_id: null
- id: 68b1f3a2e1d2c40001a23b4b
name: null
user_id: 60affe7d6e270a00f5db6fe4
starred_by_user_ids: []
subject: ''
archived: null
created_at: '2026-06-12T10:15:30.000Z'
global: false
body_text: null
folder_id: null
body_html: Hi {{first_name}}, just floating this back to the top of your inbox.
creation_type: null
prompt_template_id: null
description: null
highlights: null
has_ai_variables: false
label_ids: []
prompt_id: null
attachments: []
team:
id: 5f2f4b5e9c1d4e0001b6c7d8
sequences_finder_empty: false
summary: OK
schema:
type: object
properties:
emailer_campaign:
type: object
description: The newly created sequence, including its settings, aggregate email stats (`loading` until
computed), contact status counts, and sharing permissions.
properties:
id:
type: string
example: 68b1f3a2e1d2c40001a23b45
name:
type: string
example: Q3 Outbound Outreach
active:
type: boolean
example: true
user_id:
type: string
example: 60affe7d6e270a00f5db6fe4
emailer_schedule_id:
type: string
example: 66e9e215ece19801b2199900
num_steps:
type: integer
example: 2
creation_type:
type: string
example: new
created_at:
type: string
example: '2026-06-12T10:15:30.000Z'
sharing_permission:
type: object
description: Who can see and act on the sequence. This replaced the legacy `permissions` field, which
is no longer returned. New sequences start with `restricted` visibility.
See the Search
for Sequences endpoint for the full shape of this object.
properties:
visibility:
type: string
enum:
- restricted
- everyone
example: restricted
access_type:
type: string
enum:
- can_view
- can_edit
- full_access
nullable: true
example: null
is_owner:
type: boolean
example: true
owner_id:
type: string
example: 60affe7d6e270a00f5db6fe4
emailer_steps:
type: array
description: The steps created in the sequence.
items:
type: object
properties:
id:
type: string
example: 68b1f3a2e1d2c40001a23b46
emailer_campaign_id:
type: string
example: 68b1f3a2e1d2c40001a23b45
position:
type: integer
example: 1
type:
type: string
example: auto_email
wait_time:
type: integer
example: 3
wait_mode:
type: string
example: day
emailer_touches:
type: array
description: The email variants created for each step, with their review status and per-touch email stats.
items:
type: object
properties:
id:
type: string
example: 68b1f3a2e1d2c40001a23b48
emailer_step_id:
type: string
example: 68b1f3a2e1d2c40001a23b46
emailer_template_id:
type: string
example: 68b1f3a2e1d2c40001a23b4a
status:
type: string
example: approved
type:
type: string
example: new_thread
emailer_templates:
type: array
description: The email templates created or updated for the sequence's touches.
items:
type: object
properties:
id:
type: string
example: 68b1f3a2e1d2c40001a23b4a
subject:
type: string
example: Quick question, {{first_name}}
body_html:
type: string
example: Hi {{first_name}},
attachments:
type: array
items:
type: object
'401':
description: '401'
content:
text/plain:
examples:
Check API key:
value: Invalid API key. See https://docs.apollo.io/reference/authentication for how to authenticate.
'403':
description: '403'
content:
application/json:
examples:
Need master API key:
value: "{\n \"error\": \"This API key is not authorized to access api/v1/sequences/create. Request an API\
\ key from your administrator that includes this endpoint in its configured scope.\",\n \"error_code\"\
: \"API_INACCESSIBLE\"\n}"
schema:
type: object
properties:
error:
type: string
example: This API key is not authorized to access api/v1/sequences/create. Request an API key from your
administrator that includes this endpoint in its configured scope.
error_code:
type: string
example: API_INACCESSIBLE
'422':
description: '422'
content:
application/json:
examples:
Missing create permission:
value: "{\n \"error\": \"You do not have the permission to create sequences.\"\n}"
Sequence limit reached:
value: "{\n \"error\": \"Your plan is limited to 2 sequences. Learn more about our paid plans. \"\n}"
Step limit reached:
value: "{\n \"error\": \"Your plan is limited to 5 sequence steps. Learn more about our paid plans.\"\n}"
Approved touch with empty template:
value: "{\n \"error\": \"Please make sure your template has content before turning it on.\"\n}"
A/B testing not available on plan:
value: "{\n \"error\": \"Your current plan does not allow A/B Testing.\",\n \"code\": \"ab_testing_limit\"\
\n}"
Empty schedule:
value: "{\n \"error\": \"The schedule you are trying to attach to this sequence is empty. You cannot attach\
\ an empty schedule to the sequence\"\n}"
Missing wait time:
value: "{\n \"error\": \"Wait time must not be empty\"\n}"
schema:
type: object
properties:
error:
type: string
example: You do not have the permission to create sequences.
'429':
description: '429'
content:
application/json:
examples:
Concurrent request for the same team:
value: "{\n \"error\": \"We are already processing the request for your sequence\"\n}"
Too many requests:
value: "{\n \"message\": \"The maximum number of api calls allowed for api/v1/sequences/create is 600\
\ times per hour. Please upgrade your plan from https://app.apollo.io/#/settings/plans/upgrade.\"\n}"
deprecated: false
/sequences/{id}:
put:
summary: Update a Sequence
description: '## Endpoint essentials
**API key access:** `api/v1/sequences/update` or `Master API key`
**OAuth scopes:** `emailer_campaigns_update`
**Credit usage:** `0 credits` — [Learn more about API pricing and credits](https://docs.apollo.io/docs/api-pricing).
Sequences
are outreach campaigns that sales teams use to reach out to contacts over a planned period of time.
Use the
Update a Sequence endpoint to update an existing sequence (emailer campaign) in your team''s Apollo account.
You
can update sequence-level settings, such as the name, active state, schedule, and sending limits, as well as the sequence''s
steps and the email touches within each step.
To turn a sequence on or off, set the `active` field. Passing
`emailer_steps` will create, update, reorder, or remove steps and their touches based on the IDs you provide.
To
create a new sequence instead, use the Create a Sequence
endpoint.
### Reassigning sequence ownership
Unlike [Create a Sequence](https://docs.apollo.io/reference/create-sequence), this endpoint accepts `user_id` and
uses it to change who owns the sequence. Pass the intended owner''s Apollo user ID, and the response reflects it in
both `user_id` and its alias `object_owner_id`. Use [Get a List of Users](https://docs.apollo.io/reference/get-a-list-of-users)
to look up IDs.
This is how you correct ownership on sequences created with an API key, which aren''t owned by the teammate who created
the key. See [Authentication](https://docs.apollo.io/reference/authentication) for how the acting user is resolved.'
tags:
- Sequences
operationId: update-sequence
parameters:
- name: id
in: path
description: 'The Apollo ID for the sequence that you want to update.
To find sequence IDs, call the Search for Sequences endpoint and identify the `id` value for the sequence.
Example:
`66e34b81740c50074e3d1bd4`'
schema:
type: string
required: true
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
name:
type: string
description: 'Update the name of the sequence. Example: `New outbound sequence`'
active:
type: boolean
description: Turn the sequence on (`true`) or off (`false`). When set to `true`, Apollo resumes scheduling
for the sequence; when set to `false`, pending work is paused.
creation_type:
type: string
description: The creation type for the sequence. A `draft` sequence is automatically promoted to `new` (or
`ai_assistant`) when steps are added.
enum:
- draft
- new
- ai_assistant
permissions:
type: string
deprecated: true
description: '**Deprecated.** This parameter is still accepted, but it no longer controls who can access
the sequence and it is no longer returned in any sequence response. Use `sharing_permission` instead.'
sharing_permission:
type: object
description: Update who can access the sequence. This replaced the legacy `permissions` parameter.
Changing
`access_type` or any of the sharing access arrays requires a plan that includes sharing; `visibility`
can be updated on any plan.
properties:
visibility:
type: string
description: Set to `everyone` to share the sequence with your whole team, or `restricted` to limit
it to the owner and the users or teams listed in `sharing_accesses`.
Changing `visibility`
resets `access_type` to `can_view` when the new value is `everyone`, and to `null` when it is `restricted`.
enum:
- restricted
- everyone
access_type:
type: string
description: 'The level of access your team receives when `visibility` is `everyone`. Ignored when `visibility`
is `restricted`.
Choose 1 of the following options: - `can_view`: Team members can view
the sequence.
- `can_edit`: Team members can view and edit the sequence.
- `full_access`:
Team members can view, edit, and share the sequence.
'
enum:
- can_view
- can_edit
- full_access
added_sharing_accesses:
type: array
description: Share the sequence with specific users or teams, in addition to whatever `visibility` grants.
Note that the response returns the current shares as a single `sharing_accesses` array; to
change them, use these `added_`, `updated_`, and `deleted_` arrays instead.
If an entry sets
`user_or_team_type` to `team`, its `access_type` also overrides the `access_type` you pass at the
top level of `sharing_permission`.
items:
type: object
properties:
user_or_team_id:
type: string
description: The Apollo ID for the user or team to share the sequence with.
user_or_team_type:
type: string
description: Whether `user_or_team_id` refers to an individual user, a team, or a subteam.
enum:
- user
- team
- subteam
access_type:
type: string
description: The level of access to grant.
enum:
- can_view
- can_edit
- full_access
updated_sharing_accesses:
type: array
description: Change the access level of users or teams the sequence is already shared with. Entries
are matched on `user_or_team_id`; an entry for the sequence owner is ignored.
items:
type: object
properties:
user_or_team_id:
type: string
description: The Apollo ID for the user or team whose access you want to change.
access_type:
type: string
description: The new level of access.
enum:
- can_view
- can_edit
- full_access
deleted_sharing_accesses:
type: array
description: Stop sharing the sequence with specific users or teams. Entries are matched on `user_or_team_id`;
an entry for the sequence owner is ignored.
items:
type: object
properties:
user_or_team_id:
type: string
description: The Apollo ID for the user or team to remove access from.
user_id:
type: string
description: 'Reassign the sequence to a different owner. Pass the Apollo user ID of the intended owner;
the response returns it as `user_id` and its alias `object_owner_id`.
Use this to correct ownership
on sequences created with an API key, which aren''t owned by the teammate who created the key (see Authentication). Create
a Sequence ignores `user_id`, so reassignment happens here.
Use the Get
a List of Users endpoint to retrieve IDs for the users in your workspace. Example: `66302798d03b9601c7934ebf`'
emailer_schedule_id:
type: string
description: 'Attach a sending schedule to the sequence. Must reference a non-empty schedule that belongs
to your team. Example: `6095a710bd01d100a506d4af`'
label_names:
type: array
description: Replace the labels (folders) this sequence belongs to. Passing new values will overwrite the
existing labels.
items:
type: string
max_emails_per_day:
type: integer
description: Maximum number of emails that can be sent per day for this sequence.
same_account_reply_delay_days:
type: integer
description: Number of days to wait before contacting another person at the same account.
cc_emails:
type: string
description: Comma-separated list of email addresses to CC on emails sent from this sequence.
bcc_emails:
type: string
description: Comma-separated list of email addresses to BCC on emails sent from this sequence.
emailer_steps:
type: array
description: The ordered list of steps in the sequence. Include an `id` to update an existing step; omit
it to create a new step. Steps that exist on the sequence but are not present in this array are removed.
items:
type: object
properties:
id:
type: string
description: The Apollo ID of an existing step to update. Omit to create a new step.
position:
type: integer
description: 'The 1-based position of the step within the sequence. Example: `1`'
type:
type: string
description: The step type.
example: auto_email
wait_mode:
type: string
description: 'The unit used for the wait before this step runs. Example: `day`'
wait_time:
type: integer
description: 'How long to wait (in `wait_mode` units) before running this step. Example: `1`'
auto_skip_in_x_days:
type: integer
description: Automatically skip this step if it has not run within the given number of days.
emailer_touches:
type: array
description: The email touches that belong to this step. Include an `id` to update an existing touch;
omit it to create a new touch.
items:
type: object
properties:
id:
type: string
description: The Apollo ID of an existing touch to update. Omit to create a new touch.
status:
type: string
description: The review status of the touch. Set to `approved` to enable the touch (the template
must have a non-empty body).
enum:
- to_be_reviewed
- approved
attachment_ids:
type: array
description: IDs of attachments to include with this touch.
items:
type: string
emailer_template:
type: object
description: The email template content for this touch.
properties:
subject:
type: string
description: 'The subject line of the email. Example: `Quick question, {{first_name}}`'
body_html:
type: string
description: 'The HTML body of the email. Example: `Hi {{first_name}}
`'
generation_options:
type: array
description: AI generation options used to compose the touch content.
items:
type: object
properties:
type:
type: string
example: ai_full_email
additional_prompt:
type: string
signals:
type: array
items:
type: string
field_name:
type: string
example: AI Full Email df7fdbd8
generation_tone:
type: object
description: The tone to apply when generating the touch content with AI.
properties:
tone_type:
type: string
example: Direct
tone_sample:
type: string
examples:
Rename a sequence:
summary: Update sequence-level settings
value:
name: Q3 Outbound Outreach (revised)
max_emails_per_day: 50
Reassign the sequence owner:
summary: Hand a sequence created with an API key to a specific user
value:
user_id: 66302798d03b9601c7934ebf
responses:
'200':
description: '200'
content:
application/json:
examples:
Result:
value:
id: 66e34b81740c50074e3d1bd4
name: first campaign
active: true
archived: false
created_at: '2024-09-12T20:13:53.207Z'
updated_at: '2024-09-12T20:14:53.134Z'
num_steps: 1
steps:
- id: 66e361494acd1307386d4073
position: 1
step_type: auto_email
wait_time: 1
wait_mode: day
auto_skip_in_x_days: null
emailer_campaign:
id: 66e34b81740c50074e3d1bd4
name: first campaign
active: true
emailer_steps:
- id: 66e361494acd1307386d4073
position: 1
emailer_touches:
- id: 66e361494acd1307386d4074
status: approved
schema:
type: object
properties:
id:
type: string
example: 66e34b81740c50074e3d1bd4
name:
type: string
example: first campaign
active:
type: boolean
example: true
archived:
type: boolean
example: false
created_at:
type: string
example: '2024-09-12T20:13:53.207Z'
updated_at:
type: string
example: '2024-09-12T20:14:53.134Z'
num_steps:
type: integer
example: 1
steps:
type: array
items:
type: object
properties:
id:
type: string
example: 66e361494acd1307386d4073
position:
type: integer
example: 1
step_type:
type: string
example: auto_email
wait_time:
type: integer
example: 1
wait_mode:
type: string
example: day
auto_skip_in_x_days: {}
emailer_campaign:
type: object
properties:
id:
type: string
example: 66e34b81740c50074e3d1bd4
name:
type: string
example: first campaign
active:
type: boolean
example: true
emailer_steps:
type: array
items:
type: object
properties:
id:
type: string
example: 66e361494acd1307386d4073
position:
type: integer
example: 1
emailer_touches:
type: array
items:
type: object
properties:
id:
type: string
example: 66e361494acd1307386d4074
status:
type: string
example: approved
'401':
description: '401'
content:
text/plain:
examples:
Check API key:
value: Invalid API key. See https://docs.apollo.io/reference/authentication for how to authenticate.
'404':
description: '404'
content:
application/json:
examples:
Sequence not found:
value:
error: Record not found.
schema:
type: object
properties:
error:
type: string
example: Record not found.
'422':
description: '422'
content:
application/json:
examples:
Empty template body:
value:
error: Please make sure your template has a non-empty body before turning it on.
Empty schedule:
value:
error: The schedule you are trying to attach to this sequence is empty. You cannot attach an empty schedule
to the sequence
schema:
type: object
properties:
error:
type: string
example: Please make sure your template has a non-empty body before turning it on.
'429':
description: '429'
content:
application/json:
examples:
Too many requests:
value:
error: We are already processing the request for your sequence
schema:
type: object
properties:
error:
type: string
example: We are already processing the request for your sequence
deprecated: false
/emailer_messages/{id}/activities:
get:
summary: Check Email Stats
description: '## Endpoint essentials
**API key access:** `Master API key`
**OAuth scopes:** `Not supported`
**Credit usage:** `0 credits` — [Learn more about API pricing and credits](https://docs.apollo.io/docs/api-pricing).
Sequences
are outreach campaigns that sales teams use to reach out to contacts over a planned period of time.
Use the
Check Email Stats endpoint to review the complete details for an email sent as part of an Apollo sequence. This includes
the contents of the emails, stats related to the email such as opens and clicks, and details about the contact that
received the email.'
tags:
- Sequences
operationId: get_emailstats
responses:
'200':
description: OK
content:
application/json:
examples:
OK:
summary: OK
value: "{\n \"activities\": [\n {\n \"id\": \"684b2203a2ce950021cbf730\",\n \"type\": \"emailer_message\"\
,\n \"emailer_message_id\": \"684b2203a2ce950021cbf730\",\n \"emailer_message\": {\n \
\ \"id\": \"684b2203a2ce950021cbf730\",\n \"user_id\": \"66302798d03b9601c7934ebf\",\n \"\
status\": \"completed\",\n \"time_zone\": \"America/Los_Angeles\",\n \"provider_message_id\"\
: \"1976610a368f41f9\",\n \"to_name\": \"Gina Larkin\",\n \"due_at\": \"2025-06-12T21:32:10.580+00:00\"\
,\n \"completed_at\": \"2025-06-12T21:34:16.411+00:00\",\n \"emailer_touch_id\": \"684b216ec95a4f001d968d1b\"\
,\n \"emailer_campaign_id\": \"684b215edf80730019db612c\",\n \"emailer_step_id\": \"684b216ec95a4f001d968d19\"\
,\n \"failed_at\": \"2025-06-12T19:04:06.820+00:00\",\n \"failure_reason\": \"Account stage\
\ is Active Opportunity. Change stage for account or adjust settings under Sequence => Settings and retry.\"\
,\n \"attachment_ids\": [],\n \"enable_tracking\": true,\n \"type\": \"outreach_automatic_email\"\
,\n \"contact_id\": \"66ad20ab23d5d40001c8d07d\",\n \"provider_thread_id\": \"197660da712c817b\"\
,\n \"schedule_delayed_reason\": null,\n \"demoed\": null,\n \"email_account_id\"\
: \"6633baaece5fbd01c791d7ca\",\n \"due_at_manually_changed\": true,\n \"not_sent_reason\"\
: \"account_stage_safeguard\",\n \"bounce\": false,\n \"spam_blocked\": false,\n \
\ \"tracking_disabled_reason\": null,\n \"created_at\": \"2025-06-12T18:52:51.021Z\",\n \
\ \"async_sending\": false,\n \"due_at_source\": \"Email was sent using Send Now action\",\n \
\ \"crm_id\": null,\n \"replied\": null,\n \"needs_dynamic_assemble\": false,\n \
\ \"personalized_opener\": null,\n \"reply_class\": null,\n \"schedule_delayed_limit_reason\"\
: null,\n \"schedule_delayed_reason_details\": null,\n \"sensitive_info_redacted\": null,\n\
\ \"account_id\": \"6518c6184f20350001a0b9c0\",\n \"recipients\": [\n {\n \
\ \"email\": \"gina.larkin@apollo.io\",\n \"raw_name\": \"Gina Larkin\",\n \
\ \"recipient_type_cd\": \"to\",\n \"contact_id\": \"66ad20ab23d5d40001c8d07d\",\n \
\ \"user_id\": null\n }\n ],\n \"send_from\": {\n \"email\": \"test.marcus.hale@apollomail.io\"\
,\n \"raw_name\": \"David Smith\",\n \"recipient_type_cd\": null,\n \"contact_id\"\
: null,\n \"user_id\": null\n },\n \"from_email\": \"test.marcus.hale@apollomail.io\"\
,\n \"to_email\": \"gina.larkin@apollo.io\",\n \"from_name\": \"David Smith\",\n \
\ \"bcc_emails\": [],\n \"cc_emails\": [],\n \"send_from_info\": \"6633baaece5fbd01c791d7ca***test.marcus.hale@apollomail.io\"\
,\n \"body_text\": \"Check out my email now!\\nDavid SmithApollo Knowledge Base \",\n \"\
body_html\": \"\\n
Check out my email now!
\\n
David\
\ Smith
\\n
\\\
n
\\n
\",\n \"body_html_loaded\": true,\n \"appendment_html\"\
: \"\",\n \"appendment_html_loaded\": true,\n \"subject\": \"Stats for you\",\n \"\
emailer_message_events\": [],\n \"num_opens\": 0,\n \"num_clicks\": 0,\n \"campaign_name\"\
: \"Stats Sequences DO NOT USE\",\n \"campaign_max_emails_per_day\": null,\n \"campaign_position\"\
: 1,\n \"step_max_emails_per_day\": null\n }\n }\n ],\n \"emailer_message\": {\n \"\
id\": \"684b2203a2ce950021cbf730\",\n \"user_id\": \"66302798d03b9601c7934ebf\",\n \"status\": \"\
completed\",\n \"time_zone\": \"America/Los_Angeles\",\n \"provider_message_id\": \"1976610a368f41f9\"\
,\n \"to_name\": \"Gina Larkin\",\n \"due_at\": \"2025-06-12T21:32:10.580+00:00\",\n \"completed_at\"\
: \"2025-06-12T21:34:16.411+00:00\",\n \"emailer_touch_id\": \"684b216ec95a4f001d968d1b\",\n \"\
emailer_campaign_id\": \"684b215edf80730019db612c\",\n \"emailer_step_id\": \"684b216ec95a4f001d968d19\"\
,\n \"failed_at\": \"2025-06-12T19:04:06.820+00:00\",\n \"failure_reason\": \"Account stage is Active\
\ Opportunity. Change stage for account or adjust settings under Sequence => Settings and retry.\",\n\
\ \"attachment_ids\": [],\n \"enable_tracking\": true,\n \"type\": \"outreach_automatic_email\"\
,\n \"contact_id\": \"66ad20ab23d5d40001c8d07d\",\n \"provider_thread_id\": \"197660da712c817b\"\
,\n \"schedule_delayed_reason\": null,\n \"demoed\": null,\n \"email_account_id\": \"6633baaece5fbd01c791d7ca\"\
,\n \"due_at_manually_changed\": true,\n \"not_sent_reason\": \"account_stage_safeguard\",\n \
\ \"bounce\": false,\n \"spam_blocked\": false,\n \"tracking_disabled_reason\": null,\n \"created_at\"\
: \"2025-06-12T18:52:51.021Z\",\n \"async_sending\": false,\n \"due_at_source\": \"Email was sent\
\ using Send Now action\",\n \"crm_id\": null,\n \"replied\": null,\n \"needs_dynamic_assemble\"\
: false,\n \"personalized_opener\": null,\n \"reply_class\": null,\n \"schedule_delayed_limit_reason\"\
: null,\n \"schedule_delayed_reason_details\": null,\n \"sensitive_info_redacted\": null,\n \"\
account_id\": \"6518c6184f20350001a0b9c0\",\n \"recipients\": [\n {\n \"email\": \"gina.larkin@apollo.io\"\
,\n \"raw_name\": \"Gina Larkin\",\n \"recipient_type_cd\": \"to\",\n \"contact_id\"\
: \"66ad20ab23d5d40001c8d07d\",\n \"user_id\": null\n }\n ],\n \"send_from\": {\n \
\ \"email\": \"test.marcus.hale@apollomail.io\",\n \"raw_name\": \"David Smith\",\n \"recipient_type_cd\"\
: null,\n \"contact_id\": null,\n \"user_id\": null\n },\n \"from_email\": \"test.marcus.hale@apollomail.io\"\
,\n \"to_email\": \"gina.larkin@apollo.io\",\n \"from_name\": \"David Smith\",\n \"bcc_emails\"\
: [],\n \"cc_emails\": [],\n \"send_from_info\": \"6633baaece5fbd01c791d7ca***test.marcus.hale@apollomail.io\"\
,\n \"body_text\": \"Check out my email now!\\nDavid SmithApollo Knowledge Base \",\n \"body_html\"\
: \"\\n
Check out my email now!
\\n
David\
\ Smith
\\n
\\\
n
\\n
\",\n \"body_html_loaded\": true,\n \"appendment_html\": \"\"\
,\n \"appendment_html_loaded\": true,\n \"subject\": \"Stats for you\",\n \"contact\": {\n \
\ \"contact_roles\": [],\n \"id\": \"66ad20ab23d5d40001c8d07d\",\n \"first_name\": \"Gina\"\
,\n \"last_name\": \"Larkin\",\n \"name\": \"Gina Larkin\",\n \"linkedin_url\": \"http://www.linkedin.com/in/gina-larkin-2e7a4d91\"\
,\n \"title\": \"Technical Writer\",\n \"contact_stage_id\": \"6095a710bd01d100a506d4af\",\n\
\ \"owner_id\": null,\n \"creator_id\": \"669d3cf0105057019a5aca3c\",\n \"person_id\":\
\ \"667a2eb71b47190001e2ef42\",\n \"email_needs_tickling\": false,\n \"organization_name\":\
\ \"Apollo.io\",\n \"source\": \"chrome_extension_salesforce\",\n \"original_source\": \"email_import\"\
,\n \"organization_id\": \"5e66b6381e05b4008c8331b8\",\n \"headline\": \"Technical Writer @\
\ Apollo.io\",\n \"photo_url\": null,\n \"present_raw_address\": \"Hillsboro, Oregon, United\
\ States\",\n \"linkedin_uid\": null,\n \"extrapolated_email_confidence\": null,\n \"salesforce_id\"\
: null,\n \"salesforce_lead_id\": null,\n \"salesforce_contact_id\": null,\n \"salesforce_account_id\"\
: null,\n \"crm_owner_id\": null,\n \"created_at\": \"2024-08-02T18:08:43.785Z\",\n \"\
emailer_campaign_ids\": [\n \"684b215edf80730019db612c\"\n ],\n \"direct_dial_status\"\
: null,\n \"direct_dial_enrichment_failed_at\": null,\n \"city\": \"Hillsboro\",\n \"country\"\
: \"United States\",\n \"state\": \"Oregon\",\n \"email_status\": \"verified\",\n \"email_source\"\
: \"gmail_directory\",\n \"account_id\": \"6518c6184f20350001a0b9c0\",\n \"last_activity_date\"\
: \"2025-06-12T21:34:16.000+00:00\",\n \"hubspot_vid\": null,\n \"hubspot_company_id\": null,\n\
\ \"crm_id\": null,\n \"sanitized_phone\": \"+14155550181\",\n \"merged_crm_ids\": null,\n\
\ \"updated_at\": \"2025-06-12T21:34:16.792Z\",\n \"queued_for_crm_push\": null,\n \"suggested_from_rule_engine_config_id\"\
: null,\n \"email_unsubscribed\": null,\n \"person_deleted\": null,\n \"call_opted_out\"\
: null,\n \"label_ids\": [],\n \"has_pending_email_arcgate_request\": false,\n \"has_email_arcgate_request\"\
: false,\n \"existence_level\": \"full\",\n \"email\": \"gina.larkin@apollo.io\",\n \"\
email_from_customer\": null,\n \"typed_custom_fields\": {},\n \"custom_field_errors\": {},\n\
\ \"crm_record_url\": null,\n \"email_status_unavailable_reason\": null,\n \"email_true_status\"\
: \"Verified\",\n \"updated_email_true_status\": true,\n \"source_display_name\": \"Imported\
\ from Salesforce\",\n \"twitter_url\": null,\n \"facebook_url\": null,\n \"contact_emails\"\
: [\n {\n \"email_md5\": \"407887565213a5673207e861ac3523a3\",\n \"email_sha256\"\
: \"1e86ff1e4d45ea7321e8b39e604fea05e3bde13ff689ddf78afeccce4e53e4e6\",\n \"email_status\": \"\
verified\",\n \"extrapolated_email_confidence\": null,\n \"position\": 0,\n \
\ \"email\": \"gina.larkin@apollo.io\",\n \"free_domain\": false,\n \"source\": \"\
Apollo\",\n \"third_party_vendor_name\": null,\n \"vendor_validation_statuses\": [],\n\
\ \"email_needs_tickling\": false,\n \"email_true_status\": \"Verified\",\n \
\ \"email_status_unavailable_reason\": null\n }\n ],\n \"time_zone\": \"America/Los_Angeles\"\
,\n \"show_intent\": false,\n \"phone_numbers\": [\n {\n \"raw_number\": \"\
+1 415-555-0181\",\n \"sanitized_number\": \"+14155550181\",\n \"type\": \"work_hq\"\
,\n \"position\": 0,\n \"status\": \"no_status\",\n \"dnc_status\": null,\n\
\ \"dnc_other_info\": {},\n \"dialer_flags\": null,\n \"source_name\": \"Apollo\"\
,\n \"vendor_validation_statuses\": [],\n \"third_party_vendor_name\": null\n \
\ }\n ],\n \"account_phone_note\": null,\n \"free_domain\": false,\n \"email_domain_catchall\"\
: false\n },\n \"emailer_message_events\": [],\n \"num_opens\": 0,\n \"num_clicks\": 0,\n\
\ \"campaign_name\": \"Stats Sequences DO NOT USE\",\n \"campaign_max_emails_per_day\": null,\n\
\ \"campaign_position\": 1,\n \"step_max_emails_per_day\": null\n }\n}"
'401':
description: '401'
content:
text/plain:
examples:
Check API key:
value: Invalid API key. See https://docs.apollo.io/reference/authentication for how to authenticate.
'403':
description: Forbidden
content:
application/json:
examples:
Need Master API Key:
value: "{\n \"error\": \"This API key is not authorized to access api/v1/emailer_messages/activities. Request\
\ an API key from your administrator that includes this endpoint in its configured scope.\",\n \"error_code\"\
: \"API_INACCESSIBLE\"\n}"
summary: Need Master API Key
'422':
description: Unprocessable Entity
content:
application/json:
examples:
Email Not Available - Check ID:
value: "{\n \"error\": \"Could not find message.\"\n}"
summary: Email Not Available - Check ID
parameters:
- in: path
name: id
description: 'The ID for the email you want to view.
Each outreach email in Apollo is assigned a unique ID.
To find email IDs, call the Search
for Outreach Emails endpoint and identify the `id` value for the email.
Example: `684b2203a2ce950021cbf730`'
schema:
type: string
required: true
/emailer_messages/search:
get:
summary: Search for Outreach Emails
description: '## Endpoint essentials
**API key access:** `api/v1/emailer_messages/search` or `Master API key`
**OAuth scopes:** `emailer_messages_search`
**Credit usage:** `0 credits` — [Learn more about API pricing and credits](https://docs.apollo.io/docs/api-pricing).
Sequences
are outreach campaigns that sales teams use to reach out to contacts over a planned period of time.
Use the
Search for Outreach Emails endpoint to find emails that your team has created and sent as part of Apollo sequences.
To
protect Apollo''s performance for all users, this endpoint has a display limit of 50,000 records (100 records per
page, up to 500 pages). Add more filters to narrow your search results as much as possible. This limitation does not
restrict your access to Apollo''s database; you just need to access the data in batches.'
tags:
- Sequences
operationId: emailer_messages/search
responses:
'200':
description: OK
content:
application/json:
examples:
OK:
summary: OK
value: "{\n \"breadcrumbs\": [],\n \"emailer_messages\": [\n {\n \"id\": \"684b2203a2ce950021cbf730\"\
,\n \"user_id\": \"66302798d03b9601c7934ebf\",\n \"status\": \"failed\",\n \"time_zone\"\
: \"America/Los_Angeles\",\n \"provider_message_id\": null,\n \"to_name\": \"Gina Larkin\",\n\
\ \"due_at\": \"2025-06-12T18:57:08.553+00:00\",\n \"completed_at\": null,\n \"emailer_touch_id\"\
: \"684b216ec95a4f001d968d1b\",\n \"emailer_campaign_id\": \"684b215edf80730019db612c\",\n \"\
emailer_step_id\": \"684b216ec95a4f001d968d19\",\n \"failed_at\": \"2025-06-12T19:04:06.820+00:00\"\
,\n \"failure_reason\": \"Account stage is Active Opportunity. Change stage for account or adjust\
\ settings under Sequence => Settings and retry.\",\n \"attachment_ids\": [],\n \"enable_tracking\"\
: true,\n \"type\": \"outreach_automatic_email\",\n \"contact_id\": \"66ad20ab23d5d40001c8d07d\"\
,\n \"provider_thread_id\": null,\n \"schedule_delayed_reason\": null,\n \"demoed\": null,\n\
\ \"email_account_id\": \"6633baaece5fbd01c791d7ca\",\n \"due_at_manually_changed\": true,\n\
\ \"not_sent_reason\": \"account_stage_safeguard\",\n \"bounce\": null,\n \"spam_blocked\"\
: null,\n \"tracking_disabled_reason\": null,\n \"created_at\": \"2025-06-12T18:52:51.021Z\"\
,\n \"async_sending\": true,\n \"due_at_source\": \"Email was sent using Send Now action\",\n\
\ \"crm_id\": null,\n \"replied\": null,\n \"needs_dynamic_assemble\": true,\n \"\
personalized_opener\": null,\n \"reply_class\": null,\n \"schedule_delayed_limit_reason\": null,\n\
\ \"schedule_delayed_reason_details\": null,\n \"sensitive_info_redacted\": null,\n \"\
account_id\": \"6518c6184f20350001a0b9c0\",\n \"recipients\": [\n {\n \"email\":\
\ \"gina.larkin@apollo.io\",\n \"raw_name\": \"Gina Larkin\",\n \"recipient_type_cd\"\
: \"to\",\n \"contact_id\": \"66ad20ab23d5d40001c8d07d\",\n \"user_id\": null\n \
\ }\n ],\n \"send_from\": {\n \"email\": \"test.marcus.hale@apollomail.io\",\n \
\ \"raw_name\": \"David Smith\",\n \"recipient_type_cd\": null,\n \"contact_id\": null,\n\
\ \"user_id\": null\n },\n \"from_email\": \"test.marcus.hale@apollomail.io\",\n \
\ \"to_email\": \"gina.larkin@apollo.io\",\n \"from_name\": \"David Smith\",\n \"bcc_emails\"\
: [],\n \"cc_emails\": [],\n \"send_from_info\": \"6633baaece5fbd01c791d7ca***test.marcus.hale@apollomail.io\"\
,\n \"body_text\": \"Check out my email now!David SmithApollo Knowledge Base \",\n \"body_html\"\
: \"Check out my email now!
David Smith
\"\
,\n \"body_html_loaded\": true,\n \"appendment_html\": \"\",\n \"appendment_html_loaded\"\
: true,\n \"subject\": \"Stats for you\",\n \"campaign_name\": \"Stats Sequences DO NOT USE\"\
,\n \"campaign_max_emails_per_day\": null,\n \"campaign_position\": 1,\n \"step_max_emails_per_day\"\
: null\n },\n {\n \"id\": \"684b2203a2ce950021cbf72d\",\n \"user_id\": \"66302798d03b9601c7934ebf\"\
,\n \"status\": \"failed\",\n \"time_zone\": \"America/Los_Angeles\",\n \"provider_message_id\"\
: null,\n \"to_name\": \"Wesley Tran\",\n \"due_at\": \"2025-06-12T18:57:14.197+00:00\",\n \
\ \"completed_at\": null,\n \"emailer_touch_id\": \"684b216ec95a4f001d968d1b\",\n \"emailer_campaign_id\"\
: \"684b215edf80730019db612c\",\n \"emailer_step_id\": \"684b216ec95a4f001d968d19\",\n \"failed_at\"\
: \"2025-06-12T19:04:09.180+00:00\",\n \"failure_reason\": \"Contact stage is Interested. Change\
\ stage for contact or adjust settings under Sequence => Settings and retry.\",\n \"attachment_ids\"\
: [],\n \"enable_tracking\": true,\n \"type\": \"outreach_automatic_email\",\n \"contact_id\"\
: \"6601a68fca35d8000718d42b\",\n \"provider_thread_id\": null,\n \"schedule_delayed_reason\"\
: null,\n \"demoed\": null,\n \"email_account_id\": \"6633baaece5fbd01c791d7ca\",\n \"\
due_at_manually_changed\": true,\n \"not_sent_reason\": \"contact_stage_safeguard\",\n \"bounce\"\
: null,\n \"spam_blocked\": null,\n \"tracking_disabled_reason\": null,\n \"created_at\"\
: \"2025-06-12T18:52:51.021Z\",\n \"async_sending\": true,\n \"due_at_source\": \"Email was\
\ sent using Send Now action\",\n \"crm_id\": null,\n \"replied\": null,\n \"needs_dynamic_assemble\"\
: true,\n \"personalized_opener\": null,\n \"reply_class\": null,\n \"schedule_delayed_limit_reason\"\
: null,\n \"schedule_delayed_reason_details\": null,\n \"sensitive_info_redacted\": null,\n\
\ \"account_id\": \"6518c6184f20350001a0b9c0\",\n \"recipients\": [\n {\n \"\
email\": \"wesley.t@example.com\",\n \"raw_name\": \"Wesley Tran\",\n \"recipient_type_cd\"\
: \"to\",\n \"contact_id\": \"6601a68fca35d8000718d42b\",\n \"user_id\": null\n \
\ }\n ],\n \"send_from\": {\n \"email\": \"test.marcus.hale@apollomail.io\",\n \
\ \"raw_name\": \"David Smith\",\n \"recipient_type_cd\": null,\n \"contact_id\": null,\n\
\ \"user_id\": null\n },\n \"from_email\": \"test.marcus.hale@apollomail.io\",\n \
\ \"to_email\": \"wesley.t@example.com\",\n \"from_name\": \"David Smith\",\n \"bcc_emails\"\
: [],\n \"cc_emails\": [],\n \"send_from_info\": \"6633baaece5fbd01c791d7ca***test.marcus.hale@apollomail.io\"\
,\n \"body_text\": \"Check out my email now!David SmithApollo Knowledge Base \",\n \"body_html\"\
: \"Check out my email now!
David Smith
\"\
,\n \"body_html_loaded\": true,\n \"appendment_html\": \"\",\n \"appendment_html_loaded\"\
: true,\n \"subject\": \"Stats for you\",\n \"campaign_name\": \"Stats Sequences DO NOT USE\"\
,\n \"campaign_max_emails_per_day\": null,\n \"campaign_position\": 1,\n \"step_max_emails_per_day\"\
: null\n }\n ],\n \"emailer_steps\": [\n {\n \"id\": \"684b216ec95a4f001d968d19\",\n \
\ \"emailer_campaign_id\": \"684b215edf80730019db612c\",\n \"wait_time\": 0,\n \"wait_mode\"\
: \"minute\",\n \"max_emails_per_day\": null,\n \"exact_datetime\": null,\n \"auto_skip_in_x_days\"\
: null,\n \"position\": 1\n },\n {\n \"id\": \"684886e2e7c9bd0011e0b239\",\n \"emailer_campaign_id\"\
: \"6848868536ec86001d300ce6\",\n \"wait_time\": 30,\n \"wait_mode\": \"minute\",\n \"\
max_emails_per_day\": null,\n \"exact_datetime\": null,\n \"auto_skip_in_x_days\": null,\n \
\ \"position\": 1\n },\n {\n \"id\": \"67bde6d5b5eeec0021ad09c4\",\n \"emailer_campaign_id\"\
: \"67bde6d5b5eeec0021ad09c2\",\n \"wait_time\": 20,\n \"wait_mode\": \"day\",\n \"max_emails_per_day\"\
: null,\n \"exact_datetime\": null,\n \"auto_skip_in_x_days\": null,\n \"position\": 1\n\
\ }\n ],\n \"num_fetch_result\": null\n}"
'401':
description: Unauthorized
content:
text/plain:
examples:
Check API Key:
value: Invalid API key. See https://docs.apollo.io/reference/authentication for how to authenticate.
summary: Check API Key
'422':
description: '422'
content:
application/json:
examples:
Page limit exceeded:
value: "{\n \"error\": \"Invalid parameter passed in. Page * per page number is over threshold.\"\n}"
Per page cannot be 0:
value: "{\n \"error\": \"An error occurred. Per page cannot be 0.\"\n}"
schema:
type: object
properties:
error:
type: string
'429':
description: '429'
content:
application/json:
examples:
Too many requests:
value: "{\n \"message\": \"The maximum number of api calls allowed for api/v1/emailer_messages/search is\
\ 600 times per hour. Please upgrade your plan from https://app.apollo.io/#/settings/plans/upgrade.\"\n\
}"
schema:
type: object
properties:
message:
type: string
example: The maximum number of api calls allowed for api/v1/emailer_messages/search is 600 times per hour.
Please upgrade your plan from https://app.apollo.io/#/settings/plans/upgrade.
parameters:
- name: emailer_message_stats[]
in: query
required: false
description: 'Find emails based on their current status, such as whether they were delivered or opened. You can add
multiple statuses.
Possible values include: - `delivered`
- `scheduled`
- `drafted`
- `not_opened`
- `opened`
- `clicked`
- `unsubscribed`
- `demoed`
- `bounced`
- `spam_blocked`
- `failed_other`
'
schema:
type: array
default: ''
items:
type: string
- name: emailer_message_reply_classes[]
in: query
required: false
description: 'Find emails based on the response sentiment of the recipient. This can include the recipient expressing
interest in meeting or having a follow-up question. You can add multiple values.
Possible values include:
- `willing_to_meet`
- `follow_up_question`
- `person_referral`
- `out_of_office`
- `already_left_company_or_not_right_person`
- `not_interested`
- `unsubscribe`
- `none_of_the_above`
'
schema:
type: array
default: ''
items:
type: string
- name: user_ids[]
in: query
required: false
description: 'Find emails sent by specific users in your team''s Apollo account. You can add multiple users.
Use
the Get a List of Users endpoint
to retrieve IDs for all of the users within your Apollo account.
Example: `66302798d03b9601c7934ebf`'
schema:
type: array
default: ''
items:
type: string
- name: email_account_id_and_aliases
in: query
required: false
description: ''
schema:
type: string
default: ''
- name: emailer_campaign_ids[]
in: query
required: false
description: 'Search for emails that are included in specific sequences in your Apollo account. You can search multiple
sequences. Any sequence not included in this parameter will be exclude from search results.
To find sequence
IDs, call the Search for Sequences
endpoint and identify the `id` value for the sequence.
Example: `66e9e215ece19801b219997f`'
schema:
type: array
default: ''
items:
type: string
- name: not_emailer_campaign_ids[]
in: query
required: false
description: 'Exclude emails from specific sequences in your Apollo account. You can exclude multiple sequences. Any
sequence not excluded using this parameter will be included in search results.
To find sequence IDs, call
the Search for Sequences endpoint
and identify the `id` value for the sequence.
Example: `66e9e215ece19801b219997f`'
schema:
type: array
default: ''
items:
type: string
- name: emailer_message_date_range_mode
in: query
required: false
description: 'Use this parameter in combination with the `emailer_message_date_range[max]` and `emailer_message_date_range[min]`
parameters. Find emails based on 1 of the following options: - `due_at`: When emails are scheduled to be
delivered.
- `completed_at`: When emails were delivered.
'
schema:
type: string
default: ''
- name: emailer_message_date_range[max]
in: query
required: false
description: 'Set the upper bound of the date range you want to search.
Use this parameter in combination
with the `emailer_message_date_range[min]` and `emailer_message_date_range_mode` parameters. This date should fall
after the `emailer_message_date_range[min]` date.
The date should be formatted as `YYYY-MM-DD`.
Example:
`2025-10-30`'
schema:
type: string
format: date
default: ''
- name: emailer_message_date_range[min]
in: query
required: false
description: 'Set the lower bound of the date range you want to search.
Use this parameter in combination
with the `emailer_message_date_range[max]` and `emailer_message_date_range_mode` parameters. This date should fall
before the `emailer_message_date_range[max]` date.
The date should be formatted as `YYYY-MM-DD`.
Example:
`2025-10-30`'
schema:
type: string
format: date
default: ''
- name: not_sent_reason_cds[]
in: query
required: false
description: 'Find emails based on the reason they were not sent. You can add multiple values.
Possible values
include: - `contact_stage_safeguard`
- `same_account_reply`
- `account_stage_safeguard`
- `email_unverified`
- `snippets_missing`
- `personalized_opener_missing`
-
`thread_reply_original_email_missing`
- `no_active_email_account`
- `email_format_invalid`
- `ownership_permission`
- `email_service_provider_delivery_failure`
- `sendgrid_dropped_email`
- `mailgun_dropped_email`
- `gdpr_compliance`
- `not_valid_hard_bounce_detected`
-
`other_safeguard`
- `new_job_change_detected`
- `email_on_global_bounce_list`
'
schema:
type: array
default: ''
items:
type: string
- name: q_keywords
in: query
required: false
description: 'Add keywords to narrow the search of the emails in your team''s Apollo account.
Keywords should
directly match at least part of an email''s content. For example, searching the keyword `James` might return emails
that were sent by `James Smith`.
Example: `Jane`'
schema:
type: string
default: ''
- name: page
in: query
description: 'The page number of the Apollo data that you want to retrieve.
Use this parameter in combination
with the `per_page` parameter to make search results for navigable and improve the performance of the endpoint.
Example: `4`'
schema:
type: integer
format: int32
- name: per_page
in: query
description: 'The number of search results that should be returned for each page. Limiting the number of results per
page improves the endpoint''s performance.
Use the `page` parameter to search the different pages of data.
Example: `10`'
schema:
type: integer
format: int32
/emailer_campaigns/activity_feed:
post:
summary: Get Contact Sequence Activity
description: '## Endpoint essentials
**API key access:** `api/v1/emailer_campaigns/activity_feed` or `Master API key`
**OAuth scopes:** `emailer_campaigns_activity_feed`
**Credit usage:** `0 credits` — [Learn more about API pricing and credits](https://docs.apollo.io/docs/api-pricing).
Sequences
are outreach campaigns that sales teams use to reach out to contacts over a planned period of time.
Use the
Get Contact Sequence Activity endpoint to retrieve one contact''s sequence timeline: when they were added to a sequence,
when their enrollment was paused, resumed, failed, finished, or removed, and when they replied. This is the same enrollment
activity that the contact''s timeline shows in Apollo.
You must provide a `contact_id`, and that contact must
belong to your team. This endpoint returns activity for a single contact — it doesn''t return activity for every contact
in a sequence. To narrow the timeline to one sequence, also provide a `sequence_id`.
Events are returned newest-first,
and each response contains at most 50 events. There is no `page` parameter: the endpoint always returns the most recent
events, so use `per_page` to request fewer than 50.
To find contact IDs, call the Search
for Contacts endpoint and identify the `id` value for the contact. To find sequence IDs, call the Search
for Sequences endpoint and identify the `id` value for the sequence.'
tags:
- Sequences
operationId: get-contact-sequence-activity
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- contact_id
properties:
contact_id:
type: string
description: 'The Apollo ID for the contact whose sequence activity you want to retrieve. The contact must
belong to your team, otherwise a `404` is returned.
To find contact IDs, call the Search
for Contacts endpoint and identify the `id` value for the contact.
Example: `66e34b81740c50074e3d1bd4`'
sequence_id:
type: string
description: 'The Apollo ID for a single sequence. When provided, only events from that sequence are returned.
When omitted, events from all of the contact''s sequences are returned.
If the ID doesn''t match
a sequence with activity for this contact, an empty `events` array is returned instead of an error.
To
find sequence IDs, call the Search for
Sequences endpoint and identify the `id` value for the sequence.
Example: `66e9e215ece19801b219997f`'
per_page:
type: integer
description: 'The maximum number of events to return, from 1 to 50. Defaults to `50` when omitted.
Values
above 50 are reduced to 50, and values below 1 — including `0`, negative numbers, and values that aren''t
numbers — are raised to 1.
This isn''t a pagination parameter and there is no `page` parameter:
the endpoint always returns the most recent events, so lowering `per_page` returns a shorter, more recent
timeline rather than a different page of results.
Example: `25`'
default: 50
minimum: 1
maximum: 50
examples:
All sequence activity for a contact:
value:
contact_id: 66e34b81740c50074e3d1bd4
Activity for one sequence:
value:
contact_id: 66e34b81740c50074e3d1bd4
sequence_id: 66e9e215ece19801b219997f
per_page: 25
responses:
'200':
description: '200'
content:
application/json:
examples:
OK:
value:
contact_id: 66e34b81740c50074e3d1bd4
events:
- type: removed
occurred_at: '2026-07-28T10:26:55Z'
sequence_id: 66e9e215ece19801b219997f
sequence_name: Q2 Outreach
- type: completed
occurred_at: '2026-07-27T10:26:55Z'
sequence_id: 66e9e215ece19801b219997f
sequence_name: Q2 Outreach
- type: replied
occurred_at: '2026-07-26T10:26:55Z'
sequence_id: 66e9e215ece19801b219997f
sequence_name: Q2 Outreach
emailer_message_id: 66e8cc45028aed019c25d724
- type: paused
occurred_at: '2026-07-22T10:26:55Z'
sequence_id: 66e9e215ece19801b219997f
sequence_name: Q2 Outreach
reason: manually paused
- type: enrolled
occurred_at: '2026-07-20T10:26:55Z'
sequence_id: 66e9e215ece19801b219997f
sequence_name: Q2 Outreach
step_position: 2
No sequence activity:
value:
contact_id: 66e34b81740c50074e3d1bd4
events: []
schema:
type: object
properties:
contact_id:
type: string
description: The Apollo ID of the contact whose activity was returned.
events:
type: array
description: The contact's sequence events, ordered newest-first. Contains at most 50 events, or at most
`per_page` events when `per_page` is provided. Fields that don't apply to an event are omitted rather
than returned as `null`.
items:
type: object
properties:
type:
type: string
description: 'What happened. - `enrolled`: the contact was added to the sequence.
- `paused`: the contact''s enrollment was paused.
- `resumed`: the contact''s enrollment
was resumed after being paused.
- `failed`: the contact''s enrollment failed.
-
`completed`: the contact finished the sequence.
- `removed`: the contact was removed
from the sequence.
- `replied`: the contact replied to an email from the sequence.
'
enum:
- enrolled
- paused
- resumed
- failed
- completed
- removed
- replied
occurred_at:
type: string
description: The ISO 8601 timestamp for when the event happened. Events with no recorded timestamp
aren't returned.
sequence_id:
type: string
description: The Apollo ID of the sequence the event belongs to. Omitted if the event isn't linked
to a sequence.
sequence_name:
type: string
description: The name of the sequence the event belongs to. This key is omitted, never `null`, if
the event isn't linked to a sequence or the sequence no longer exists.
step_position:
type: integer
description: The position of the sequence step the event relates to. Only returned for enrollment-lifecycle
events that are linked to a specific step. This key is omitted, never `null`, when it doesn't
apply.
reason:
type: string
description: Why the enrollment was paused. Only returned for `paused` events, and only when Apollo
recorded a reason.
example: manually paused
emailer_message_id:
type: string
description: The Apollo ID of the email that the contact replied to. Only returned for `replied`
events. Pass this to the Get Email
Content endpoint to read the original email.
'401':
description: '401'
content:
text/plain:
examples:
Check API key:
value: Invalid API key. See https://docs.apollo.io/reference/authentication for how to authenticate.
'403':
description: '403'
content:
application/json:
examples:
Endpoint not in API key scope:
value: "{\n \"error\": \"This API key is not authorized to access api/v1/emailer_campaigns/activity_feed.\
\ Request an API key from your administrator that includes this endpoint in its configured scope.\",\n\
\ \"error_code\": \"API_INACCESSIBLE\"\n}"
schema:
title: Endpoint not in API key scope
type: object
properties:
error:
type: string
example: This API key is not authorized to access api/v1/emailer_campaigns/activity_feed. Request an API
key from your administrator that includes this endpoint in its configured scope.
error_code:
type: string
example: API_INACCESSIBLE
'404':
description: '404'
content:
application/json:
examples:
Contact not found:
value: '{"error": "Contact not found"}'
schema:
title: Contact not found
type: object
properties:
error:
type: string
example: Contact not found
'429':
description: '429'
content:
application/json:
examples:
Too many requests:
value: "{\n \"message\": \"The maximum number of api calls allowed for api/v1/emailer_campaigns/activity_feed\
\ is 600 times per hour. Please upgrade your plan from https://app.apollo.io/#/settings/plans/upgrade.\"\
\n}"
schema:
type: object
properties:
message:
type: string
example: The maximum number of api calls allowed for api/v1/emailer_campaigns/activity_feed is 600 times
per hour. Please upgrade your plan from https://app.apollo.io/#/settings/plans/upgrade.
deprecated: false
/emailer_campaigns/{sequence_id}/approve:
post:
summary: Activate a Sequence
description: '## Endpoint essentials
**API key access:** `api/v1/emailer_campaigns/approve` or `Master API key`
**OAuth scopes:** `emailer_campaigns_approve`
**Credit usage:** `0 credits` — [Learn more about API pricing and credits](https://docs.apollo.io/docs/api-pricing).
Sequences
are outreach campaigns that sales teams use to reach out to contacts over a planned period of time.
Use the
Activate a Sequence endpoint to start an inactive sequence. Once activated, the sequence begins sending emails to
its contacts on the configured schedule. The sequence must have at least one step configured before it can be activated.'
tags:
- Sequences
operationId: approve-sequence
parameters:
- name: sequence_id
in: path
description: 'The Apollo ID for the sequence that you want to activate.
To find sequence IDs, call the Search for Sequences endpoint and
identify the id value for the sequence.
Example: 66e9e215ece19801b219997f'
required: true
schema:
type: string
responses:
'200':
description: '200'
content:
application/json:
examples:
OK:
value:
emailer_campaign:
id: 66e9e215ece19801b219997f
unique_scheduled: 5
active: true
emailer_steps:
- id: 66e9e215ece19801b2199980
emailer_campaign_id: 66e9e215ece19801b219997f
position: 1
wait_time: 1
type: auto_email
note: null
schema:
type: object
properties:
emailer_campaign:
type: object
properties:
id:
type: string
unique_scheduled:
type: integer
active:
type: boolean
emailer_steps:
type: array
items:
type: object
properties:
id:
type: string
emailer_campaign_id:
type: string
position:
type: integer
wait_time:
type: integer
type:
type: string
note:
type: string
nullable: true
'401':
description: '401'
content:
text/plain:
examples:
Check API key:
value: Invalid API key. See https://docs.apollo.io/reference/authentication for how to authenticate.
'403':
description: '403'
content:
application/json:
examples:
Need master API key:
value: "{\n \"error\": \"This API key is not authorized to access api/v1/emailer_campaigns/approve. Request\
\ an API key from your administrator that includes this endpoint in its configured scope.\",\n \"error_code\"\
: \"API_INACCESSIBLE\"\n}"
schema:
title: Need master API key
type: object
properties:
error:
type: string
example: This API key is not authorized to access api/v1/emailer_campaigns/approve. Request an API key
from your administrator that includes this endpoint in its configured scope.
error_code:
type: string
example: API_INACCESSIBLE
'422':
description: '422'
content:
application/json:
examples:
Already active:
value: '{"error": "The sequence is already active."}'
No steps:
value: '{"error": "Please make sure you have added at least 1 step before turning on the sequence."}'
schema:
type: object
properties:
error:
type: string
'429':
description: '429'
content:
application/json:
examples:
Too many requests:
value: "{\n \"message\": \"The maximum number of api calls allowed for api/v1/emailer_campaigns/approve\
\ is 600 times per hour. Please upgrade your plan from https://app.apollo.io/#/settings/plans/upgrade.\"\
\n}"
schema:
type: object
properties:
message:
type: string
example: The maximum number of api calls allowed for api/v1/emailer_campaigns/approve is 600 times per
hour. Please upgrade your plan from https://app.apollo.io/#/settings/plans/upgrade.
/emailer_campaigns/{sequence_id}/abort:
post:
summary: Deactivate a Sequence
description: '## Endpoint essentials
**API key access:** `api/v1/emailer_campaigns/abort` or `Master API key`
**OAuth scopes:** `emailer_campaigns_abort`
**Credit usage:** `0 credits` — [Learn more about API pricing and credits](https://docs.apollo.io/docs/api-pricing).
Sequences
are outreach campaigns that sales teams use to reach out to contacts over a planned period of time.
Use the
Deactivate a Sequence endpoint to stop an active sequence. Once deactivated, the sequence pauses all contacts and
stops sending emails.'
tags:
- Sequences
operationId: abort-sequence
parameters:
- name: sequence_id
in: path
description: 'The Apollo ID for the sequence that you want to deactivate.
To find sequence IDs, call the Search for Sequences endpoint and
identify the id value for the sequence.
Example: 66e9e215ece19801b219997f'
required: true
schema:
type: string
responses:
'200':
description: '200'
content:
application/json:
examples:
OK:
value:
emailer_campaign:
id: 66e9e215ece19801b219997f
unique_scheduled: 5
active: false
emailer_steps:
- id: 66e9e215ece19801b2199980
emailer_campaign_id: 66e9e215ece19801b219997f
position: 1
wait_time: 1
type: auto_email
note: null
schema:
type: object
properties:
emailer_campaign:
type: object
properties:
id:
type: string
unique_scheduled:
type: integer
active:
type: boolean
emailer_steps:
type: array
items:
type: object
properties:
id:
type: string
emailer_campaign_id:
type: string
position:
type: integer
wait_time:
type: integer
type:
type: string
note:
type: string
nullable: true
'401':
description: '401'
content:
text/plain:
examples:
Check API key:
value: Invalid API key. See https://docs.apollo.io/reference/authentication for how to authenticate.
'403':
description: '403'
content:
application/json:
examples:
Need master API key:
value: "{\n \"error\": \"This API key is not authorized to access api/v1/emailer_campaigns/abort. Request\
\ an API key from your administrator that includes this endpoint in its configured scope.\",\n \"error_code\"\
: \"API_INACCESSIBLE\"\n}"
schema:
title: Need master API key
type: object
properties:
error:
type: string
example: This API key is not authorized to access api/v1/emailer_campaigns/abort. Request an API key from
your administrator that includes this endpoint in its configured scope.
error_code:
type: string
example: API_INACCESSIBLE
'422':
description: '422'
content:
application/json:
examples:
Already inactive:
value: '{"error": "The sequence is already inactive."}'
schema:
type: object
properties:
error:
type: string
'429':
description: '429'
content:
application/json:
examples:
Too many requests:
value: "{\n \"message\": \"The maximum number of api calls allowed for api/v1/emailer_campaigns/abort\
\ is 600 times per hour. Please upgrade your plan from https://app.apollo.io/#/settings/plans/upgrade.\"\
\n}"
schema:
type: object
properties:
message:
type: string
example: The maximum number of api calls allowed for api/v1/emailer_campaigns/abort is 600 times per hour.
Please upgrade your plan from https://app.apollo.io/#/settings/plans/upgrade.
/emailer_campaigns/{sequence_id}/archive:
post:
summary: Archive a Sequence
description: '## Endpoint essentials
**API key access:** `api/v1/emailer_campaigns/archive` or `Master API key`
**OAuth scopes:** `emailer_campaigns_archive`
**Credit usage:** `0 credits` — [Learn more about API pricing and credits](https://docs.apollo.io/docs/api-pricing).
Sequences
are outreach campaigns that sales teams use to reach out to contacts over a planned period of time.
Use the
Archive a Sequence endpoint to archive a sequence. Archiving a sequence marks it as inactive and finishes all contacts
currently in the sequence. You must be the owner of the sequence or have full access sharing permissions to archive
it.'
tags:
- Sequences
operationId: archive-sequence
parameters:
- name: sequence_id
in: path
description: 'The Apollo ID for the sequence that you want to archive.
To find sequence IDs, call the Search for Sequences endpoint and identify the id value for the sequence.
Example:
66e9e215ece19801b219997f'
required: true
schema:
type: string
responses:
'200':
description: '200'
content:
application/json:
examples:
OK:
value:
emailer_campaign:
id: 66e9e215ece19801b219997f
active: false
archived: true
deleted: true
schema:
type: object
properties:
emailer_campaign:
type: object
properties:
id:
type: string
active:
type: boolean
archived:
type: boolean
deleted:
type: boolean
'401':
description: '401'
content:
text/plain:
examples:
Check API key:
value: Invalid API key. See https://docs.apollo.io/reference/authentication for how to authenticate.
'403':
description: '403'
content:
application/json:
examples:
Need master API key:
value: "{\n \"error\": \"This API key is not authorized to access api/v1/emailer_campaigns/archive. Request\
\ an API key from your administrator that includes this endpoint in its configured scope.\",\n \"error_code\"\
: \"API_INACCESSIBLE\"\n}"
schema:
title: Need master API key
type: object
properties:
error:
type: string
example: This API key is not authorized to access api/v1/emailer_campaigns/archive. Request an API key
from your administrator that includes this endpoint in its configured scope.
error_code:
type: string
example: API_INACCESSIBLE
'429':
description: '429'
content:
application/json:
examples:
Too many requests:
value: "{\n \"message\": \"The maximum number of api calls allowed for api/v1/emailer_campaigns/archive\
\ is 600 times per hour. Please upgrade your plan from https://app.apollo.io/#/settings/plans/upgrade.\"\
\n}"
schema:
type: object
properties:
message:
type: string
example: The maximum number of api calls allowed for api/v1/emailer_campaigns/archive is 600 times per
hour. Please upgrade your plan from https://app.apollo.io/#/settings/plans/upgrade.