Companies

Apply a companies CSV import

Write up to 100 reviewed rows. Every row is planned again, never trusted from the plan, and written in its own transaction, so one bad row never stops the others: each result is `created`, `updated`,

POST /v2/companies/import/apply

Parameters

Header parameters

Idempotency-Key
string required
Required. UUID per logical operation, reused on every retry. See apps/rest-api/src/shared/idempotency.ts for the full contract. Missing → 400 BadRequest; same key + different body → 409 Conflict.

Request body

Content-Type: application/json

view_id
string (uuid) required
mode
string enum required
Possible values: "fill_empty", "overwrite"
defer_unresolved_company_links
boolean required
rows
array<object> required
rows[].row_index
integer required
rows[].id
string
rows[].fields
object required
rows[].fields.name
string
rows[].fields.description
string
rows[].fields.linkedin_description
string
rows[].fields.website_url
string
rows[].fields.linkedin_slug
string
rows[].fields.facebook_slug
string
rows[].fields.x_slug
string
rows[].fields.instagram_slug
string
rows[].fields.headquarters_location
string
rows[].fields.country_code
string
rows[].fields.email
string
rows[].fields.phone_number
string
rows[].fields.arr_estimate
string
rows[].fields.number_of_employees
string
rows[].owner_email
string
rows[].tags
array<string>
rows[].custom_fields
array<object>
rows[].custom_fields[].custom_field_id
string (uuid)
rows[].custom_fields[].raw
string
rows[].action
string enum required
Possible values: "create", "update"
rows[].company_id
string (uuid)
rows[].acknowledged_company_ids
array<string (uuid)>

Example

{
  "view_id": "00000000-0000-0000-0000-000000000000",
  "mode": "fill_empty",
  "defer_unresolved_company_links": false,
  "rows": [
    {
      "row_index": 0,
      "fields": {
        "name": "string",
        "description": "string"
      },
      "action": "create"
    }
  ]
}

Responses

200 — Successful response

Content-Type: application/json

data
object required
data.results
array<object> required
data.results[].row_index
integer required
data.results[].status
string enum required
Possible values: "created", "updated", "unchanged", "skipped_archived", "failed"
data.results[].company_id
string (uuid)
data.results[].error
object
data.results[].error.code
string
data.results[].error.message
string
data.results[].error.retryable
boolean
data.results[].error.existing_company_id
string (uuid)
data.results[].warnings
array<object>
data.results[].warnings[].field
string
data.results[].warnings[].code
string
data.results[].warnings[].message
string

Example

{
  "data": {
    "results": [
      {
        "row_index": 0,
        "status": "created"
      }
    ]
  }
}

400 — Request body failed validation.

Content-Type: application/json

(body)
any

401 — Missing or invalid API key.

Content-Type: application/json

(body)
any

403 — Valid key, insufficient permission.

Content-Type: application/json

(body)
any

404 — Resource does not exist.

Content-Type: application/json

(body)
any

409 — Request conflicts with the current state of the resource.

Content-Type: application/json

(body)
any

429 — Rate limit exceeded.

Content-Type: application/json

(body)
any

500 — Unexpected server error.

Content-Type: application/json

(body)
any

Code samples

curl https://api.prod.getdex.com/v2/companies/import/apply \
  --request POST \
  --header 'Authorization: Bearer YOUR_API_KEY' \
  --header "Idempotency-Key: $(uuidgen 2>/dev/null || python3 -c 'import uuid;print(uuid.uuid4())')" \
  --header 'Content-Type: application/json' \
  --data '{
  "view_id": "00000000-0000-0000-0000-000000000000",
  "mode": "fill_empty",
  "defer_unresolved_company_links": false,
  "rows": [
    {
      "row_index": 0,
      "fields": {
        "name": "string",
        "description": "string"
      },
      "action": "create"
    }
  ]
}'
Copyright © 2026