Source · Hugging Face · Verified November 1, 2026

Hugging Face

Short answer: Hugging Face Hub webhooks report model and dataset repo changes, config updates, discussions, pull requests and comments.

Hooks verifies Hugging Face deliveries with shared secret sent verbatim in x-webhook-secret; the body is not signed, so a holder of the secret can modify it and normalizes them into the unified event format.

Set up the webhook in Hugging Face

  1. Open https://huggingface.co/settings/webhooks, create a webhook, and set its target URL to this Hooks receive URL.
  2. Choose the model or dataset repos and the repo, repo.content, repo.config, discussion and discussion.comment scopes.
  3. Configure an ASCII webhook secret and paste the same value here. Hugging Face sends it in X-Webhook-Secret; Hooks compares it in constant time.
  4. Hugging Face signs no payload body: the shared secret proves the webhook configuration, not payload integrity. Only expose the HTTPS URL to trusted operators and rotate the secret if it leaks.
  5. Retries and manual replays reuse Webhook-Id; deliveries can arrive out of order and each Webhook is limited to 1,000 triggers per 24 hours.

Signature verification

HeaderX-Webhook-Secret
AlgorithmShared secret sent verbatim in X-Webhook-Secret; the body is not signed, so a holder of the secret can modify it
Replay windowNone; dedupe by delivery id
Delivery idWebhook-Id

Events Hooks normalizes

event.typesubjectWhat it means
discussion.createeventHugging Face Hub webhooks report model and dataset repo changes, config updates, discussions, pull requests and comments.

Normalized payload

Every adapter produces this shape before filters or templates run. The raw payload and sanitized headers stay attached for audit, but filters and templates read the normalized fields.

Normalized event

{
  "id": "evt_demo",
  "source": "huggingface",
  "type": "discussion.create",
  "action": "create",
  "deliveryId": "delivery_demo",
  "subject": {
    "title": "Hugging Face event"
  },
  "raw": {
    "event": {
      "action": "create",
      "scope": "discussion"
    },
    "repo": {
      "type": "model",
      "name": "openai-community/gpt2",
      "id": "621ffdc036468d709f17434d",
      "private": false,
      "url": {
        "web": "https://huggingface.co/openai-community/gpt2",
        "api": "https://huggingface.co/api/models/openai-community/gpt2"
      },
      "owner": {
        "id": "628b753283ef59b5be89e937"
      }
    },
    "discussion": {
      "id": "6399f58518721fdd27fc9ca9",
      "title": "Update co2 emissions",
      "url": {
        "web": "https://huggingface.co/openai-community/gpt2/discussions/19",
        "api": "https://huggingface.co/api/models/openai-community/gpt2/discussions/19"
      },
      "status": "open",
      "author": {
        "id": "61d2f90c3c2083e1c08af22d"
      },
      "num": 19,
      "isPullRequest": true,
      "changes": {
        "base": "refs/heads/main"
      }
    },
    "comment": {
      "id": "6399f58518721fdd27fc9caa",
      "author": {
        "id": "61d2f90c3c2083e1c08af22d"
      },
      "content": "Add co2 emissions information to the model card",
      "hidden": false,
      "url": {
        "web": "https://huggingface.co/openai-community/gpt2/discussions/19#6399f58518721fdd27fc9caa"
      }
    },
    "webhook": {
      "id": "6390e855e30d9209411de93b",
      "version": 3
    }
  }
}

Filter and template examples

Filter

type equals "discussion.create"

Template

"Hugging Face event: {{event.subject.title}}"

Retries and the delivery log

408, 425, 429, and 5xx responses retry with backoff and honor Retry-After; other 4xx responses fail permanently with a named code. Every attempt keeps the rendered request and the target response, so a failure points at one field or one status instead of a guess.

Hooks delivery detail: attempt timeline, request payload, and the destination response for one delivery
Delivery detail: the attempt timeline, the rendered request the target received, and its response — the same record an event keeps for every destination.

Common errors

SymptomFix
SIGNATURE_INVALIDUse the signing secret Hugging Face shows when the webhook is created, and send X-Webhook-Secret for the exact raw body.
Nothing arrivesConfirm the webhook points at the endpoint's /in/<endpoint-id> URL and that the endpoint is active.

Pair with a target

Reference

Other sources