What webhook events are there?
Short answer
Section titled “Short answer”Notory currently triggers one production event: asset.created — it fires as
soon as an asset is created (GUI, API, or import). On top of that there’s the test event
ping, which you trigger yourself via “Send test”. A webhook’s event list is
technically free-form — but only subscribe to events that actually exist, otherwise the
webhook simply never gets called.
Prerequisites
Section titled “Prerequisites”Event reference
Section titled “Event reference”| Event | Trigger | Payload (data) |
|---|---|---|
asset.created | An asset was created (web interface, POST /api/v1/assets, import) | the created asset (including id, name, asset_type, status, tenant_id) |
ping | Manually via “Send test” or POST /api/v1/webhooks/{id}/test | { "message": "test delivery" } |
Anatomy of a delivery
Section titled “Anatomy of a delivery”-
Subscribe to events. In the webhook’s “Events (comma-separated)” field, enter the events you want — for production use today:
asset.created. -
Watch it trigger. Create a test asset (How do I create an asset?). Shortly after, the delivery appears in the webhook’s delivery log — including your server’s status code.
This is what the HTTP POST your endpoint receives looks like:
POST /hooks/notory HTTP/1.1Host: tickets.acme.exampleContent-Type: application/jsonX-Webhook-Event: asset.createdX-Webhook-Signature: sha256=76b2d1a9c0e4f5…
{ "event": "asset.created", "data": { "id": "a2f1c9e4-7b3d-4a11-9c2e-8f6b1d0a7e55", "tenant_id": "3d9b0c12-4e5a-4f88-b1c7-2a9e6d4f0011", "asset_type": "hardware", "name": "ThinkPad T14 – Vertrieb", "status": "active", "created_at": "2026-07-08T09:14:22Z" }}The envelope is always the same: {"event": "<name>", "data": { … }}. You’ll find the
event name in two places — in the X-Webhook-Event header and in the event field of
the body. A minimal receiver:
@app.post("/hooks/notory")def notory_hook(): verify_signature(request) # see the signature page! payload = request.get_json() if payload["event"] == "asset.created": handle_new_asset(payload["data"]) return "", 204 # 2xx within 10 sWhat happens behind the scenes?
Section titled “What happens behind the scenes?”- Filtering per webhook. When triggering, Notory determines all active webhooks of the tenant whose event list contains the event — only those are called. Unknown/mismatched entries in the list don’t cause problems, they simply never match.
- Best-effort, after the action.
asset.createdis sent in the background after the API response. So creating the asset never fails because your receiver is down — errors end up in the delivery log. - Tenant boundary. Events carry the data of one tenant and only reach webhooks of that same tenant — tenant isolation applies here too.
- Every delivery is signed. Even
ping. Always verify the HMAC signature before processing the content.
Related topics
Section titled “Related topics”- Create a webhook
- Verify the signature
- Create an asset — the trigger for
asset.created