> ## Documentation Index
> Fetch the complete documentation index at: https://docs.sequenzy.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Create Subscriber Import

> Queue an asynchronous import of up to 5,000 full subscriber records

Use this endpoint for CRM migrations and first-list onboarding instead of
issuing one create request per contact. The request returns `202` immediately;
use the returned import ID with [Get Subscriber Import](/api-reference/subscribers/import-status).

## Permissions

The API key needs `subscribers:write`. Supplying `listIds` also requires
`lists:write`; requesting sequence enrollment or double-opt-in delivery requires
`automations:trigger`.

<ParamField body="subscribers" type="object[]" required>
  One to 5,000 records. Every record requires `email` and may include
  `externalId`, `firstName`, `lastName`, `phone`, `status`, `tags`, and typed
  `customAttributes`.
</ParamField>

<ParamField body="duplicateStrategy" type="string" default="skip">
  `skip`, `merge`, or `overwrite`.
</ParamField>

<ParamField body="listIds" type="string[]">
  List IDs to apply to every imported subscriber. Every ID must belong to the
  authenticated workspace.
</ParamField>

<ParamField body="optInMode" type="string" default="default">
  `default` obeys the workspace setting, `confirmed` imports contacts whose
  consent has already been verified, and `double_opt_in` queues confirmation
  delivery. Keys without `automations:trigger` must use `confirmed` for active
  consented contacts.
</ParamField>

<ParamField body="enrollInSequences" type="boolean" default="false">
  Enroll matching subscribers after import. Requires `automations:trigger`.
</ParamField>

<ParamField body="defaultPhoneCountry" type="string">
  Two-letter country code used to normalize national-format phone numbers.
</ParamField>

<ParamField body="smsConsent" type="boolean">
  Apply the supplied SMS consent to imported phone numbers. Never infer this
  from phone presence.
</ParamField>

```bash theme={null}
curl -X POST "https://api.sequenzy.com/api/v1/subscribers/imports" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "fileName": "copper-export.csv",
    "duplicateStrategy": "merge",
    "optInMode": "confirmed",
    "listIds": ["list_abc123"],
    "subscribers": [{
      "email": "coach@example.com",
      "externalId": "copper-23",
      "firstName": "Ari",
      "lastName": "Tan",
      "phone": "81234567",
      "tags": ["copper", "consented"],
      "customAttributes": { "source": "Copper", "sessions": 4 }
    }]
  }'
```

<ResponseExample>
  ```json 202 theme={null}
  {
    "success": true,
    "import": {
      "id": "import_abc123",
      "batchId": "batch_abc123",
      "status": "running",
      "totalRows": 1,
      "emailCount": 1,
      "duplicateRows": 0
    },
    "message": "Queued 1 subscriber for import."
  }
  ```
</ResponseExample>

<Note>
  A completed import can contain row failures. Always inspect `failedCount` and
  `failedReasons` before treating the migration as successful.
</Note>
