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

# Clay Integration for AI Agents & Workflows

> Push records into a Clay table via its inbound webhook so Clay can run its data-enrichment waterfall on prospects and accounts.

{/* Self-hosted logo — build-time vendored from modulex.json / Iconify (see scripts/lib/logo.js). */}

<img src="https://mintcdn.com/modulexaillc/df8MOr-hXotYLTh5/logos/placeholder.svg?fit=max&auto=format&n=df8MOr-hXotYLTh5&q=85&s=a4046f9cd6d738c81259050e9833913c" alt="Clay logo" width="72" height="72" data-path="logos/placeholder.svg" />

## Overview

Add **Clay** to any ModuleX agent or workflow. Push records into a [Clay](https://www.clay.com) table through that table's inbound webhook so Clay can run its data-enrichment waterfall on prospects and accounts.

<Info>
  **Categories**: Sales · CRM · Enrichment · **Auth**: Webhook Auth Token · **Actions**: 1
</Info>

## Authentication

### Webhook Auth Token

Authenticate with the optional auth token from a Clay table's webhook source. Sent in the x-clay-webhook-auth header. Leave empty if the table's webhook does not require authentication.

<Steps>
  <Step title="Step 1">
    In a Clay workbook, click + Add and search for 'Webhooks', then 'Monitor webhook'.
  </Step>

  <Step title="Step 2">
    Copy the webhook URL Clay shows for the table — this is the webhook\_url action parameter.
  </Step>

  <Step title="Step 3">
    If the table has webhook authentication enabled, copy the auth token Clay displays (it is shown only once).
  </Step>

  <Step title="Step 4">
    Paste the auth token below; otherwise leave it blank.
  </Step>
</Steps>

#### Required Credentials

| Field                   | Description                                                                          | Required | Format |
| ----------------------- | ------------------------------------------------------------------------------------ | -------- | ------ |
| Clay Webhook Auth Token | Optional auth token for a Clay table webhook, sent in the x-clay-webhook-auth header | No       | `-`    |

## Available Actions

<AccordionGroup>
  <Accordion title="populate — Populate a Clay table with a record by sending it to the table's webhook URL. Clay enriches the record asynchronously; the response is an acknowledgment plus transport metadata.">
    ### Parameters

    <ResponseField name="webhook_url" type="string" required>
      The Clay table webhook URL to send the record to
    </ResponseField>

    <ResponseField name="data" type="object" required>
      The record to populate, as a JSON object whose keys map to the Clay table column names (e.g. name, email, company, domain)
    </ResponseField>

    ### Response

    ```json theme={null}
    {
      "$defs": {
        "PopulateMetadata": {
          "additionalProperties": false,
          "description": "Transport-level metadata about the webhook response.",
          "properties": {
            "status": {
              "anyOf": [
                {
                  "type": "integer"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Status"
            },
            "status_text": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Status Text"
            },
            "headers": {
              "additionalProperties": {
                "type": "string"
              },
              "title": "Headers",
              "type": "object"
            },
            "timestamp": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Timestamp"
            },
            "content_type": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "null"
                }
              ],
              "default": null,
              "title": "Content Type"
            }
          },
          "title": "PopulateMetadata",
          "type": "object"
        }
      },
      "additionalProperties": false,
      "description": "Result of pushing a record to a Clay table webhook.",
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Error"
        },
        "data": {
          "anyOf": [
            {},
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Data"
        },
        "metadata": {
          "anyOf": [
            {
              "$ref": "#/$defs/PopulateMetadata"
            },
            {
              "type": "null"
            }
          ],
          "default": null
        }
      },
      "required": [
        "success"
      ],
      "title": "PopulateOutput",
      "type": "object"
    }
    ```
  </Accordion>
</AccordionGroup>

## Limits & Quotas

* **Asynchronous enrichment**: the webhook acknowledges receipt
  immediately; Clay runs its enrichment waterfall afterward, so the
  enriched columns appear inside Clay, not in the tool response.
* **Response shape**: the tool returns whatever the webhook
  acknowledges (`data`) plus transport `metadata` (HTTP status, status
  text, response headers, a call-time ISO-8601 UTC timestamp, and the
  content type). A non-JSON acknowledgment is wrapped as
  `{"message": "<text>"}`.
* **Error model**: non-2xx responses, timeouts, and unexpected
  exceptions are caught and returned as `success=False` + `error`
  rather than raising.

## Related integrations

<CardGroup cols={3}>
  <Card title="Dropcontact" href="/integrations/tools/dropcontact" />

  <Card title="Brandfetch" href="/integrations/tools/brandfetch" />

  <Card title="Enrow" href="/integrations/tools/enrow" />
</CardGroup>

## Links

* [Clay](https://www.clay.com)
