Webhooks
Subscriptions that deliver events to your HTTPS endpoint. Deliveries are signed and retried with exponential backoff.
The webhook object
| Field | Type | Description |
|---|---|---|
id | string | Unique identifier, prefixed with wh_. |
url required | string | HTTPS endpoint. |
events required | string[] | Subscribed event types. |
secret | string | Signing secret (shown once). |
active | boolean | Whether deliveries are sent. |
created_at | timestamp | Creation time, RFC 3339 in UTC. |
Example
{
"id": "wh_8f3k2Q9xLm",
"url": "https://hooks.example.com/axsync",
"events": [
"note.created",
"note.updated"
],
"secret": "whsec_9d2b…",
"active": true,
"created_at": "2026-09-14T08:21:07Z"
}GET /webhooks
List webhooks. Returns a paginated list of webhooks.
Query parameters
| Field | Type | Description |
|---|---|---|
limit | integer | Page size, 1–100. Default 25. |
cursor | string | Cursor from the previous page. |
sort | string | Field to sort by, prefix - for descending. |
filter | string | Filter expression, see Filtering and sorting. |
Request
curl -X GET "https://api.axnode.net/v2/webhooks" \
-H "Authorization: Bearer $AXSYNC_TOKEN"const res = await fetch('https://api.axnode.net/v2/webhooks', {
method: 'GET',
headers: { Authorization: `Bearer ${token}` }
});
const data = await res.json();import requests
res = requests.get(
'https://api.axnode.net/v2/webhooks',
headers={'Authorization': f'Bearer {token}'},
)
data = res.json()Response 200
{
"data": [
{
"id": "wh_8f3k2Q9xLm",
"url": "https://hooks.example.com/axsync",
"events": [
"note.created",
"note.updated"
],
"secret": "whsec_9d2b…",
"active": true,
"created_at": "2026-09-14T08:21:07Z"
}
],
"has_more": false,
"next_cursor": null
}POST /webhooks
Create a webhook. Creates a webhook.
Body parameters
| Field | Type | Description |
|---|---|---|
url required | string | HTTPS endpoint. |
events required | string[] | Subscribed event types. |
secret | string | Signing secret (shown once). |
active | boolean | Whether deliveries are sent. |
Request
curl -X POST "https://api.axnode.net/v2/webhooks" \
-H "Authorization: Bearer $AXSYNC_TOKEN" \
-H "Content-Type: application/json" \
-d '{"url": "https://hooks.example.com/axsync", "events": ["note.created", "note.updated"]}'const res = await fetch('https://api.axnode.net/v2/webhooks', {
method: 'POST',
headers: { Authorization: `Bearer ${token}`, 'Content-Type': 'application/json' },
body: JSON.stringify({"url": "https://hooks.example.com/axsync", "events": ["note.created", "note.updated"]})
});
const data = await res.json();import requests
res = requests.post(
'https://api.axnode.net/v2/webhooks',
headers={'Authorization': f'Bearer {token}'}, json={"url": "https://hooks.example.com/axsync", "events": ["note.created", "note.updated"]},
)
data = res.json()Response 201
{
"id": "wh_8f3k2Q9xLm",
"url": "https://hooks.example.com/axsync",
"events": [
"note.created",
"note.updated"
],
"secret": "whsec_9d2b…",
"active": true,
"created_at": "2026-09-14T08:21:07Z"
}GET /webhooks/{id}
Retrieve a webhook. Retrieves a webhook by its identifier.
Request
curl -X GET "https://api.axnode.net/v2/webhooks/wh_8f3k2Q9xLm" \
-H "Authorization: Bearer $AXSYNC_TOKEN"const res = await fetch('https://api.axnode.net/v2/webhooks/wh_8f3k2Q9xLm', {
method: 'GET',
headers: { Authorization: `Bearer ${token}` }
});
const data = await res.json();import requests
res = requests.get(
'https://api.axnode.net/v2/webhooks/wh_8f3k2Q9xLm',
headers={'Authorization': f'Bearer {token}'},
)
data = res.json()Response 200
{
"id": "wh_8f3k2Q9xLm",
"url": "https://hooks.example.com/axsync",
"events": [
"note.created",
"note.updated"
],
"secret": "whsec_9d2b…",
"active": true,
"created_at": "2026-09-14T08:21:07Z"
}PATCH /webhooks/{id}
Update a webhook. Updates fields of a webhook. Only supplied fields change.
Body parameters
| Field | Type | Description |
|---|---|---|
url required | string | HTTPS endpoint. |
events required | string[] | Subscribed event types. |
secret | string | Signing secret (shown once). |
active | boolean | Whether deliveries are sent. |
Request
curl -X PATCH "https://api.axnode.net/v2/webhooks/wh_8f3k2Q9xLm" \
-H "Authorization: Bearer $AXSYNC_TOKEN" \
-H "Content-Type: application/json" \
-d '{"url": "https://hooks.example.com/axsync", "events": ["note.created", "note.updated"]}'const res = await fetch('https://api.axnode.net/v2/webhooks/wh_8f3k2Q9xLm', {
method: 'PATCH',
headers: { Authorization: `Bearer ${token}`, 'Content-Type': 'application/json' },
body: JSON.stringify({"url": "https://hooks.example.com/axsync", "events": ["note.created", "note.updated"]})
});
const data = await res.json();import requests
res = requests.patch(
'https://api.axnode.net/v2/webhooks/wh_8f3k2Q9xLm',
headers={'Authorization': f'Bearer {token}'}, json={"url": "https://hooks.example.com/axsync", "events": ["note.created", "note.updated"]},
)
data = res.json()Response 200
{
"id": "wh_8f3k2Q9xLm",
"url": "https://hooks.example.com/axsync",
"events": [
"note.created",
"note.updated"
],
"secret": "whsec_9d2b…",
"active": true,
"created_at": "2026-09-14T08:21:07Z"
}DELETE /webhooks/{id}
Delete a webhook. Permanently deletes a webhook. This cannot be undone.
Request
curl -X DELETE "https://api.axnode.net/v2/webhooks/wh_8f3k2Q9xLm" \
-H "Authorization: Bearer $AXSYNC_TOKEN"const res = await fetch('https://api.axnode.net/v2/webhooks/wh_8f3k2Q9xLm', {
method: 'DELETE',
headers: { Authorization: `Bearer ${token}` }
});
const data = await res.json();import requests
res = requests.delete(
'https://api.axnode.net/v2/webhooks/wh_8f3k2Q9xLm',
headers={'Authorization': f'Bearer {token}'},
)
data = res.json()Response 200
{
"deleted": true,
"id": "wh_8f3k2Q9xLm"
}POST /webhooks/{id}/test
Send a test event. Delivers a sample `ping` event to the endpoint.
Body parameters
| Field | Type | Description |
|---|---|---|
url required | string | HTTPS endpoint. |
events required | string[] | Subscribed event types. |
secret | string | Signing secret (shown once). |
active | boolean | Whether deliveries are sent. |
Request
curl -X POST "https://api.axnode.net/v2/webhooks/wh_8f3k2Q9xLm/test" \
-H "Authorization: Bearer $AXSYNC_TOKEN" \
-H "Content-Type: application/json" \
-d '{"url": "https://hooks.example.com/axsync", "events": ["note.created", "note.updated"]}'const res = await fetch('https://api.axnode.net/v2/webhooks/wh_8f3k2Q9xLm/test', {
method: 'POST',
headers: { Authorization: `Bearer ${token}`, 'Content-Type': 'application/json' },
body: JSON.stringify({"url": "https://hooks.example.com/axsync", "events": ["note.created", "note.updated"]})
});
const data = await res.json();import requests
res = requests.post(
'https://api.axnode.net/v2/webhooks/wh_8f3k2Q9xLm/test',
headers={'Authorization': f'Bearer {token}'}, json={"url": "https://hooks.example.com/axsync", "events": ["note.created", "note.updated"]},
)
data = res.json()Response 200
{
"id": "wh_8f3k2Q9xLm",
"url": "https://hooks.example.com/axsync",
"events": [
"note.created",
"note.updated"
],
"secret": "whsec_9d2b…",
"active": true,
"created_at": "2026-09-14T08:21:07Z"
}GET /webhooks/{id}/deliveries
List deliveries. Recent delivery attempts with status codes and latency.
Request
curl -X GET "https://api.axnode.net/v2/webhooks/wh_8f3k2Q9xLm/deliveries" \
-H "Authorization: Bearer $AXSYNC_TOKEN"const res = await fetch('https://api.axnode.net/v2/webhooks/wh_8f3k2Q9xLm/deliveries', {
method: 'GET',
headers: { Authorization: `Bearer ${token}` }
});
const data = await res.json();import requests
res = requests.get(
'https://api.axnode.net/v2/webhooks/wh_8f3k2Q9xLm/deliveries',
headers={'Authorization': f'Bearer {token}'},
)
data = res.json()Response 200
{
"data": [
{
"id": "wh_8f3k2Q9xLm",
"url": "https://hooks.example.com/axsync",
"events": [
"note.created",
"note.updated"
],
"secret": "whsec_9d2b…",
"active": true,
"created_at": "2026-09-14T08:21:07Z"
}
],
"has_more": false,
"next_cursor": null
}