openapi: 3.1.0 info: title: Apollo.io Sequences API version: '1.0' summary: Programmatic access to Apollo's sales intelligence and engagement platform — data enrichment, prospect and company search, and go-to-market workflow management. description: 'The Apollo API provides programmatic access to [Apollo](https://www.apollo.io/), the all-in-one sales intelligence and engagement platform. Use it to enrich people and company data (individually or in bulk), search Apollo''s database of over 240 million contacts and 30 million companies, and manage accounts, contacts, deals, sequences, tasks, calls, and conversations in your go-to-market workflows. ## Base URL All API requests are made to `https://api.apollo.io/api/v1`. ## Authentication - **Apollo users** authenticate with an API key passed in the `x-api-key` request header. See [Create API Keys](https://docs.apollo.io/docs/create-api-key). - **Apollo partners** building integrations on behalf of mutual users authenticate with the [OAuth 2.0 authorization flow](https://docs.apollo.io/docs/use-oauth-20-authorization-flow-to-access-apollo-user-information-partners). ## Rate limits & credits Rate limits and credit consumption depend on your [Apollo pricing plan](https://docs.apollo.io/docs/api-pricing). Check your current limits and usage with the [View API Usage Stats and Rate Limits](https://docs.apollo.io/reference/view-api-usage-stats) endpoint. For more details, see [Rate Limits](https://docs.apollo.io/reference/rate-limits) and the [API FAQs](https://docs.apollo.io/docs/apollo-api-faqs). New to the API? Start with the [Apollo API overview](https://docs.apollo.io/reference/apollo-api).' termsOfService: https://www.apollo.io/terms/api contact: name: Apollo API Support url: https://docs.apollo.io/ servers: - url: https://api.apollo.io/api/v1 tags: - name: Sequences description: Manage outreach sequences and the contacts enrolled in them. security: - apiKey: [] - bearerAuth: [] components: securitySchemes: apiKey: type: apiKey in: header name: x-api-key description: '[Recommended] API key, passed in the `x-api-key` request header. See [Create API Keys](https://docs.apollo.io/docs/create-api-key).' bearerAuth: type: http scheme: bearer bearerFormat: JWT description: 'OAuth 2.0 access token, used by Apollo partners building integrations. See the [OAuth 2.0 authorization flow](https://docs.apollo.io/docs/use-oauth-20-authorization-flow-to-access-apollo-user-information-partners).' paths: /emailer_schedules: get: summary: List Email Schedules description: '## Endpoint essentials **API key access:** `api/v1/emailer_schedules/index` or `Master API key` **OAuth scopes:** `emailer_schedules_list` **Credit usage:** `0 credits` — [Learn more about API pricing and credits](https://docs.apollo.io/docs/api-pricing). Sending schedules control the days and times that Apollo sends emails for your sequences. You can configure multiple sending schedules for different sequences, for example to match your audience''s time zone or when your contacts are most likely to engage.

Use the List Email Schedules endpoint to retrieve every sending schedule that has been created for your team''s Apollo account. For each schedule, the response returns its ID, name, time zone, weekly sending windows, and whether it is your team''s default schedule.

Use a schedule''s `id` as the `emailer_schedule_id` when you create a sequence or update a sequence to control when that sequence''s emails are sent.' tags: - Sequences operationId: list-email-schedules responses: '200': description: '200' content: application/json: examples: Result: value: "{\n \"emailer_schedules\": [\n {\n \"id\": \"6605a1f2e4b0c80012a3d456\"\ ,\n \"name\": \"Normal Business Hours\",\n \"default\": true,\n \"\ time_zone\": \"America/Los_Angeles\",\n \"schedule_hash\": {\n \"monday\"\ : [[8, 17]],\n \"tuesday\": [[8, 17]],\n \"wednesday\": [[8, 17]],\n\ \ \"thursday\": [[8, 17]],\n \"friday\": [[8, 17]]\n },\n \ \ \"created_at\": \"2024-03-28T18:56:24.067Z\",\n \"use_contacts_time_zone\"\ : true,\n \"skip_holidays\": true\n },\n {\n \"id\": \"6605a2b7e4b0c80012a3d789\"\ ,\n \"name\": \"West Coast Afternoons\",\n \"default\": false,\n \"\ time_zone\": \"America/New_York\",\n \"schedule_hash\": {\n \"monday\"\ : [[12, 17]],\n \"wednesday\": [[12, 17]],\n \"friday\": [[12, 17]]\n\ \ },\n \"created_at\": \"2024-04-02T14:10:05.512Z\",\n \"use_contacts_time_zone\"\ : false,\n \"skip_holidays\": true\n }\n ]\n}" schema: type: object properties: emailer_schedules: type: array description: The list of sending schedules that belong to your team. items: type: object properties: id: type: string description: The unique Apollo ID for the sending schedule. Use this value as the `emailer_schedule_id` when you create or update a sequence. example: 6605a1f2e4b0c80012a3d456 name: type: string description: The name of the sending schedule. example: Normal Business Hours default: type: boolean description: Whether this is the default sending schedule for your team. Only one schedule can be the default at a time. example: true time_zone: type: string description: The IANA time zone that the schedule's sending windows are defined in, for example `America/Los_Angeles`. example: America/Los_Angeles schedule_hash: type: object description: The weekly sending windows, keyed by day of the week. Each day maps to an array of `[start_hour, end_hour]` pairs using 24-hour times, so `[[8, 17]]` means 8:00 AM to 5:00 PM. Days with no sending windows are omitted. created_at: type: string description: The timestamp for when the schedule was created, in ISO 8601 format. example: '2024-03-28T18:56:24.067Z' use_contacts_time_zone: type: boolean description: Whether Apollo sends emails according to each contact's own time zone instead of the schedule's `time_zone`. example: true skip_holidays: type: boolean description: Whether Apollo skips sending emails on holidays. example: 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_schedules/index.\ \ 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_schedules/index. 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_schedules\ \ 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_schedules is 600 times per hour. Please upgrade your plan from https://app.apollo.io/#/settings/plans/upgrade. deprecated: false /emailer_campaigns/search: post: summary: Search for Sequences description: '## Endpoint essentials **API key access:** `api/v1/emailer_campaigns/search` or `Master API key` **OAuth scopes:** `emailer_campaigns_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 Sequences endpoint to search for the sequences that have been created for your team''s Apollo account.' tags: - Sequences operationId: search-for-sequences parameters: - name: q_name in: query description: 'Add keywords to narrow the search of the sequences in your team''s Apollo account.

Keywords should directly match at least part of a sequence''s name. For example, searching the keyword `marketing` might return the result `NY Marketing Sequence`, but not `NY Marketer Conference 2025 attendees`.

This parameter only searches sequence names, not other sequence fields.

Example: `marketing conference attendees`' schema: type: string - 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: string - 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: string responses: '200': description: '200' content: application/json: examples: Result: value: pagination: page: 1 per_page: 5 total_entries: 1 total_pages: 1 breadcrumbs: - label: Name signal_field_name: q_name value: Copywriting Dublin display_name: Copywriting Dublin emailer_campaigns: - id: 66e9e215ece19801b219997f name: Target Copywriting Clients in Dublin archived: false created_at: '2024-09-17T20:09:57.837Z' emailer_schedule_id: 6095a711bd01d100a506d52a max_emails_per_day: null user_id: 66302798d03b9601c7934ebf same_account_reply_policy_cd: null excluded_account_stage_ids: - 6095a710bd01d100a506d4b8 - 6095a710bd01d100a506d4b9 - 6095a710bd01d100a506d4ba - 6095a710bd01d100a506d4bb excluded_contact_stage_ids: - 6095a710bd01d100a506d4b5 - 6095a710bd01d100a506d4b4 - 6095a710bd01d100a506d4b0 - 6095a710bd01d100a506d4b1 contact_email_event_to_stage_mapping: {} label_ids: - 66e9e215ece19801b2199980 - 66e9e215ece19801b2199981 - 66e9e215ece19801b2199982 create_task_if_email_open: false email_open_trigger_task_threshold: 3 mark_finished_if_click: false active: false days_to_wait_before_mark_as_response: 5 starred_by_user_ids: - 66302798d03b9601c7934ebf mark_finished_if_reply: true mark_finished_if_interested: true mark_paused_if_ooo: true sequence_by_exact_daytime: null last_used_at: null sequence_ruleset_id: 6095a711bd01d100a506d4e0 folder_id: null same_account_reply_delay_days: 30 is_performing_poorly: false num_contacts_email_status_extrapolated: 0 remind_ab_test_results: false ab_test_step_ids: [] prioritized_by_user: null creation_type: new num_steps: 3 unique_scheduled: 0 unique_delivered: 0 unique_bounced: 0 unique_opened: 0 unique_hard_bounced: 0 unique_spam_blocked: 0 unique_replied: 0 unique_demoed: 0 unique_clicked: 0 unique_unsubscribed: 0 bounce_rate: 0 hard_bounce_rate: 0 open_rate: 0 click_rate: 0 reply_rate: 0 spam_block_rate: 0 opt_out_rate: 0 demo_rate: 0 loaded_stats: true cc_emails: '' bcc_emails: '' underperforming_touches_count: 0 sharing_permission: visibility: everyone access_type: can_view object_type: EmailerCampaign object_id: 66e9e215ece19801b219997f is_owner: true owner_id: 66302798d03b9601c7934ebf sharing_accesses: [] num_fetch_result: null schema: type: object properties: pagination: type: object properties: page: type: integer example: 1 default: 0 per_page: type: integer example: 5 default: 0 total_entries: type: integer example: 1 default: 0 total_pages: type: integer example: 1 default: 0 breadcrumbs: type: array items: type: object properties: label: type: string example: Name signal_field_name: type: string example: q_name value: type: string example: Copywriting Dublin display_name: type: string example: Copywriting Dublin emailer_campaigns: type: array items: type: object properties: id: type: string example: 66e9e215ece19801b219997f name: type: string example: Target Copywriting Clients in Dublin archived: type: boolean example: false default: true created_at: type: string example: '2024-09-17T20:09:57.837Z' emailer_schedule_id: type: string example: 6095a711bd01d100a506d52a max_emails_per_day: {} user_id: type: string example: 66302798d03b9601c7934ebf same_account_reply_policy_cd: {} excluded_account_stage_ids: type: array items: type: string example: 6095a710bd01d100a506d4b8 excluded_contact_stage_ids: type: array items: type: string example: 6095a710bd01d100a506d4b5 contact_email_event_to_stage_mapping: type: object properties: {} label_ids: type: array items: type: string example: 66e9e215ece19801b2199980 create_task_if_email_open: type: boolean example: false default: true email_open_trigger_task_threshold: type: integer example: 3 default: 0 mark_finished_if_click: type: boolean example: false default: true active: type: boolean example: false default: true days_to_wait_before_mark_as_response: type: integer example: 5 default: 0 starred_by_user_ids: type: array items: type: string example: 66302798d03b9601c7934ebf mark_finished_if_reply: type: boolean example: true default: true mark_finished_if_interested: type: boolean example: true default: true mark_paused_if_ooo: type: boolean example: true default: true sequence_by_exact_daytime: {} last_used_at: {} sequence_ruleset_id: type: string example: 6095a711bd01d100a506d4e0 folder_id: {} same_account_reply_delay_days: type: integer example: 30 default: 0 is_performing_poorly: type: boolean example: false default: true num_contacts_email_status_extrapolated: type: integer example: 0 default: 0 remind_ab_test_results: type: boolean example: false default: true ab_test_step_ids: type: array prioritized_by_user: {} creation_type: type: string example: new num_steps: type: integer example: 3 default: 0 unique_scheduled: type: integer example: 0 default: 0 unique_delivered: type: integer example: 0 default: 0 unique_bounced: type: integer example: 0 default: 0 unique_opened: type: integer example: 0 default: 0 unique_hard_bounced: type: integer example: 0 default: 0 unique_spam_blocked: type: integer example: 0 default: 0 unique_replied: type: integer example: 0 default: 0 unique_demoed: type: integer example: 0 default: 0 unique_clicked: type: integer example: 0 default: 0 unique_unsubscribed: type: integer example: 0 default: 0 bounce_rate: type: integer example: 0 default: 0 hard_bounce_rate: type: integer example: 0 default: 0 open_rate: type: integer example: 0 default: 0 click_rate: type: integer example: 0 default: 0 reply_rate: type: integer example: 0 default: 0 spam_block_rate: type: integer example: 0 default: 0 opt_out_rate: type: integer example: 0 default: 0 demo_rate: type: integer example: 0 default: 0 loaded_stats: type: boolean example: true default: true cc_emails: type: string example: '' bcc_emails: type: string example: '' underperforming_touches_count: type: integer example: 0 default: 0 sharing_permission: type: object description: Who can see and act on the sequence. This replaced the legacy `permissions` field, which is no longer returned. properties: visibility: type: string description: '`everyone` if the sequence is shared with the whole team, or `restricted` if it is limited to the owner and the users or teams listed in `sharing_accesses`.' enum: - restricted - everyone example: everyone access_type: type: string description: The level of access granted to the team when `visibility` is `everyone`. `null` when `visibility` is `restricted`. enum: - can_view - can_edit - full_access nullable: true example: can_view object_type: type: string example: EmailerCampaign object_id: type: string description: The Apollo ID for the sequence. example: 66e9e215ece19801b219997f is_owner: type: boolean description: Whether the authenticated user owns the sequence. example: true owner_id: type: string description: The Apollo user ID for the sequence owner. Matches `user_id`. example: 66302798d03b9601c7934ebf sharing_accesses: type: array description: Sequences shared with specific users or teams, in addition to whatever `visibility` grants. items: type: object properties: id: type: string shared_by: type: string description: The Apollo user ID for the user who granted the access. user_or_team_id: type: string description: The Apollo ID for the user or team the sequence is shared with. user_or_team_type: type: string access_type: type: string enum: - can_view - can_edit - full_access object_id: type: string object_type: type: string is_default: type: boolean num_fetch_result: {} '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/search.\ \ Request an API key from your administrator that includes this endpoint in its configured\ \ scope.\",\n \"error_code\": \"API_INACCESSIBLE\"\n}" Check Apollo pricing plan: value: "{\n \"message\": \"This endpoint is only available to Apollo users on paid\ \ plans.\"\n}" schema: oneOf: - title: Need master API key type: object properties: error: type: string example: This API key is not authorized to access api/v1/emailer_campaigns/search. Request an API key from your administrator that includes this endpoint in its configured scope. error_code: type: string example: API_INACCESSIBLE - title: Check Apollo pricing plan type: object properties: message: type: string example: This endpoint is only available to Apollo users on paid plans. '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/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_campaigns/search is 600 times per hour. Please upgrade your plan from https://app.apollo.io/#/settings/plans/upgrade. deprecated: false /emailer_campaigns/{sequence_id}/add_contact_ids: post: summary: Add Contacts to a Sequence description: '## Endpoint essentials **API key access:** `api/v1/emailer_campaigns/add_contact_ids` or `Master API key` **OAuth scopes:** `emailer_campaigns_add_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 Add Contacts to a Sequence endpoint to add contacts to the existing sequences in your team''s Apollo account.

A contact is a person that your team has explicitly added to your database. Only contacts can be added to sequences. To enrich a person''s data, call the People Enrichment endpoint. Then, to add the person as a contact in your database, call the Create a Contact endpoint.' tags: - Sequences operationId: add-contacts-to-sequence parameters: - name: sequence_id in: path description: 'The Apollo ID for the sequence to which you want to add contacts.

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 - name: emailer_campaign_id in: query description: 'The same ID as the `sequence_id`.

Example: `66e9e215ece19801b219997f`' required: true schema: type: string - name: contact_ids[] in: query description: 'The Apollo IDs for the contacts that you want to add to the sequence.

To find contact IDs, call the Search for Contacts endpoint and identify the `id` value for the contact.

Example: `66e34b81740c50074e3d1bd4`

Note: Either `contact_ids[]` or `label_names[]` must be provided.' required: false schema: type: array items: type: string - name: label_names[] in: query description: 'Alternative to `contact_ids[]`. Array of label names to identify contacts to add to the sequence. Contacts with these labels will be added to the sequence.

Note: Either `contact_ids[]` or `label_names[]` must be provided.' required: false schema: type: array items: type: string - name: send_email_from_email_account_id in: query description: 'The Apollo ID(s) for the email account(s) used to send to contacts you add to the sequence. Accepts either one id as a string, or multiple ids as an array of strings (multi-mailbox / rotation). To find email account IDs, call the Get a List of Email Accounts endpoint and identify the `id` value for each email account.

Examples: `6633baaece5fbd01c791d7ca` (string) or `["6633baaece5fbd01c791d7ca", "6633baaece5fbd01c791d7cb"]` (array).' required: true schema: oneOf: - type: string description: Single email account ID. - type: array items: type: string minItems: 1 description: One or more email account IDs. - name: send_email_from_email_address in: query description: Optional specific email address to send from within the email account. required: false schema: type: string - name: sequence_no_email in: query description: Set to `true` if you want to add contacts to the sequence even if they do not have an email address. required: false schema: type: boolean default: false - name: sequence_unverified_email in: query description: Set to `true` if you want to add contacts to the sequence if they have an unverified email address. required: false schema: type: boolean default: false - name: sequence_job_change in: query description: Set to `true` if you want to add contacts to the sequence even if they have recently changed jobs. required: false schema: type: boolean default: false - name: sequence_active_in_other_campaigns in: query description: Set to `true` if you want to add contacts to the sequence even if they have been added to other sequences. This parameter does not differentiate between active and paused sequences. required: false schema: type: boolean default: false - name: sequence_finished_in_other_campaigns in: query description: Set to `true` if you want to add contacts to the sequence if they have been marked as `finished` in another sequence. required: false schema: type: boolean default: false - name: sequence_same_company_in_same_campaign in: query description: Set to `true` if you want to add contacts to the sequence even if other contacts from the same company are already in the sequence. required: false schema: type: boolean default: false - name: contacts_without_ownership_permission in: query description: Set to `true` if you want to add contacts even if you don't have ownership permission for them. required: false schema: type: boolean default: false - name: add_if_in_queue in: query description: Set to `true` if you want to add contacts even if they are currently in the queue for processing. required: false schema: type: boolean default: false - name: contact_verification_skipped in: query description: Set to `true` if you want to skip contact verification during the addition process. required: false schema: type: boolean default: false - name: user_id in: query description: 'The ID for the user in your team''s Apollo account.

This is the user taking the action to add contacts to a sequence. When the sequence is updated, the activity log shows the user that added the contacts.

Use the Get a List of Users endpoint to retrieve IDs for all of the users within your Apollo account.

Example: `66302798d03b9601c7934ebf`' required: false schema: type: string - name: status in: query description: Initial status for added contacts. When set to `paused` along with `auto_unpause_at`, enables scheduled addition of contacts. required: false schema: type: string enum: - active - paused - name: auto_unpause_at in: query description: 'DateTime when paused contacts should be automatically unpaused. Must be used with `status=paused`. Format: ISO 8601 datetime string.' required: false schema: type: string format: date-time responses: '200': description: '200' content: application/json: examples: Result: 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 typed_custom_fields: {} custom_field_errors: null 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: Sequence inactive status: paused added_at: '2025-07-16T22:42:57.372+00:00' added_by_user_id: 60affe7d6e270a00f5db6fe4 finished_at: null 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 skipped_contact_ids: 66e34b81740c50074e3d1bd5: contact_not_found emailer_campaign: id: 66e9e215ece19801b219997f name: Target Copywriting Clients in Dublin archived: true created_at: '2024-09-17T20:09:57.837Z' emailer_schedule_id: 6095a711bd01d100a506d52a max_emails_per_day: null user_id: 66302798d03b9601c7934ebf active: false loaded_stats: true emailer_steps: - id: 66e9e232ece19801b21999a4 emailer_campaign_id: 66e9e215ece19801b219997f position: 1 wait_time: 4 type: auto_email wait_mode: hour emailer_touches: - id: 66e9e232ece19801b21999a6 emailer_step_id: 66e9e232ece19801b21999a4 emailer_template_id: 66e9e232ece19801b21999a5 status: approved type: new_thread team: id: 6095a710bd01d100a506d4ac sequences_finder_empty: false signals_hash: null schema: type: object properties: contacts: type: array description: Array of contacts that were successfully added to the sequence items: type: object properties: id: type: string description: Unique identifier for the contact first_name: type: string nullable: true last_name: type: string nullable: true name: type: string description: Full name of the contact email: type: string nullable: true title: type: string nullable: true organization_name: type: string nullable: true linkedin_url: type: string nullable: true contact_stage_id: type: string nullable: true owner_id: type: string nullable: true creator_id: type: string person_id: type: string nullable: true organization_id: type: string nullable: true account_id: type: string nullable: true source: type: string original_source: type: string created_at: type: string format: date-time updated_at: type: string format: date-time emailer_campaign_ids: type: array items: type: string email_status: type: string nullable: true city: type: string nullable: true country: type: string nullable: true state: type: string nullable: true sanitized_phone: type: string nullable: true time_zone: type: string nullable: true contact_campaign_statuses: type: array items: type: object properties: id: type: string emailer_campaign_id: type: string status: type: string added_at: type: string format: date-time send_email_from_email_account_id: type: string send_email_from_email_address: type: string nullable: true inactive_reason: type: string nullable: true contact_emails: type: array items: type: object properties: email: type: string email_status: type: string position: type: integer email_md5: type: string email_sha256: type: string free_domain: type: boolean source: type: string email_true_status: type: string phone_numbers: type: array items: type: object properties: raw_number: type: string sanitized_number: type: string type: type: string position: type: integer status: type: string source_name: type: string label_ids: type: array items: type: string typed_custom_fields: type: object free_domain: type: boolean email_domain_catchall: type: boolean skipped_contact_ids: type: object description: Hash mapping contact IDs to reasons why they were skipped during the addition process. Each key is a contact ID and each value is a reason code. properties: : 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: ' 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: 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: ' status: type: string description: 'The review status of the touch. Choose 1 of the following options: ' 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: ' 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
Apollo Knowledge Base
\\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
Apollo Knowledge Base
\\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
Apollo\ \ Knowledge Base
\",\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
Apollo\ \ Knowledge Base
\",\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: ' 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: ' 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: ' 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: ' 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. ' 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. x-harvested-from: https://docs.apollo.io/openapi/apollo-rest-api.json x-harvested-on: '2026-08-13' x-source-document: openapi/_original/apollo-io-apollo-rest-api-openapi.json