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

# Clay Integration

> Push leads from Clay tables directly into Reached campaigns for parallel dialing.

# Clay Integration

Push leads from Clay tables directly into Reached campaigns for parallel dialing. This guide walks you through the full setup.

<Steps>
  <Step title="Generate an API Key">
    In Reached, go to **Settings > API** and click **Create Key**. Name it "Clay" and copy the generated key.

    Your key starts with `rchd_live_` -- store it securely.
  </Step>

  <Step title="Get your Campaign ID">
    Use the List Campaigns endpoint to find the ID of the campaign you want to push leads into:

    ```bash theme={null}
    curl -X GET \
      "https://api.reachedapp.com/v1/campaigns?status=active" \
      -H "Authorization: Bearer rchd_live_xxxxxxxxxxxx"
    ```

    Copy the `id` field from the campaign you want to target.
  </Step>

  <Step title="Configure Clay HTTP Action">
    In your Clay table, add an **HTTP Action** step with the following configuration:

    | Setting          | Value                                                       |
    | ---------------- | ----------------------------------------------------------- |
    | **Method**       | POST                                                        |
    | **URL**          | `https://api.reachedapp.com/v1/campaigns/CAMPAIGN_ID/leads` |
    | **Header**       | `Authorization: Bearer rchd_live_xxxxxxxxxxxx`              |
    | **Content-Type** | `application/json`                                          |

    Map your Clay columns to the request body:

    ```json theme={null}
    {
      "leads": [
        {
          "first_name": "{{first_name}}",
          "last_name": "{{last_name}}",
          "phone": "{{phone}}",
          "email": "{{email}}",
          "company_name": "{{company}}",
          "title": "{{job_title}}",
          "linkedin_url": "{{linkedin_url}}"
        }
      ]
    }
    ```
  </Step>

  <Step title="Retrieve Call Results">
    After calls are made, use the Call Logs endpoint to pull results back into Clay:

    ```bash theme={null}
    curl -X GET \
      "https://api.reachedapp.com/v1/call-logs?campaign_id=CAMPAIGN_ID&date_from=2026-03-21T00:00:00Z" \
      -H "Authorization: Bearer rchd_live_xxxxxxxxxxxx"
    ```

    Each call log includes the `disposition`, `duration`, `recording_url`, and timestamps.
  </Step>
</Steps>

## Key Endpoints for Clay

| Method | Endpoint                  | Use Case                                |
| ------ | ------------------------- | --------------------------------------- |
| `POST` | `/v1/campaigns/:id/leads` | Push leads into a campaign              |
| `GET`  | `/v1/call-logs`           | Pull call results and dispositions      |
| `GET`  | `/v1/leads/:id`           | Get full lead details with call outcome |
| `POST` | `/v1/leads/:id/enrich`    | Trigger AI enrichment for a lead        |

## Deduplication

The API automatically handles deduplication:

* If a lead with the same **phone number** already exists in your workspace, the existing lead is linked to the campaign
* If a lead with the same **email** already exists, the existing lead is linked to the campaign
* If the lead is already in the campaign, it will be returned with status `already_in_campaign`

<Info>
  This means you can safely push the same Clay table multiple times without creating duplicates.
</Info>

## Zapier & Make

The same API endpoints work with any HTTP-capable automation tool:

* **Zapier**: Use the "Webhooks by Zapier" action with a POST request
* **Make (Integromat)**: Use the "HTTP > Make a request" module
* **n8n**: Use the "HTTP Request" node

The configuration is identical -- just use the same URL, headers, and body format shown above.
