---
title: "Add Contacts Bulk"
method: POST
path: "/v1/interviews/{interview_id}/contacts/bulk"
tags: ["interviews"]
---

# Add Contacts Bulk

`POST /v1/interviews/{interview_id}/contacts/bulk`

Add multiple contacts in a single request.

This is much more efficient than calling the single contact endpoint multiple times,
as it reduces the number of database roundtrips and auth checks.

Duplicates (matching an existing contact — or an earlier row of the same
batch — by person_id, email, or slack_user_id) are skipped, not created:
on an active campaign every created row is invited immediately, and the
client's own duplicate check is a stale snapshot (a teammate may have
added the same person since, or a retried request would double-send).

## Path parameters

- `interview_id` string, uuid, required

## Headers

- `X-API-Key` string, nullable

## Request body

- BulkContactsCreate
  - `contacts` AppApiInterviewSchemasContactCreate[], required
    - `person_id` string, uuid, nullable
    - `name` string, required
    - `email` string, nullable
    - `slack_user_id` string, nullable
    - `slack_team_id` string, nullable
    - `phone` string, nullable
    - `job_title` string, nullable
    - `department` string, nullable
    - `seniority_level` integer, nullable
    - `is_required` boolean
    - `question_set_id` string, uuid, nullable

## Response `201`

Successful Response

- BulkContactsOut
  - `created` AppApiInterviewSchemasContactOut[], required
    - `id` string, uuid, required
    - `interview_id` string, uuid, required
    - `person_id` string, uuid, nullable
    - `question_set_id` string, uuid, nullable, required
    - `name` string, required
    - `email` string, nullable, required
    - `slack_user_id` string, nullable
    - `slack_team_id` string, nullable
    - `slack_dm_channel_id` string, nullable
    - `phone` string, nullable, required
    - `job_title` string, nullable, required
    - `department` string, nullable, required
    - `seniority_level` integer, nullable, required
    - `is_required` boolean, required
    - `meeting_url` string, nullable, required
    - `booking_token` string, nullable
    - `status` string, required
    - `reminder_count` integer
    - `last_reminder_at` string, date-time, nullable
    - `reinvited_from_contact_id` string, uuid, nullable
    - `booking_token_expires_at` string, date-time, nullable
    - `invitation_status` string
    - `scheduled_at` string, date-time, nullable, required
    - `completed_at` string, date-time, nullable, required
    - `created_at` string, date-time, required
    - `scheduled_session_status` string, nullable
    - `scheduled_session_available_at` string, date-time, nullable
    - `scheduled_session_started_at` string, date-time, nullable
    - `scheduled_session_expires_at` string, date-time, nullable
    - `delivery_failure_reason` string, nullable
    - `delivery_failure_at` string, date-time, nullable
    - `last_accessed_at` string, date-time, nullable
    - `session_accessibility_message` string, nullable
  - `count` integer, required
  - `skipped` integer
  - `invited_count` integer
  - `invitations_scheduled_for` string, date-time, nullable

## Other responses

- `422` — Validation Error

---

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