Skip to content
On this page

REST API reference

Webhook subscriptions

REST Hooks for no-code tools (Zapier, n8n, Make): subscribe a URL to events when a trigger is switched on and unsubscribe when it is switched off. Deliveries are signed and retried like any webhook. Owner and admin tokens only (other roles get 403); subscriptions belong to the token (an API key, or the OAuth app's connection), so revoking the key or disconnecting the app removes them. Endpoints added under Settings > Webhooks are not listed here and cannot be changed through the API.

List webhook subscriptions

GET/api/v1/hooks

The team's API subscriptions, newest first. Secrets are never returned.

Scope
webhooks:manage
Unscoped key
Read-only or read-write

Query parameters

per_pageinteger
1-100, default 25.
cursorstring
meta.next_cursor from the previous page.
Request
curl https://zono.support/api/v1/hooks \
  -H "Authorization: Bearer $ZONO_TOKEN" \
  -H "Accept: application/json"
Response200 OK
{
    "data": [
        {
            "object": "webhook_subscription",
            "id": "01j9x0a1b2c3d4e5f6g7h8j9k0",
            "target_url": "https://zono.support/",
            "events": [
                "ticket.created"
            ],
            "description": "description",
            "integration": "zapier",
            "status": "active",
            "is_active": true,
            "secret": "secret",
            "created_at": "2026-01-15T10:24:07Z",
            "updated_at": "2026-01-15T10:24:07Z"
        }
    ],
    "links": {
        "first": null,
        "last": null,
        "prev": null,
        "next": "https://zono.support/api/v1/hooks?cursor=eyJpZCI6IjAxajl4MnAzcTQiLCJfcG9pbnRzVG9OZXh0SXRlbXMiOnRydWV9"
    },
    "meta": {
        "path": "https://zono.support/api/v1/hooks",
        "per_page": 25,
        "next_cursor": "eyJpZCI6IjAxajl4MnAzcTQiLCJfcG9pbnRzVG9OZXh0SXRlbXMiOnRydWV9",
        "prev_cursor": null
    }
}

Get a webhook subscription

GET/api/v1/hooks/{hook}

One API subscription.

Scope
webhooks:manage
Unscoped key
Read-only or read-write

Path parameters

hookstringRequired
Subscription id.
Request
curl https://zono.support/api/v1/hooks/01j9x5h6o7o8k9s0a1b2c3d4e5 \
  -H "Authorization: Bearer $ZONO_TOKEN" \
  -H "Accept: application/json"
Response200 OK
{
    "object": "webhook_subscription",
    "id": "01j9x0a1b2c3d4e5f6g7h8j9k0",
    "target_url": "https://zono.support/",
    "events": [
        "ticket.created"
    ],
    "description": "description",
    "integration": "zapier",
    "status": "active",
    "is_active": true,
    "secret": "secret",
    "created_at": "2026-01-15T10:24:07Z",
    "updated_at": "2026-01-15T10:24:07Z"
}

Subscribe to webhook events

POST/api/v1/hooks

Subscribe a URL to one or more events. The response carries the signing secret, once.

Scope
webhooks:manage
Unscoped key
Read-write

Body parameters

target_urlstringRequired
Public https URL to POST events to (url is accepted too).
eventstring
One event, e.g. ticket.created. Required unless events is given.
eventsarray
Several events, or ["*"] for all.
descriptionstring
Shown in Settings > Webhooks, e.g. the Zap name.
integrationstring
zapier, n8n, make or other (shown as a badge in Settings).
Request
curl -X POST https://zono.support/api/v1/hooks \
  -H "Authorization: Bearer $ZONO_TOKEN" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{"target_url":"https://hooks.zapier.com/hooks/standard/123/abc","event":"ticket.created","integration":"zapier"}'
Response201 Created
{
    "object": "webhook_subscription",
    "id": "01j9x0a1b2c3d4e5f6g7h8j9k0",
    "target_url": "https://zono.support/",
    "events": [
        "ticket.created"
    ],
    "description": "description",
    "integration": "zapier",
    "status": "active",
    "is_active": true,
    "secret": "secret",
    "created_at": "2026-01-15T10:24:07Z",
    "updated_at": "2026-01-15T10:24:07Z"
}

Unsubscribe

DELETE/api/v1/hooks/{hook}

Unsubscribe. Answers 204, or 404 if the subscription is gone.

Scope
webhooks:manage
Unscoped key
Read-write

Path parameters

hookstringRequired
Subscription id.
Request
curl -X DELETE https://zono.support/api/v1/hooks/01j9x5h6o7o8k9s0a1b2c3d4e5 \
  -H "Authorization: Bearer $ZONO_TOKEN" \
  -H "Accept: application/json"

Answers 204 No Content with an empty body.

Get sample event payloads

GET/api/v1/hooks/samples/{event}

Up to 3 sample payloads for an event, exactly as delivered: the team's latest real events, else one built from its latest matching record (data.sample = true), else a static example.

Scope
webhooks:manage
Unscoped key
Read-only or read-write

Path parameters

eventstringRequired
A subscribable event, e.g. ticket.created.
Request
curl https://zono.support/api/v1/hooks/samples/ticket.created \
  -H "Authorization: Bearer $ZONO_TOKEN" \
  -H "Accept: application/json"
Response200 OK
{
    "data": [
        {
            "id": "evt_01j9x3m4k7d2c8b5a6f0e1g2h3",
            "type": "ticket.created",
            "api_version": "v1",
            "created_at": "2026-01-15T10:24:07Z",
            "team": {
                "id": "01j9x0a1b2c3d4e5f6g7h8j9k0"
            },
            "data": {
                "object": {
                    "object": "ticket",
                    "id": "01j9x2p3q4r5s6t7u8v9w0x1y2",
                    "number": 1042,
                    "subject": "Cannot activate my license",
                    "description": "<p>My key says it is already in use.</p>",
                    "status": "answered",
                    "priority": "high",
                    "close_reason": null,
                    "close_reason_detail": null,
                    "customer": {
                        "id": "01j9x1c2d3e4f5g6h7j8k9m0n1",
                        "name": "Ada Lovelace",
                        "email": "[email protected]"
                    },
                    "assignee": {
                        "id": "01j9x0u1v2w3x4y5z6a7b8c9d0",
                        "name": "Sam Agent",
                        "email": "[email protected]"
                    },
                    "department": {
                        "id": "01j9x0d1e2p3t4a5b6c7d8e9f0",
                        "name": "Billing"
                    },
                    "product": {
                        "id": 12,
                        "name": "Zono Desktop"
                    },
                    "channel": null,
                    "tags": [
                        {
                            "id": "01j9x0t1a2g3b4c5d6e7f8g9h0",
                            "name": "licensing",
                            "color": "#6366f1"
                        }
                    ],
                    "custom_fields": {
                        "order_number": "A-1042"
                    },
                    "sla": null,
                    "triage": null,
                    "conversation_id": null,
                    "spam": null,
                    "merged_into": null,
                    "created_at": "2026-01-15T09:58:12Z",
                    "updated_at": "2026-01-15T10:24:07Z",
                    "last_reply_at": "2026-01-15T10:24:07Z",
                    "first_response_at": "2026-01-15T10:24:07Z",
                    "closed_at": null,
                    "url": "https://zono.support/tickets/01j9x2p3q4r5s6t7u8v9w0x1y2"
                },
                "source": "api"
            }
        }
    ]
}