---
title: "Create Webhook"
method: POST
path: "/hooks"
tags: ["Webhooks"]
---

# Create Webhook

`POST /hooks`

Register a new webhook subscription.

**Handshake:** on create, Everhour sends a POST to the supplied `targetUrl` with an `X-Hook-Secret` header (HMAC-SHA512) and an empty body. The receiver must respond with a 2xx status to complete verification. Send `X-Skip-Handshake: 1` to skip verification when the receiver cannot participate.

**Scope:** a webhook can listen across the whole team or be scoped to a single project. See [Webhooks](/webhooks) for event types, payload structure, and delivery semantics.

## Request body

- WebhookRequestCreateRequest
  - `targetUrl` string, required — URL that receives event POSTs.
  - `events` string[], required — Events you want to receive.
  - `project` string, nullable — Restrict the subscription to a single project.

## Response `201`

Created

- Webhook
  - `id` number, required — Webhook ID
  - `targetUrl` string, required
  - `events` string[], required
  - `project` string, nullable — You can receive events only for specific project
  - `active` boolean
  - `createdAt` string, required — Datetime when webhook was created (format: Y-m-d H:i:s)
  - `lastUsedAt` string, required — Datetime when webhook was last used (format: Y-m-d H:i:s)

## Other responses

- `401` — Unauthorized

---

[API](https://skmtc.net/everhour/apis/everhour-api.md) · [All operations](https://skmtc.net/everhour/apis/everhour-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/everhour/everhour-api/versions/fc6136e33352/schema)
