Skip to content
On this page

Getting started

Pagination and formats

Cursor pagination for lists, the JSON request and response format, timestamps and how v1 changes.

Cursor pagination

Lists use cursor pagination: pass per_page (1-100, default 25) and follow meta.next_cursor as ?cursor=... (or the links.next URL) until it is null.

GET /tags?per_page=25200 OK
{
    "data": [
        {
            "object": "tag",
            "id": "01j9x0a1b2c3d4e5f6g7h8j9k0",
            "name": "Billing",
            "slug": "billing",
            "color": "#6366f1",
            "created_at": "2026-01-15T10:24:07Z"
        }
    ],
    "links": {
        "first": null,
        "last": null,
        "prev": null,
        "next": "https://zono.support/api/v1/tags?cursor=eyJpZCI6IjAxajl4MnAzcTQiLCJfcG9pbnRzVG9OZXh0SXRlbXMiOnRydWV9"
    },
    "meta": {
        "path": "https://zono.support/api/v1/tags",
        "per_page": 25,
        "next_cursor": "eyJpZCI6IjAxajl4MnAzcTQiLCJfcG9pbnRzVG9OZXh0SXRlbXMiOnRydWV9",
        "prev_cursor": null
    }
}

Request and response format

Requests and responses are JSON. Timestamps are ISO-8601 in UTC. Single objects are returned as the object itself; lists as {"data": [...], "links": {...}, "meta": {...}}. Fields are only ever added to v1, never renamed or removed.

Send Accept: application/json, and Content-Type: application/json with a body.

Versioning

The version is in the path: https://zono.support/api/v1. Fields are only ever added to v1, never renamed or removed, so ignore fields you do not know. Webhook payloads carry api_version (v1).