---
title: "Retrieve a contact import"
method: GET
path: "/companies/{company}/contacts/imports/{id}"
tags: ["Contacts"]
---

# Retrieve a contact import

`GET /companies/{company}/contacts/imports/{id}`

## Request

- Base URL: `https://api.factuarea.com/v1`
- URL: `https://api.factuarea.com/v1/companies/{company}/contacts/imports/{id}`
- Auth: one of:
  - HTTP bearer
  - API key in header `X-API-Key`

Retrieve persisted progress and row outcomes using the UUID returned as import_uuid, including synchronous imports. Requires contacts:read. Unknown, foreign-company and non-contact imports return the same 404 import_not_found. Added counts applied create/update/add_role rows; failed imports retain confirmed progress and unprocessed_count.

## Path parameters

- `company` string, uuid, required
- `id` string, uuid, required

## Headers

- `Factuarea-Version` string, date

## Response `200`

Persisted contact import progress and original row outcomes.

- object
  - `data` BusinessContactImport, required: Tracking of a contact import. `outcomes` lists at most 500 rows (`outcomes_truncated`); `skip_reasons` counts the skipped rows by reason.
    - `id` string, uuid, required
    - `object` 'contact_import', required
    - `entity_type` 'business_contacts', required
    - `status` 'queued' | 'running' | 'completed' | 'partial' | 'failed', required
    - `source_filename` string, required
    - `total_rows` integer, required
    - `added_count` integer, required
    - `updated_count` integer, required
    - `skipped_count` integer, required
    - `failed_count` integer, required
    - `warnings_count` integer, required
    - `unprocessed_count` integer, required
    - `outcome_kind` 'changes_applied' | 'nothing_changed' | 'partial' | 'failed' | 'null', nullable, required: `nothing_changed` means the import finished without creating or updating anything; do not present it as a success.
    - `skip_reasons` object, required: Skipped rows grouped by reason.
    - `first_diagnostics` object[], required
      - `code` string, required
      - `field` string, nullable, required
      - `severity` 'error' | 'warning', required
      - `message` string, required
      - `count` integer, required
      - `first_row` integer, required
      - `received_value` string, nullable
      - `params` object
    - `outcomes` object[], required
      - `row_number` integer, required
      - `result` 'applied' | 'skipped' | 'failed', required
      - `action` 'create' | 'update' | 'add_role' | 'merge_candidate' | 'skip' | 'conflict' | 'invalid', required
      - `reason` 'already_exists' | 'duplicate_in_file' | 'merged_into_group' | 'header_row_in_data' | 'example_row' | 'no_changes' | 'merge_review_required' | 'identity_conflict' | 'validation_failed' | 'document_rows_invalid' | 'group_header_conflict' | 'concurrent_identity_taken' | 'update_not_allowed' | 'not_found_for_update' | 'null', nullable, required
      - `group_key` string, nullable, required
      - `target_uuid` string, uuid, nullable, required
      - `errors` object[], required: Errors and warnings of the row.
        - `row` integer, required
        - `field` string, nullable, required
        - `code` string, required
        - `message` string, required
        - `severity` 'warning': Only present on warnings; errors omit it.
        - `params` object
        - `received_value` string: Received cell value, truncated to 120 characters.
        - `column` string
    - `outcomes_truncated` boolean, required
    - `error_report_url` string, nullable, required
    - `failure_reason` string, nullable, required
    - `created_at` string, date-time, required
    - `started_at` string, date-time, nullable, required
    - `finished_at` string, date-time, nullable, required

## Other responses

- `400`: The request is syntactically malformed — e.g. an unknown query parameter, an integer parameter with non-numeric value, or a value outside the documented range. `parameter_unknown` with `subcode` `retired_active_profile_header`: the retired `X-Active-Profile` header was sent; the company goes in the path. `parameter_invalid_format` on `Factuarea-Version`: the header is not a `YYYY-MM-DD` date. `unsupported_api_version`: the `Factuarea-Version` date is not a supported version.
- `401`: Missing or invalid API key.
- `403`: The request is authenticated but not allowed: the API key lacks the required scope (`insufficient_scope`), the plan does not include the public API or this feature (`addon_not_active`, `feature_not_available_in_plan`), or the module is not available with a test key (`module_not_available_in_sandbox`). `company_inactive`: the company in the path is deactivated; reactivate it to operate.
- `404`: The requested resource does not exist or belongs to another company.
- `429`: Rate limit exceeded. Retry after the duration in `Retry-After`.
- `500`: Unexpected server error.

---

[API](https://skmtc.dev/factuarea/apis/factuarea-public-api.md) · [All operations](https://skmtc.dev/factuarea/apis/factuarea-public-api/llms.txt) · [OpenAPI document](https://skmtc.dev/factuarea/apis/factuarea-public-api/revisions/718e77934422?raw)
