---
title: "Add Contacts to a Sequence"
method: POST
path: "/emailer_campaigns/{sequence_id}/add_contact_ids"
tags: ["Sequences"]
---

# Add Contacts to a Sequence

`POST /emailer_campaigns/{sequence_id}/add_contact_ids`

This endpoint doesn't consume Apollo credits. Learn more about [API pricing and credits](https://docs.apollo.io/docs/api-pricing).

<a href="https://knowledge.apollo.io/hc/en-us/articles/4409237165837-Sequences-Overview" target="_blank">Sequences</a> are outreach campaigns that sales teams use to reach out to contacts over a planned period of time.<br><br>Use the Add Contacts to a Sequence endpoint to add contacts to the existing sequences in your team's Apollo account.<br><br>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 <a href="https://docs.apollo.io/reference/people-enrichment">People Enrichment endpoint</a>. Then, to add the person as a contact in your database, call the <a href="https://docs.apollo.io/reference/create-a-contact">Create a Contact endpoint</a>.<br><br>This endpoint requires a master API key. If you call the endpoint without a master key, you receive a `403` response. Check out <a href="https://docs.apollo.io/docs/create-api-key">Create an API Key</a> to learn how to create a master key.

## Path parameters

- `sequence_id` string, required

## Query parameters

- `emailer_campaign_id` string, required
- `contact_ids[]` string[]
- `label_names[]` string[]
- `send_email_from_email_account_id` union, required
  - string — Single email account ID.
  - string[] — One or more email account IDs.
- `send_email_from_email_address` string
- `sequence_no_email` boolean
- `sequence_unverified_email` boolean
- `sequence_job_change` boolean
- `sequence_active_in_other_campaigns` boolean
- `sequence_finished_in_other_campaigns` boolean
- `sequence_same_company_in_same_campaign` boolean
- `contacts_without_ownership_permission` boolean
- `add_if_in_queue` boolean
- `contact_verification_skipped` boolean
- `user_id` string
- `status` 'active' | 'paused'
- `auto_unpause_at` string, date-time

## Response `200`

200

- object
  - `contacts` object[], required — Array of contacts that were successfully added to the sequence
    - `id` string — Unique identifier for the contact
    - `first_name` string, nullable
    - `last_name` string, nullable
    - `name` string — Full name of the contact
    - `email` string, nullable
    - `title` string, nullable
    - `organization_name` string, nullable
    - `linkedin_url` string, nullable
    - `contact_stage_id` string, nullable
    - `owner_id` string, nullable
    - `creator_id` string
    - `person_id` string, nullable
    - `organization_id` string, nullable
    - `account_id` string, nullable
    - `source` string
    - `original_source` string
    - `created_at` string, date-time
    - `updated_at` string, date-time
    - `emailer_campaign_ids` string[]
    - `email_status` string, nullable
    - `city` string, nullable
    - `country` string, nullable
    - `state` string, nullable
    - `sanitized_phone` string, nullable
    - `time_zone` string, nullable
    - `contact_campaign_statuses` object[]
      - `id` string
      - `emailer_campaign_id` string
      - `status` string
      - `added_at` string, date-time
      - `send_email_from_email_account_id` string
      - `send_email_from_email_address` string, nullable
      - `inactive_reason` string, nullable
    - `contact_emails` object[]
      - `email` string
      - `email_status` string
      - `position` integer
      - `email_md5` string
      - `email_sha256` string
      - `free_domain` boolean
      - `source` string
      - `email_true_status` string
    - `phone_numbers` object[]
      - `raw_number` string
      - `sanitized_number` string
      - `type` string
      - `position` integer
      - `status` string
      - `source_name` string
    - `label_ids` string[]
    - `typed_custom_fields` object
    - `free_domain` boolean
    - `email_domain_catchall` boolean
  - `skipped_contact_ids` object, required — 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.
    - `<contact_id>` string — Reason why this contact was skipped
  - `emailer_campaign` object, required — Complete emailer campaign object with statistics
    - `id` string
    - `name` string
    - `archived` boolean
    - `active` boolean
    - `created_at` string, date-time
    - `user_id` string
    - `emailer_schedule_id` string, nullable
    - `max_emails_per_day` integer, nullable
    - `same_account_reply_policy_cd` string, nullable
    - `excluded_account_stage_ids` string[]
    - `excluded_contact_stage_ids` string[]
    - `label_ids` string[]
    - `permissions` string
    - `loaded_stats` boolean
    - `unique_scheduled` union
      - integer
      - 'loading'
    - `unique_delivered` integer
    - `unique_bounced` integer
    - `unique_opened` integer
    - `unique_replied` integer
    - `bounce_rate` number
    - `open_rate` number
    - `reply_rate` number
    - `contact_statuses` object
      - `active` union
        - integer
        - 'loading'
      - `failed` integer
      - `paused` union
        - integer
        - 'loading'
      - `finished` union
        - integer
        - 'loading'
      - `bounced` union
        - integer
        - 'loading'
    - `sharing_permission` object
      - `visibility` string
      - `access_type` string
      - `object_type` string
      - `object_id` string
      - `is_owner` boolean
      - `owner_id` string
      - `sharing_accesses` object[]
        - `id` string
        - `shared_by` string
        - `user_or_team_id` string
        - `user_or_team_type` string
        - `access_type` string
        - `object_id` string
        - `object_type` string
  - `emailer_steps` object[], required — Array of sequence steps
    - `id` string
    - `emailer_campaign_id` string
    - `position` integer
    - `wait_time` integer
    - `type` 'auto_email' | 'call' | 'action_item' | 'manual_email'
    - `wait_mode` 'hour' | 'day' | 'week'
    - `note` string, nullable
    - `priority` 'high' | 'medium' | 'low', nullable
    - `counts` object
      - `active` integer
      - `paused` integer
      - `finished` integer
      - `bounced` integer
    - `unique_scheduled` union
      - integer
      - 'loading'
    - `unique_skipped` union
      - integer
      - 'loading'
    - `unique_completed` union
      - integer
      - 'loading'
  - `emailer_touches` object[], required — Array of email templates/touches for the sequence
    - `id` string
    - `emailer_step_id` string
    - `emailer_template_id` string
    - `status` 'approved' | 'pending' | 'draft'
    - `type` 'new_thread' | 'reply'
    - `include_signature` boolean
    - `has_personalized_opener` boolean
    - `template_type` string
    - `unique_scheduled` union
      - integer
      - 'loading'
    - `unique_delivered` integer
    - `unique_bounced` integer
    - `unique_opened` integer
    - `unique_replied` integer
    - `bounce_rate` number, nullable
    - `open_rate` number, nullable
    - `reply_rate` number, nullable
  - `team` object, required
    - `id` string
    - `sequences_finder_empty` boolean
  - `signals_hash` object, nullable — Optional signals data for play recommendations and analytics

## Other responses

- `401` — Unauthorized - Invalid API key
- `403` — Forbidden - Master API key required
- `422` — Unprocessable Entity - Validation errors
- `429` — Too Many Requests - Rate limit exceeded

---

[API](https://skmtc.dev/apollo/apis/apollo-rest-api.md) · [All operations](https://skmtc.dev/apollo/apis/apollo-rest-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/apollo/apollo-rest-api/revisions/c715a05fa6e2/schema)
