Crawl4AI · AsyncAPI Specification

Crawl4Ai Webhooks

Version

View Spec View on GitHub AI AutomationWeb CrawlingWeb ScrapingData ExtractionSearchLLM ToolingAgentsMCPOpen-SourceAsyncAPIEvents

AsyncAPI Specification

crawl4ai-webhooks.yml Raw ↑
generated: '2026-08-29'
method: searched
source: >-
  https://github.com/unclecode/crawl4ai/blob/main/deploy/docker/WEBHOOK_EXAMPLES.md,
  skills/reference/crawl4ai-endpoints.md,
  https://github.com/unclecode/crawl4ai-cloud-sdk (examples/crawl/04_async_webhook_http)
provider: Crawl4AI
providerId: crawl4ai
description: >-
  Crawl4AI publishes a real webhook surface for async crawl jobs — configuration,
  payload shapes, retry policy and header validation — on the self-hosted server
  and as a webhook_url parameter on every v1 async job. It publishes NO AsyncAPI
  document, so this is a webhook catalog rather than an event spec.
asyncapi_published: false
asyncapi_probed:
  - {url: 'https://gate.crawl4ai.com/asyncapi.yaml', status: 404}
  - {url: 'https://gate.crawl4ai.com/asyncapi.json', status: 404}
delivery:
  style: http-callback
  direction: provider-to-consumer
  transport: 'HTTPS POST to a caller-supplied URL'
  subscription: >-
    Per job. There is no subscription API and no event catalog — the caller passes
    webhook_url (v1) or webhook_config (self-hosted) at submit time.
  purpose: '"eliminating the need for polling"'
configuration:
  v1_api:
    parameter: webhook_url
    applies_to:
      - 'POST /v1/markdown/async'
      - 'POST /v1/screenshot/async'
      - 'POST /v1/extract/async'
      - 'POST /v1/crawl/async'
      - 'POST /v1/crawl/site'
    note: 'Described as "POST callback on completion".'
  self_hosted:
    parameter: webhook_config
    fields:
      - {name: webhook_url, type: string, description: Destination URL.}
      - {name: webhook_data_in_payload, type: bool, description: Include the full crawl results in the payload rather than only a notification.}
    global_config_key: webhooks
    global_defaults:
      enabled: true
      default_url: null
      data_in_payload: false
      headers: {User-Agent: 'Crawl4AI-Webhook/1.0'}
    source: deploy/docker/config.yml
events:
  - name: crawl.completed
    trigger: An async crawl job finishes.
    payload_example:
      task_id: crawl_a1b2c3d4
      task_type: crawl
      status: completed
      timestamp: '2025-10-21T10:30:00.000000+00:00'
      urls: ['https://example.com']
    note: >-
      Notification-only shape (webhook_data_in_payload:false). The handler is
      expected to fetch results with GET /crawl/job/{task_id}. With
      webhook_data_in_payload:true the full crawl results are inlined instead.
    payload_field_names_verbatim: true
retry_policy:
  published: true
  max_attempts: 5
  backoff: exponential
  initial_delay_ms: 1000
  schedule: '1s, 2s, 4s, 8s, 16s'
  max_delay_ms: 32000
  timeout_ms: 30000
  note: '30s timeout per webhook call.'
security:
  signature: none
  finding: >-
    NO webhook signing is published — no HMAC signature header, no shared secret,
    no timestamp/replay protection. A receiver cannot verify that a callback came
    from Crawl4AI, and with webhook_data_in_payload:true the callback carries the
    crawl content itself. Custom headers can be set, so a caller can supply their
    own bearer as a workaround.
  header_validation:
    since: 0.8.8
    rule: >-
      User-supplied webhook headers are validated — name pattern enforced, control
      characters rejected, hop-by-hop and sensitive headers denied — and malformed
      headers return HTTP 422 (CWE-93 fix).
  destination_validation:
    since: 0.9.0
    rule: 'Webhook destinations are pinned/validated (deploy/docker/tests/test_security_webhook_pinning.py).'
gate_api_note: >-
  The gate.crawl4ai.com Cloud API job surface (POST /scrape/jobs) documents
  submit, status, results and retry but NO webhook parameter — on that surface an
  agent must poll. Webhooks are available on the v1 API and the self-hosted server
  only.
recommendation: >-
  Publishing an AsyncAPI 3.x document for these callbacks, plus a signature
  header, would make the event surface consumable without reading prose.
maintainers:
  - FN: Kin Lane
    email: kin@apievangelist.com

Work with this as data

Every AsyncAPI spec here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for asyncapi

4 MCP tools reach this
  • find_asyncapisBrowse and filter every AsyncAPI spec in the catalog.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This AsyncAPI spec
curl "https://apis.io/api/v1/asyncapis/crawl4ai-webhooks"
All asyncapi
curl "https://apis.io/api/v1/asyncapis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.