| name | clay-webhooks-events |
| description | Implement Clay webhook receivers and HTTP API column callbacks for real-time data flow.
Use when setting up webhook endpoints, handling enrichment callbacks from Clay,
or building event-driven integrations with Clay tables.
Trigger with phrases like "clay webhook", "clay events", "clay callback",
"handle clay data", "clay notifications", "clay HTTP API column".
|
| allowed-tools | Read, Write, Edit, Bash(curl:*) |
| version | 1.14.0 |
| license | MIT |
| author | Jeremy Longshore <jeremy@intentsolutions.io> |
| tags | ["saas","clay","webhooks"] |
| compatibility | Designed for Claude Code, also compatible with Codex and OpenClaw |
Clay Webhooks & Events
Overview
Clay's event-driven architecture has two webhook patterns: (1) Inbound webhooks -- you POST data into Clay tables via unique webhook URLs, and (2) Outbound HTTP API columns -- Clay POSTs enriched data to your endpoint after enrichment completes. This skill covers both patterns with production-ready handlers.
Prerequisites
- Clay table with webhook source configured (for inbound)
- Clay table with HTTP API enrichment column (for outbound)
- HTTPS endpoint accessible from the internet
- Familiarity with Express.js or similar framework
Instructions
Step 1: Inbound Webhook -- Send Data into Clay
Every Clay table has a unique webhook URL. When you POST JSON to this URL, a new row appears in the table.
class ClayInboundWebhook {
constructor(
private webhookUrl: string,
private submissionCount: number = 0,
private readonly LIMIT: number = 50_000,
) {}
async sendRow(data: Record<string, unknown>): Promise<void> {
if (this.submissionCount >= this.LIMIT) {
throw new Error(`Webhook exhausted (${this.LIMIT} submissions). Create a new webhook in Clay.`);
}
res = (., {
: ,
: { : },
: .(data),
});
(!res.) {
();
}
.++;
}
(: <, >[], delayMs = ): <{ : ; : }> {
sent = , failed = ;
( row rows) {
{
.(row);
sent++;
} {
failed++;
}
( (r, delayMs));
}
{ sent, failed };
}
}
webhook = (process..!);
webhook.({
: ,
: ,
: ,
: ,
: ,
});