Skip to main content
POST
Import entities (CSV)

Endpoint

Overview

Content-Type: multipart/form-data. Enqueues the same bulk job as the dashboard Bulk imports hub. Requires entities:bulk_import and org bulk automatic entity import enabled. 202 response includes jobId and effective importMode.

Authentication

Import Modes (entityImportMode)

Legacy values manual_no_enrichment and automatic_enriched are still accepted on input and normalized to manual / automatic. Responses use the canonical names.

Default When Sending Only the CSV

β†’ importMode: manual β€” minimal entity, no enrichments unless you add them explicitly.

Manual with Selected Enrichments

Same semantics as the dashboard Manual mode:
Optional monitoring JSON (main entity only in manual mode).

Automatic Mode (Explicit)

Omitting autoExecuteIntegrations in automatic mode β†’ all active enrichments for the org. With depth > 0, send autoExecuteIntegrationsShareholders (JSON) for shareholders.

Manual without Post-Create Rules

(You can omit entityImportMode β€” manual is already the default.)

Platform CSV (no mappingId)

Minimum headers: tax_id, type. Recommended: suggested_name (required in manual mode). See Country (ISO2) below for country_code.

Country (ISO2) β€” Always Required

Every entity row needs a country to create the record (manual and automatic). Provide it in one or both places: Priority: country_code on the row β†’ batch country. If neither is set for a row, the import fails with missing country before the job runs. Examples:
  • Simple CSV, all rows Argentina β†’ headers tax_id,type + form country=AR.
  • Advanced CSV, mixed countries β†’ include country_code on each row (form country optional fallback).
  • Advanced CSV, single country β†’ either all rows with country_code=AR or form country=AR without the column.
Reference templates β€” download (fixed demo tax IDs; replace before production import) or generate fresh IDs from the dashboard hub (Entities β†’ bulk import): Canonical source (keep in sync when columns change): apps/web/src/lib/bulk-automatic-entity-import-parse.ts. Automatic example (truncated):
Manual example (truncated):
Legacy single-file name bulk-entities-template.csv is no longer used by the hub; pick the template matching your entityImportMode.

Column Reference (Platform CSV)

Header names are case-insensitive; spaces become _ (e.g. country code β†’ country_code). Aliases in parentheses.
Same entity, multiple links (CSV): platform CSV supports one relationship per row. If the same person/company appears on several rows with different related_*, Gu1 does not recreate the entity (duplicate tax_id skip) but still applies that row’s link. If the edge (source β†’ target + type) already exists, that link is skipped (idempotent). API/JSON alternative: a single create with up to 10 items in relationships[].
Removed (2026-06-04): CSV columns execute_all_active_checks and checks are no longer part of the import contract. Use enrichments, enrichment_group_refs, and execute_all_active_enrichments instead. See Changelog.
Dot notation: same as native transaction CSV β€” dotted headers build nested objects. Enrichments may overwrite entityData; CSV values are re-applied at the end (CSV wins on conflicts). What goes to attributes: attributes.*, legacy metadata.*, or unprefixed columns. Batch-level form field attributes (JSON) is merged with per-row attributes (row wins on key collision). Simple CSV (only tax_id + type): send batch form field country (ISO2) β€” required. No country_code column needed. Custom CSV (non-platform headers): use a saved mappingId β€” column mapping is defined in the dashboard, not by this table.
  • Per-row enrichment columns apply in both modes when set on the row; depth / shareholders only in automatic.
Optional β€” automatic mode only. Prefix relationship_ (plural alias relationships_). Custom batch policies (e.g. Paytime): omit relationship_execute_all_active_enrichments from the CSV if you want step-2 form policy to apply. Use relationship_omit_enrichments per row for one-off exceptions only. Example: batch all-active on shareholders except global sanctions on children:

Custom CSV

Non-platform column layout β†’ mappingId required (entity_person / entity_company / entity_mixed mapping).

Form Fields

Success Response

Child Enrichments & Monitoring

Automatic mode with depth > 0 creates shareholders (company roots) or related entities (person roots). Two batch fields control how enrichments and watchlist monitoring apply to those children: monitoringApplyToRelationships: when false, the monitoring JSON applies to main entities only (monitoring.main); related entities are not added to watchlists even if enrichments run on them. Recommended false with by_root_type when the main entity should enter sanctions monitoring but children should not. Example (mixed company + person CSV, depth 1, main watchlist only, differentiated children):
Per-row autoExecuteIntegrationsShareholders in JSON bulk (POST /entities/bulk/automatic) or relationship_* CSV columns still override the batch policy for that item.

Manual vs. Automatic (Same Job Queue)

Limits

Default When Mode Omitted

Hub vs. API

See also: Bulk imports overview.