Clay Relay Reliable inbound enrichment relay for Clay

Example inbound Clay callback boundary

A Clay callback example should prove the match, not a full workflow.

If you arrived here looking for an example inbound Clay workflow with Clay callback, the narrow reliability question is simpler: did the returned result match the original run, and did the next safe state happen after that?

This page stays synthetic on purpose. It focuses on run_id correlation, source_event_id matching, payload_hash duplicate handling, destination_status, and completed_after_timeout safety.

No full GTM workflow required. Clay Relay only checks the callback boundary. Start at the Clay Failure Boundary Library or browse more pages in Resources.

1. Boundary

Clay callback to the original run and then to the next destination

This boundary starts when the original run is sent toward Clay and ends only after the returned callback is matched, duplicate risk is checked, and downstream delivery either succeeds or becomes a visible exception.

2. Question

Did the returned Clay result match the original run safely?

A callback boundary is healthy only when the returned result can be matched to the correct run, duplicate callbacks are ignored safely, and the next destination still accepts the handoff.

3. Risk

Matching errors, duplicates, and late completion are the real failure modes

Wrong callback matched to the run

If the callback cannot be tied back to the original run cleanly, the wrong row or destination can be updated.

Duplicate callback triggers duplicate delivery

Without a safe duplicate rule, the same callback can produce a second CRM write, alert, or webhook send.

Completed-after-timeout is hidden

A late result should not erase the fact that timeout already happened. It should become a visible completed_after_timeout state.

Callback matched, but destination still failed

A good callback correlation result still needs a separate downstream acceptance check.

4. Minimum fields

A callback boundary needs correlation fields and state

run_id

The primary key for the original send and the returned callback.

source_event_id

The upstream event identity that should still match after the callback returns.

sent_to_clay_at

When the original run was handed off toward Clay.

callback_received_at

When the callback returned to the receiver.

payload_hash

A stable hash that helps ignore an exact duplicate callback safely.

destination_status

Whether the next system accepted the result after callback matching.

timeout_at

When the run was marked late before a callback arrived.

current_state

The visible run state after matching, timeout, or replay logic runs.

5. Suggested check

Match first, then handle duplicates, timeout history, and delivery

Keep one open run record, match the callback against that record, and update state based on whether the callback is on time, duplicate, late, or followed by destination failure.

Suggested state chain Boundary only
sent_to_clay -> waiting_for_result -> callback_received -> delivered_downstream / timed_out -> completed_after_timeout -> manual_review
Duplicate handling rule Safe ignore
if run_id + source_event_id + payload_hash match an existing callback record: duplicate_ignored
  • Create the run_id before sending anything toward Clay.
  • Persist source_event_id and sent_to_clay_at with the original run.
  • Accept the callback only when run_id and source_event_id match the open run.
  • Use payload_hash to ignore an exact duplicate callback safely.
  • If the callback arrives after timeout, move the run to completed_after_timeout instead of pretending the timeout never happened.
  • Track destination_status separately so callback_received and delivered_downstream stay different states.

6. No GTM logic required

The callback boundary is narrower than the workflow around it

You do not need the surrounding GTM logic to check whether a callback matched, arrived late, or should be ignored as a duplicate. The callback boundary stands on its own.

  • No lead scoring rules are needed to match a callback to the original run.
  • No routing logic is needed to decide whether a duplicate callback should be ignored.
  • No sales assignment model is needed to record completed_after_timeout safely.
  • No full GTM workflow required. Clay Relay only checks the callback boundary.

7. Synthetic example

Synthetic send, callback, and late completion example

Every value below is synthetic. The point is not the data itself. The point is how the returned callback relates back to the original run and how a late result is handled safely.

Original send All values are fake
{
  "run_id": "cr_run_20260629_401",
  "source_event_id": "evt_synthetic_401",
  "sent_to_clay_at": "2026-06-29T11:00:00Z",
  "email": "alex@example-callback.test",
  "domain": "example-callback.test"
}
Matching callback Normal path
{
  "run_id": "cr_run_20260629_401",
  "source_event_id": "evt_synthetic_401",
  "callback_received_at": "2026-06-29T11:02:14Z",
  "payload_hash": "sha256:synthetic-match-401",
  "destination_status": "accepted",
  "current_state": "delivered_downstream"
}
Late callback Completed after timeout
{
  "run_id": "cr_run_20260629_401",
  "timeout_at": "2026-06-29T11:01:30Z",
  "callback_received_at": "2026-06-29T11:03:05Z",
  "payload_hash": "sha256:synthetic-match-401",
  "duplicate_callback": "ignored_on_repeat",
  "current_state": "completed_after_timeout",
  "delivery_action": "held_for_manual_review"
}

8. Related boundaries

Clay Failure Boundary Library

Browse the wider set of callback, timeout, delivery, and replay boundaries.

Open the library

Clay webhook monitoring boundary

See how this callback example fits into the broader monitoring layer after the send.

Read the monitoring boundary

Clay callback handoff checklist

Use the checklist version when you want the callback matching rules without the longer example narrative.

Read the checklist

Clay enrichment timeout boundary

See how late callback handling fits beside timed_out visibility, Slack alerts, and replay review.

Read the timeout boundary

Use Clay as an enrichment API

Read the async handoff architecture behind callback return and delivery confirmation.

Read the architecture guide

External API push into Clay boundary

See the same callback question from the perspective of a record pushed in from another system.

Read the external push boundary

9. What Clay Relay would track

A good callback layer keeps match history and exception history visible

Original send identity

The run_id, source_event_id, and sent_to_clay_at values that define the open handoff.

Callback match result

Whether the callback matched one open run cleanly or needs manual review.

Duplicate callback ignored

Whether an exact repeated callback was dropped safely using payload_hash or equivalent logic.

Completed-after-timeout

Whether a late callback was recorded as a late completion instead of silently overwriting timeout history.

Destination acceptance

Whether the matched callback actually reached the next accepted destination.

Replay safety

Whether the run can be retried without creating a duplicate delivery.

10. CTA

Check the callback boundary before duplicates or late results confuse the run

We can review one Clay callback boundary, show where matching, duplicate handling, timeout history, or downstream delivery is still fragile, and keep the review scoped to that handoff only.