Import contacts
Import contacts from CSV with target roles, field mapping, conflict strategy and optional dry_run.
- Returns an import_uuid with 200 (sync) or 202 (queued); dry_run is synchronous and uses no quota.
- Exhausted allowance returns 429 import_row_quota_exceeded; an empty file 422 subcode empty_import.
- CSV, TXT, XLSX or XLS up to 10 MB.
Request
- Base URL: https://api.factuarea.com/v1
- URL: https://api.factuarea.com/v1/companies/{company}/contacts/import
- Auth: one of:
- HTTP bearer
- API key in header X-API-Key
Path parameters
Public identifier (UUID v7) of the company. Get it from GET /v1/me (data.scope[].id).
Headers
Client-generated opaque key (up to 255 characters; UUID v7 recommended) that makes retries safe: the first response is cached and replayed for repeats without re-executing the mutation. Reusing a key with a different body returns 422 idempotency_key_reused; the values of secret fields (password, secret…) count as part of the body, so retrying with a corrected secret under the same key is a different request, never the replay of the earlier answer. See the Idempotency guide. Required on this operation: repeating it delivers an effect that cannot be taken back (an email sent, a file generated, a third-party call, a charge), so a request without this header is rejected with 422 idempotency_key_required before any business logic runs.
Pin the API version (YYYY-MM-DD, Stripe-style date versioning) for this request; omit to use the key's pinned version, or the latest if none. Unsupported version → 400 unsupported_api_version; malformed → 400 parameter_invalid_format. The effective version is echoed in the Factuarea-Version response header. See the Versioning guide.
Response
BusinessContactImportPreviewResource
Example response
{
"data": {
"source_headers": [
"Name",
"VAT number",
"Email"
],
"rows": [
{
"row": 2,
"action": "create",
"reason": null,
"target_uuid": null,
"errors": [],
"warnings": []
}
],
"total": 1,
"create": 1,
"update": 0,
"add_role": 0,
"merge_candidate": 0,
"skip": 0,
"conflict": 0,
"invalid": 0,
"dry_run": true,
"queued": false,
"import_uuid": null,
"added_count": null,
"updated_count": null,
"skipped_count": null,
"failed_count": null,
"warnings_count": null,
"unprocessed_count": null,
"skip_reasons": {},
"outcome_kind": null,
"status": null,
"failure_reason": null
}
}Changes
No recorded changes to this operation across all 1 revision of this API.