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

# FullEnrich

> Run FullEnrich's waterfall enrichment from a campaign: the contact waits with a callback URL and continues with the email or phone found.

> [!NOTE]
>
> **Pro plan.** FullEnrich works through a connection, HTTP steps and listeners (**Wait for webhook**, **Call & wait**), 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).

FullEnrich looks for emails and phone numbers across many providers in a row and calls back when it's done. A **Call & wait** step starts the job with this contact's own callback URL, the contact waits, and FullEnrich's answer resumes exactly that contact.

> [!NOTE]
>
> **How it connects:** FullEnrich's API with a bearer token, and its webhook at the end of each job. See [FullEnrich's API docs](https://docs.fullenrich.com) (bulk enrich, v2). The request and answer below follow FullEnrich's docs.

## Before you start

* **FullEnrich plan:** credits are charged per email or phone found, and nothing when nothing is found. Phones cost more credits than emails (FullEnrich's pricing).
* **An API key:** create one in the FullEnrich app's settings.

## 1. Connect FullEnrich

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

* **How it signs in:** **Bearer token**, paste the key.
* **Base URL:** `https://app.fullenrich.com`

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

## 2. Start the job and wait

After **Invitation accepted**, add a **Call & wait** step, pick the FullEnrich connection and name it `fullenrich`. Its request:

```json theme={null}
{
  "method": "POST",
  "url": "/api/v2/contact/enrich/bulk",
  "bodyType": "json",
  "body": {
    "name": "Kerux {{contact.full_name}}",
    "webhook_url": "{{wait.callback_url}}",
    "data": [
      {
        "first_name": "{{contact.first_name}}",
        "last_name": "{{contact.last_name}}",
        "company_name": "{{contact.company}}",
        "linkedin_url": "{{contact.linkedin_url}}",
        "enrich_fields": ["contact.work_emails"]
      }
    ]
  }
}
```

FullEnrich first answers with the job's id (`{"enrichment_id": "..."}`). When the waterfall ends, it POSTs the result to the callback URL. Set the wait limit to about 2 hours.

`enrich_fields` picks what to look for: `contact.work_emails`, `contact.personal_emails`, `contact.phones`, or several.

## 3. Use the result

Click **Listen for test event** on the step and run one contact. Kerux shows FullEnrich's callback: click the email or phone field to copy it, for example `{{steps.fullenrich.payload.<path to the email>}}`. Then:

* a **Condition** on that field: email found goes to your email step, phone found to a **Slack message** for a call;
* an **Update contact** step to keep the email on the contact;
* the **timed out** exit continues on LinkedIn only.

## Test with one contact

In the **Builder**, click **Test** to open **Test on one contact**. The journey shows the request, FullEnrich's first answer and, when it arrives, the callback.

## Common errors

> [accordion] 401 Unauthorized
>
> The key is wrong. Copy it again from FullEnrich's settings and edit the connection.

> [accordion] The contact waits until it times out
>
> FullEnrich didn't call back. Check the job in FullEnrich; make sure `webhook_url` is `{{wait.callback_url}}` exactly, and that the wait limit is long enough.

> [accordion] Invalid data on the callback
>
> The callback arrived but a field the step requires is missing (for example no email found). Remove that requirement, or branch on the field instead.

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


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