---
title: "Start an async contact import"
method: POST
path: "/contacts/imports"
tags: ["Contacts"]
---

# Start an async contact import

`POST /contacts/imports`

## Request

- Base URL: `https://www.unitpost.com/api/v1`
- URL: `https://www.unitpost.com/api/v1/contacts/imports`
- Auth: HTTP bearer

Import a batch of contacts (up to 5,000 per request) in the background. The call returns immediately with an import job you poll for progress and per-row results — new contacts are created and existing ones (matched by email) are skipped, not changed. Track it with [Retrieve a contact import](#get-contacts-imports-id), or see all your imports via [List contact imports](#get-contacts-imports). To add a single contact synchronously, use [Create a contact](#post-contacts). Requires the `contacts:write` capability.

## Request body

- ContactImportCreate
  - `contacts` object[], required
    - `email` string, required
    - `first_name` string
    - `last_name` string
    - `custom_fields` object

## Response `202`

Accepted; the import job was enqueued.

- ContactImport
  - `object` 'contact_import', required
  - `id` string, required
  - `status` 'pending' | 'processing' | 'completed' | 'failed' | 'canceled', required
  - `total` number, required
  - `imported` number, required
  - `skipped` number, required
  - `failed` number, required
  - `invalid` object[], required
    - `row` number, required
    - `reason` string, required
  - `error` string, nullable, required
  - `created_at` string, required
  - `updated_at` string, required

## Other responses

- `401`: Missing or invalid API key.
- `422`: Validation error.
- `502`: The importer could not be reached; the job was marked failed. Submit the import again.

---

[API](https://skmtc.dev/unitpost/apis/unitpost-api.md) · [All operations](https://skmtc.dev/unitpost/apis/unitpost-api/llms.txt) · [OpenAPI document](https://skmtc.dev/unitpost/apis/unitpost-api/revisions/86ff7c890967?raw)
