---
title: "Estimate Find Contact Data Job"
method: POST
path: "/v1/contacts/find-contact-data-jobs/estimate"
tags: ["Contacts", "Enrichment", "v1"]
---

# Estimate Find Contact Data Job

`POST /v1/contacts/find-contact-data-jobs/estimate`

## Request

- Base URL: `https://api.leadfeeder.com`
- URL: `https://api.leadfeeder.com/v1/contacts/find-contact-data-jobs/estimate`
- Auth: one of:
  - API key in header `X-Api-Key`
  - OAuth 2
    - Authorization code: `https://api.leadfeeder.com/v1/oauth/authorize`
    - Token URL: `https://api.leadfeeder.com/v1/oauth/token` scopes: `contacts:read`

Estimate the credit cost for enriching contacts with email and phone data. Accepts either explicit `contact_ids` or a `list_id` to target an entire list. Returns the number of eligible contacts and the estimated total credits that would be consumed.
Credit Note: This endpoint does not consume credits.

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

## Query parameters

- `account_id` string, required

## Request body

- object
  - `data` object, required
    - `attributes` union, required: Provide exactly one of `contact_ids` or `list_id`. Use `enrichment_type` to scope which data is revealed.
      - object
        - `contact_ids` string[], required: List of contact IDs to enrich with email and phone data. Each ID is a string representation of the contact's numeric ID. Mutually exclusive with `list_id`.
        - `enrichment_type` 'email_only' | 'full': Which contact data to reveal. Email is always included, so there is no phone-only option.
        - `list_id` string: The list of contacts to enrich. Mutually exclusive with `contact_ids`.
      - object
        - `contact_ids` string[]: List of contact IDs to enrich with email and phone data. Each ID is a string representation of the contact's numeric ID. Mutually exclusive with `list_id`.
        - `enrichment_type` 'email_only' | 'full': Which contact data to reveal. Email is always included, so there is no phone-only option.
        - `list_id` string, required: The list of contacts to enrich. Mutually exclusive with `contact_ids`.
    - `type` string

## Response `200`

Estimate calculated successfully

- object
  - `data` object, required
    - `attributes` object, required
      - `eligible_contacts` integer, required: Number of contacts eligible for enrichment
      - `estimated_total_credits` number, required: Estimated credits that would be consumed. Contact enrichment is priced per contact at a fractional rate, so this can be a decimal.
    - `id` string, uuid, required: Unique estimate identifier
    - `type` string, required
  - `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`.
- `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

## Changes

> 46 revisions in range; 1 not diffed.

- **2026-09-18** `5d15ed543ab8`: 1 breaking
  - the `data/attributes/estimated_total_credits` response's property type changed from `integer` to `number` for status `200`
- **2026-09-03** `ac752c6c2be0`: 6 info
  - added the optional property `errors/items/source` to the response with the `400` status
  - added the optional property `errors/items/source` to the response with the `401` status
  - added the optional property `errors/items/source` to the response with the `403` status
  - added the optional property `errors/items/source` to the response with the `422` status
  - …2 more
- **2026-08-20** `c3d2135b565b`: 1 breaking, 1 info
  - removed `subschema #1, subschema #2` from the `data/attributes` request property `oneOf` list
  - added `subschema #1, subschema #2` to the `data/attributes` request property `oneOf` list
- **2026-07-13** `12ae8a6b9fad`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/leadfeeder/apis/leadfeeder-public-api/changes/v1/contacts/find-contact-data-jobs/estimate/post.md)

---

[API](https://skmtc.dev/leadfeeder/apis/leadfeeder-public-api.md) - [All operations](https://skmtc.dev/leadfeeder/apis/leadfeeder-public-api/llms.txt) - [OpenAPI document](https://skmtc.dev/leadfeeder/apis/leadfeeder-public-api/revisions/686d4e39eb05?raw)
