Rewish
Integrations

Webhooks

Outbound webhooks and payload verification for rewish integrations.

rewish can POST signed JSON to your HTTPS endpoints when projects and issues change. Configure endpoints under Integrations → API & Webhooks in the workspace dashboard.

Authentication

Webhook requests are unsigned at the transport layer — verify each payload with the signing secret shown when you create an endpoint.

HeaderValue
Content-Typeapplication/json
X-rewish-Signaturesha256=<hex> HMAC of the raw body
User-Agentrewish-webhooks/1.0

Verify signatures (Node.js)

import { createHmac, timingSafeEqual } from "node:crypto";

function verifyRewiSignature(secret: string, rawBody: string, header: string | null) {
	if (!header?.startsWith("sha256=")) {
		return false;
	}
	const expected = createHmac("sha256", secret).update(rawBody).digest("hex");
	const received = header.slice("sha256=".length);
	if (expected.length !== received.length) {
		return false;
	}
	return timingSafeEqual(Buffer.from(expected), Buffer.from(received));
}

Payload shape

Every delivery uses the same envelope:

{
	"event": "issue.created",
	"timestamp": "2026-09-01T12:00:00.000Z",
	"data": {
		"organizationId": "org_…",
		"issue": {}
	}
}

For project events, data.project is set instead of data.issue:

{
	"event": "project.created",
	"timestamp": "2026-09-01T12:00:00.000Z",
	"data": {
		"organizationId": "org_…",
		"project": {
			"id": "…",
			"name": "Marketing site",
			"slug": "marketing-site"
		}
	}
}

Issue object

FieldTypeDescription
idstringIssue id
numbernumberIssue number in the project
titlestringIssue title
statusstringBoard status
prioritystringPriority / severity
urlstring | nullPage URL when reported from a website
projectIdstringParent project id
projectNamestringParent project name

Events

EventBugHerd equivalentWhen it fires
project.createdproject_createA new project is created in the workspace
issue.createdtask_createA new issue is created
issue.updatedtask_updateNon-status issue fields change
issue.deletedtask_destroyAn issue is deleted
issue.comment.createdcommentA comment is added
issue.status_changed(part of task_update)Issue status / board column changes

Status-only updates send issue.status_changed only (not issue.updated).

Project scope

Each endpoint can listen to all projects or a single project. Scoped endpoints only receive events for that project. project.created fires for the new project when the endpoint is scoped to all projects or to that project.

REST API

Use a workspace API key (ntk_live_…) from Integrations → API & Webhooks with the REST API (/api/v1/projects, /api/v1/issues, and webhook delivery routes).

Webhooks complement the API: use webhooks for push notifications and the API to read or mutate resources on demand.

On this page