> ## Documentation Index
> Fetch the complete documentation index at: /help/llms.txt
> Use this file to discover all available pages before exploring further.

# Dropcontact

> Enrich a contact's email and company with Dropcontact's batch API from a Poll until step.

> [!NOTE]
>
> **Pro plan.** Dropcontact works through a connection and HTTP steps, which are part of Pro and Agency (and the free trial). Anything you already have keeps working on every plan. See [Plans and billing](/help/account/billing.md).

Dropcontact works in two calls: you submit the person, then you ask for the result with the id it gave you. A single **Poll until** step does both: its first call submits the contact, then it asks again every few minutes until Dropcontact is done.

> [!NOTE]
>
> **How it connects:** Dropcontact's API with your key in the `X-Access-Token` header. See Dropcontact's [Enrich a batch of records](https://developer.dropcontact.com/en/reference/enrich-a-batch-of-records) docs. The requests and answers below follow Dropcontact's docs.

## Before you start

* **Dropcontact plan:** the API uses the same credits as the app (Dropcontact's pricing).
* **An API key:** copy it from the API settings of the Dropcontact app.

## 1. Connect Dropcontact

In Kerux, open **Integrations > Connections**, click **Connect** on **Custom API** (under **Developers**):

* **How it signs in:** **API key in a header**, **Header name** `X-Access-Token`, paste the key.
* **Base URL:** `https://api.dropcontact.com`

Click **Save**, then **Test connection**.

## 2. Submit and poll

Add a **Poll until** step named `dropcontact`, pick the Dropcontact connection and set it up like this:

```json theme={null}
{
  "start": {
    "method": "POST",
    "url": "/v1/enrich/all",
    "bodyType": "json",
    "body": {
      "data": [
        {
          "first_name": "{{contact.first_name}}",
          "last_name": "{{contact.last_name}}",
          "company": "{{contact.company}}",
          "linkedin": "{{contact.linkedin_url}}"
        }
      ]
    }
  },
  "request": {
    "method": "GET",
    "url": "/v1/enrich/all/{{steps.dropcontact_start.response.body.request_id}}",
    "bodyType": "none"
  },
  "until": { "path": "success", "op": "eq", "value": "true" },
  "intervalMinutes": 5,
  "maxAttempts": 12
}
```

The first call's answer (from Dropcontact's docs) carries the id:

```json theme={null}
{ "error": false, "request_id": "abc123", "success": true }
```

While the job runs, the GET answers with `success: false` and a reason. When it's done (trimmed):

```json theme={null}
{
  "success": true,
  "data": [
    {
      "first_name": "Maria",
      "email": [{ "email": "maria@acme.com", "qualification": "nominative@pro" }],
      "nb_employees": "50-200"
    }
  ]
}
```

In the next steps: `{{steps.dropcontact.response.body.data.0.email.0.email}}` and `{{steps.dropcontact.response.body.data.0.nb_employees}}` (array positions are written as numbers between dots).

## 3. Use it safely

Add a **Condition** on the email: found goes to your email step, empty stays on LinkedIn. Add an **Update contact** step to keep the email on the contact.

## Test with one contact

In the **Builder**, click **Test** to open **Test on one contact**. The journey shows the submission, each check (the last one, the next one and how many are left) and the final answer.

## Common errors

> [accordion] 401 or 403
>
> The key is wrong. Copy it again from Dropcontact and edit the connection.

> [accordion] The step ends as timed out
>
> Dropcontact wasn't done after all the checks. Raise `maxAttempts`, or check the request in Dropcontact.

> [accordion] No email in the answer
>
> Dropcontact found no email for that person. The step still succeeds; branch on the email being empty.

Related: [Webhook steps](/help/integrations/webhook-steps.md), [FullEnrich](/help/integration-guides/fullenrich.md), [Prospeo](/help/integration-guides/prospeo.md).


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.