Webhooks
Create signed NOCK webhook endpoints and receive ticket lifecycle events in your own systems.
Webhooks send NOCK ticket events to HTTPS endpoints you control. Use them to update a CRM, notify Slack, trigger an n8n workflow, feed your own backend, or power external adapters for GitHub Issues and Jira.
Note
Linear is the only native project-management integration in NOCK today. GitHub Issues and Jira workflows are built with webhooks, Public API calls, and your own adapter or automation layer.
Create webhooks in the dashboard
Workspace admins can create webhook endpoints from the workspace integrations area:
Open workspace integrations
Go to the NOCK dashboard and open the workspace integrations settings.
Add an endpoint URL
Enter an HTTPS endpoint that can receive JSON POST requests.
Choose scope and events
Optionally restrict the webhook to one project, then select the events it should receive.
Store the signing secret
Copy the secret when NOCK shows it. It is returned only once.
Send a test event
Use the test action next to the webhook endpoint to send a signed webhook.test delivery and confirm that your endpoint returns a 2xx response.
Webhook URLs must use HTTPS. Local, private, loopback, and internal network hosts are rejected to reduce SSRF risk.
Manage webhooks by API
API keys need webhooks:write.
List endpoints:
curl -sS "https://nocknock.cloud/api/v1/webhooks" \
-H "Authorization: Bearer $NOCK_API_KEY"Create an endpoint:
curl -sS -X POST "https://nocknock.cloud/api/v1/webhooks" \
-H "Authorization: Bearer $NOCK_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://example.com/nock/webhook",
"project_id": "'"$NOCK_PROJECT_ID"'",
"events": ["ticket.created", "ticket.status_changed"]
}'Disable an endpoint:
curl -sS -X DELETE "https://nocknock.cloud/api/v1/webhooks/$NOCK_WEBHOOK_ID" \
-H "Authorization: Bearer $NOCK_API_KEY"Project-scoped API keys can manage only webhooks for their project.
Events
| Event | Trigger |
|---|---|
ticket.created | A ticket is created from the widget, Customer Portal, dashboard, or Public API. |
ticket.updated | Ticket content or workflow fields changed. |
ticket.status_changed | A ticket status changed. |
ticket.note.created | A customer-visible reply was created. |
When a status changes, NOCK sends both ticket.updated and ticket.status_changed. Use idempotency in your consumer if both events can trigger the same downstream action.
Dashboard test deliveries use webhook.test. This event is not selectable as a subscription event; it is emitted only when a workspace admin manually tests an endpoint.
Payload shape
{
"id": "evt_...",
"event": "ticket.created",
"created_at": "2026-06-25T12:00:00.000Z",
"org_id": "00000000-0000-0000-0000-000000000000",
"project_id": "00000000-0000-0000-0000-000000000000",
"ticket_id": "00000000-0000-0000-0000-000000000000",
"ticket_reference": "NK-1234",
"data": {
"ticket": {
"id": "00000000-0000-0000-0000-000000000000",
"title": "Checkout fails on Safari",
"status": "Backlog",
"priority": "normal",
"source": "widget",
"annotations": [
{
"type": "pin",
"page_url": "https://example.com/checkout",
"x": 640,
"y": 360,
"x_ratio": 0.5,
"y_ratio": 0.4,
"selector": "#pay-button",
"screenshot_image_id": "00000000-0000-0000-0000-000000000000"
},
{
"type": "text_edit",
"page_url": "https://example.com/checkout",
"selector": "#headline",
"original_text": "Old headline",
"suggested_text": "New headline",
"comment": "Use clearer checkout copy"
}
]
}
}
}ticket_reference is NOCK's human-readable ticket reference (NK-XXXX), derived deterministically from the ticket ID. It is sent on ticket events but omitted from webhook.test deliveries (which carry no ticket), so treat it as optional in your consumer. NOCK does not send the Linear issue identifier in webhook payloads, even for Linear-synced tickets — correlate on ticket_id instead.
Widget-created tickets can include data.ticket.annotations. Pin annotations include page, viewport, selector or nearby text, coordinates, and may include screenshot_image_id. Webhook payloads intentionally omit attachment bytes and screenshot_url; retrieve current attachment URLs through the authenticated Ticket API. Text-edit annotations include selector context, original_text, suggested_text, and optional comments.
For ticket.note.created, data also includes a note object. Internal notes are not emitted as ticket.note.created; only customer-visible replies are sent to external webhook consumers.
Headers
NOCK sends:
| Header | Description |
|---|---|
x-nock-delivery | Unique delivery attempt ID. |
x-nock-event | Event type. |
x-nock-signature | HMAC signature over timestamp and raw body. |
x-nock-timestamp | Unix timestamp in seconds. |
user-agent | NOCK-Webhooks/1.0. |
Always verify the signature before performing side effects.