> ## 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.


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