FullEnrich · AsyncAPI Specification
Fullenrich Webhooks
Version
View Spec
View on GitHub
B2B DataContact EnrichmentEmail FinderPhone FinderWaterfall EnrichmentSales IntelligencePeople SearchCompany SearchReverse Email LookupAgent ReadyAsyncAPIWebhooksEvents
AsyncAPI Specification
generated: '2026-08-14'
method: searched
source: https://docs.fullenrich.com/api/v2/general/webhooks
spec_type: WebhookCatalog
asyncapi_published: false
asyncapi_note: >-
FullEnrich publishes no AsyncAPI document. Probed the docs host, the llms.txt
index and the GitHub organization; no /asyncapi.yaml, event catalog or channel
spec exists. This file captures the webhook surface the provider does document,
rather than fabricating a spec on its behalf.
description: >-
FullEnrich's enrichment and reverse-email-lookup APIs are asynchronous, and
webhooks are the provider's recommended collection mechanism — polling is
explicitly discouraged. Two outbound events are documented, both signed with
HMAC-SHA1 and retried on failure.
transport: HTTPS POST callback to a caller-supplied URL
subscription_model: per-request — the callback URL is a field on the job submission, not a registered endpoint
registration_ui: none (no webhook management console documented)
events:
- name: batch_finished
parameter: webhook_url
trigger: >-
Fires once when the entire batch finishes, runs out of credits, or is
canceled.
applies_to:
- postContactBulkEnrich
- postContactBulkReverseEmail
payload_schema: '#/components/schemas/ResponseGetContactBulkEnrich'
payload_note: >-
Identical to the body returned by the GET results endpoint — status, cost,
and the full data array.
status_values: [FINISHED, CREDITS_INSUFFICIENT, CANCELED]
- name: contact_finished
parameter: webhook_events.contact_finished
trigger: >-
Fires immediately as each individual contact completes, without waiting for
the batch. Designed for real-time integrations.
applies_to:
- postContactBulkEnrich
payload_schema: '#/components/schemas/ResponseGetContactBulkEnrich'
payload_note: >-
Same envelope, with a single contact in the `data` array. `status` is
IN_PROGRESS because the batch is not finished.
combinable: >-
Can be used together with webhook_url — the caller receives one event per
contact plus a final batch event.
security:
signature_header: X-Signature-SHA1
algorithm: HMAC-SHA1
encoding: lowercase hex
signed_payload: the raw request body bytes (UTF-8), before any JSON parsing or re-serialization
secret: the workspace API key
verification_guidance: >-
Compute HMAC-SHA1 of the raw body keyed with the API key, hex-encode lowercase,
and compare in constant time. The docs publish verified examples in Node.js,
Python, PHP and Go.
observations:
- >-
HMAC-SHA1 is weaker than the HMAC-SHA256 that is now standard for webhook
signing across the industry.
- >-
The signing secret IS the API key rather than a dedicated signing secret, so
the credential that authenticates outbound calls also verifies inbound ones.
Rotating the API key silently breaks webhook verification until the receiver
is updated.
- >-
No timestamp is included in the signature, so the scheme does not defend
against replay on its own.
delivery:
retries: 5
retry_interval: every 1 minute
retry_trigger: any non-2xx response from the receiver
guarantee: >-
Documented as effectively "guaranteed delivery"; the provider's team can check
delivery logs on request. There is no self-serve delivery-log UI documented.
fallback: >-
'GET /contact/enrich/bulk/{enrichment_id}' within the 3-month retention window.
correlation:
mechanism: '`custom` object'
detail: >-
A caller-supplied string map (max 10 keys, 100 chars per value) is echoed back
unchanged in the webhook payload — the intended join key to a CRM record or
user id. Non-string values are rejected.
testing:
recommended_tool: https://webhook.site
detail: >-
The docs recommend a webhook.site temporary URL to inspect the payload shape
while integrating. See sandbox/fullenrich-sandbox.yml.
no_code_platforms:
detail: >-
Zapier, Make, Clay and n8n handle the webhook leg automatically; the docs tell
users of those platforms to skip webhook setup entirely.
gaps:
- No AsyncAPI document, so the event surface is not machine-readable.
- No webhook management/registration endpoint or console — URLs are per-request only.
- No documented event id or delivery id, so receivers cannot deduplicate a retried delivery.
- No timestamp in the signature scheme.