---
title: "Create Company Enrichment Job"
method: POST
path: "/v1/companies/enrichment-jobs"
tags: ["Companies", "Enrichment", "v1"]
---

# Create Company Enrichment Job

`POST /v1/companies/enrichment-jobs`

Trigger an asynchronous job to enrich companies with AI-generated custom field values. The custom field must exist and be of an AI type (`ai_score`, `ai_text`, `ai_number`, `ai_boolean`). Create custom fields via the Custom Fields API first.
The job runs in the background; poll the status endpoint to check progress.
A maximum of 50,000 companies are enriched per job, whether targeted via `company_ids` or `list_id`; companies beyond this limit are not processed. Split larger selections across multiple jobs.
Credit Note: Credits are consumed as companies are enriched.

:::info
Requires the `companies:read` OAuth2 scope.
:::

## Query parameters

- `account_id` string, required

## Request body

- object
  - `data` object, required
    - `type` string
    - `attributes` union, required — Provide exactly one of `company_ids` or `list_id`, plus a `custom_field_id` identifying the AI field to enrich.
      - object
        - `company_ids` string[], required — Specific company IDs to enrich. Mutually exclusive with `list_id`.
        - `list_id` string — The list to enrich. Mutually exclusive with `company_ids`.
        - `custom_field_id` string, required — The API name of the custom field to enrich. Must be an AI field type (ai_score, ai_text, ai_number, ai_boolean).
        - `enrichment_strategy` 'missing_values' | 'all' — Which records to enrich
      - object
        - `company_ids` string[] — Specific company IDs to enrich. Mutually exclusive with `list_id`.
        - `list_id` string, required — The list to enrich. Mutually exclusive with `company_ids`.
        - `custom_field_id` string, required — The API name of the custom field to enrich. Must be an AI field type (ai_score, ai_text, ai_number, ai_boolean).
        - `enrichment_strategy` 'missing_values' | 'all' — Which records to enrich

## Response `202`

Job accepted and started

- object
  - `data` EnrichmentJobV1, required
    - `type` string, required
    - `id` string, required — Unique job identifier
    - `attributes` object, required
      - `status` 'running' | 'completed' | 'failed', required — Current status of the job
      - `configuration` object — Echoed request configuration. Present once the job has started.
        - `company_ids` string[] — Specific company IDs targeted (mutually exclusive with list_id)
        - `list_id` string — List ID targeted (mutually exclusive with company_ids)
        - `custom_field_id` string — The custom field being enriched
        - `enrichment_strategy` 'missing_values' | 'all' — Which records to enrich
      - `credits` object — Credit consumption details
        - `estimated` integer — Credits estimated at job creation
        - `consumed` integer — Credits consumed so far
      - `summary` object — Record processing summary
        - `total` integer — Total records to process
        - `succeeded` integer — Records enriched successfully
        - `failed` integer — Records that failed enrichment
      - `errors` object[] — Present only when status is `failed`
        - `code` string, required — Machine-readable error code
        - `title` string, required — Human-readable error description
      - `created_at` string, date-time, required — When the job was created
      - `completed_at` string, date-time, nullable — When the job completed (null while running)
  - `meta` object, required
    - `request_id` string, required — A unique identifier assigned to each API request for end-to-end traceability.

## Other responses

- `400` — Invalid request body envelope
- `401` — Unauthorized. The request was rejected because the credentials are missing, invalid, expired, or have been revoked. The client must re-authenticate before retrying. Clients can differentiate via the `code` value of the first item in `errors`.
- `403` — Forbidden. The credentials are valid but the caller is not authorized to perform the request — typically because the user lacks the required permission, the OAuth scope is insufficient, the subscription plan does not include the required entitlement, the `account_id` does not belong to the authenticated user, or the target list is read-only and its members cannot be modified. Clients can differentiate via the `code` value of the first item in `errors`.
- `404` — Custom field not found
- `422` — Unprocessable content — request body is well-formed but fails domain validation
- `429` — Too many requests. Either the per-second rate limit or the monthly quota configured for the API key / OAuth application has been exceeded. Clients can differentiate via the `code` value of the first item in `errors`.
- `500` — Internal server error

---

[API](https://skmtc.net/leadfeeder/apis/leadfeeder-public-api.md) · [All operations](https://skmtc.net/leadfeeder/apis/leadfeeder-public-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/leadfeeder/leadfeeder-public-api/revisions/3818d08d92d0/schema)
