Agent skill

Databricks Webhooks Skill

Receive and authenticate Databricks webhooks. Use when setting up a Databricks workspace notification destination of type Webhook, securing the endpoint with HTTP Basic auth (Databricks has no payload signature), or handling job events like jobs.on_start, jobs.on_success, jobs.on_failure, jobs.on_duration_warning_threshold_exceeded and SQL alert state changes.

Install this skill

npx skills add hookdeck/webhook-skills --skill databricks-webhooks


Databricks POSTs JSON to a workspace notification destination of type Webhook when a job or task run starts, succeeds, fails, or exceeds its duration threshold, and when a Databricks SQL alert changes state.

When to Use This Skill

  • How do I receive Databricks webhooks?
  • How do I verify Databricks webhooks? Is there a Databricks webhook signature?
  • How do I secure a Databricks webhook notification destination with Basic auth?
  • How do I handle jobs.on_success or jobs.on_failure events?
  • How do I handle Databricks SQL alert (alert_state_change) webhooks?
  • Why does my Databricks webhook endpoint return 401?

Verification (core)

Databricks does not sign webhook payloads. There is no signature header and no HMAC. When you create the Webhook destination you can set a username and password; Databricks then sends Authorization: Basic base64(username:password) on every request. Decode it and compare both values timing-safe:

const crypto = require('crypto');
const safeEqual = (a, b) => {
  const ab = Buffer.from(a), bb = Buffer.from(b);
  return ab.length === bb.length && crypto.timingSafeEqual(ab, bb);
};

function verifyDatabricksAuth(authHeader, username, password) {
  if (!authHeader || !username || !password || !authHeader.startsWith('Basic ')) return false;
  const decoded = Buffer.from(authHeader.slice(6), 'base64').toString('utf-8');
  const i = decoded.indexOf(':'); // passwords may contain ':'
  if (i === -1) return false;
  const userOk = safeEqual(decoded.slice(0, i), username);
  const passOk = safeEqual(decoded.slice(i + 1), password);
  return userOk && passOk;
}

The OAuth (Beta) option for webhook destinations uses client credentials and an access token; it is separate and not covered here. A destination can use Basic auth or OAuth, not both.

No body signature means the raw body isn't security-critical: normal JSON parsing is fine. Databricks requires an HTTPS endpoint with a certificate from a trusted CA, and publishes outbound IP ranges you can allowlist.

For complete handlers with tests, see examples/express/, examples/nextjs/, examples/fastapi/.

Common Event Types

Job and task payloads carry event_type:

event_typeSent when
jobs.on_startA run starts
jobs.on_successA run stops and completed in a successful or succeeded-with-failures state
jobs.on_failureA run stops in an unsuccessful state
jobs.on_duration_warning_threshold_exceededA run exceeds the configured duration threshold

Job payloads include workspace_id, run.run_id, job.job_id, job.name, and, for task-level notifications, task.task_key and run.parent_run_id.

SQL alerts send a different payload. It has no event_type; the field is event with the value alert_state_change, plus url_base and an alert object. See references/overview.md.

Environment Variables

DATABRICKS_WEBHOOK_USERNAME=your_destination_username
DATABRICKS_WEBHOOK_PASSWORD=your_destination_password

The examples fail closed (return 500) if either is missing.

Local Development

For local webhook testing, run the Hookdeck CLI via npx (no install required):

npx hookdeck-cli listen 3000 databricks --path /webhooks/databricks

No account required. The CLI provides a public URL that tunnels to your local server, plus a web UI for inspecting requests.

Reference Materials


Repository

hookdeck/webhook-skills

v0.1.0 · MIT · Updated Nov 2, 2026

View on GitHub →