Skip to main content
The anny API follows the JSON-API v1.1 specification. This guide covers the conventions you need to know when making requests.

Content Type

Write operations use the JSON-API media type:
Standard application/json is not accepted for POST and PATCH operations. For GET requests, the API also accepts:
Some read-oriented and UI-oriented endpoints return normalized application/json payloads instead of JSON-API resources. Webhook deliveries are always sent as application/json.

Resource Objects

Every API response wraps data in a JSON-API resource object:
Collection responses return "data": [...] as an array.

Common Headers

Tenant Context

Admin API requests require an organization context. Pass it as a query parameter:
The backend resolves the active organization from:
  1. The tenant claim in the JWT (if present), or
  2. The o query parameter
For explicit control, always include ?o={organization_id}.
Use the include parameter to sideload related resources in a single request, avoiding N+1 round-trips:
Nested relationships use dot notation. The response adds an included array:
Included entries are full resource objects of that type — the same attributes and stored resource meta you would get from fetching the resource as primary data. For example, community meta.members_count is the stored active_community_accounts_count on both GET /communities and ?include=communities.
Each resource type defines its own set of allowed include paths. Requesting an unsupported path returns a 400 error.

Sparse Fieldsets

Request only the attributes you need to reduce payload size:
This returns only the listed attributes for each resource type.

Filtering

Filter collections using the filter query parameter.

Simple Filters

Multiple Values

Repeat the filter key with [] to pass multiple values as an OR condition:

Date Range Filters

Range filters use nested from and to keys:

Boolean Filters

Some collections accept boolean flags. Send true to apply the restriction. false is a no-op.
filter[booked_today] keeps resources with an accepted or requested booking overlapping today. filter[active_today] keeps resources with a non-canceled timeslot overlapping today or a weekly schedule for today’s weekday. “Today” uses the active organization’s timezone. These filters are excluded from MCP tool schemas. See Admin Resources. Admin orders also accept filter[created_at_range] (same date-range shape as above, including presets such as today), filter[created_by] (creator IDs), and filter[created_by_type] (users or customers). Include created_by to sideload the staff user or customer who created the order. Creators are stamped on new admin and shop orders; a backfill covers roughly the last 90 days.
Full-text search across indexed fields:
Admin order search indexes any order whose expires_at is null, including unfinished admin drafts. Checkout carts set an expiry and stay out of the index.

Custom Field Filters

Filter by custom field values using the field’s UUID:
Each custom field filter entry requires:
Available filters vary per resource. Requesting an unsupported filter returns a 400 error.

Sorting

Sort results with the sort parameter. Prefix with - for descending:
Multiple sort fields are comma-separated:
Each resource type defines its allowed sort parameters. The default sort varies per resource.

Pagination

The API uses offset-based pagination:

Response Metadata

Paginated responses include navigation links:

Creating and Updating Resources


Error Responses

Errors follow the JSON-API error format:

Common Status Codes


Combining Parameters

All query parameters can be combined in a single request: