agency-board

POST /v1/board-hooks/{endpointKey}

The public inbound door — n8n, Zapier, Make, GitHub.

All agency-board endpoints

Authentication

This endpoint is public. It takes no credential and no organisation — it is what our own marketing site and AI answer engines read.

This endpoint takes no organisation id. Your key already identifies the organisation it belongs to, and the response is scoped to it.

Try it

Replace anything in angle brackets with your own values, and the key placeholder with a key from your dashboard.

curl -X POST https://api.zinndigital.com/v1/board-hooks/{endpointKey} \
  -H "Content-Type: application/json" \
  -d '{  }'

Signed in? The API console in your dashboard fills in your real organisation id and your own key, and runs the request against the live API so you can see the actual response. Open this endpoint in the API console

Details

**Unauthenticated by design: the HMAC signature IS the authentication**, exactly as `/v1/webhooks/stripe` is. Send `X-Zinn-Signature: sha256=<hmac-sha256 over "<timestamp>.<raw body>">` and `X-Zinn-Timestamp` (unix seconds, within five minutes of now), signed with the endpoint's secret. The body must be a JSON object. Five top-level values — `event`, `status`, `title`, `body`, `ref` — are projected into the rule's condition surface as `payload_*`, so a rule can branch on them. Anything else in the body is stored in the request log and is not conditionable. ⛔ An unknown endpoint key and a bad signature both answer **404 with the same body**, deliberately: distinguishing them would turn this into an oracle for whether a key exists. The endpoint's OWNER sees the real reason on their own screen.

Parameters

NameTypeRequiredWhat it is
endpointKey (path)stringYesThe endpoint's opaque key — 32 hex characters. Deliberately not the board id: a board id in a URL customers paste into third-party systems leaks an internal identifier into some…

Request body

NameTypeRequiredWhat it is
eventstringNo
statusstringNo
titlestringNo
bodystringNo
refstringNo

Response

NameTypeRequiredWhat it is
acceptedbooleanYes
rules_firedintegerNo
detailstringNo

Errors this endpoint can return

404 · 409 · 413 · 429