Distribution Channels
Channel-scoped API keys with per-channel markup and availability control
Introduction
Distribution channels let a workspace sell the same inventory through multiple sales surfaces — its own booking site, a metasearch partner, a B2B reseller — each with its own pricing markup and its own on/off switch per listing.
A channel is a workspace-level object with an uppercase, workspace-unique name (e.g. NUITEE) and a default markupPercentage. API keys can be scoped to a channel; requests authenticated with a channel-scoped key get that channel's markup applied to search and quote pricing, and only see listings enabled for that channel.
Markup & Enablement Resolution
Settings resolve through a cascade — the most specific level that defines a value wins:
Listing setting → Integration-account setting → Tenant setting → Channel default (workspace)Each level's setting has two independently inheritable fields:
| Field | Omitted means |
|---|---|
enabled | Inherit the parent level's value |
markupPercentage | Inherit the parent level's markup |
Read endpoints return the effective setting plus a markupSource (WORKSPACE, TENANT, INTEGRATION_ACCOUNT, or LISTING) telling you which level supplied the winning markup — useful for building settings UIs that show where a value comes from.
Endpoints
GET /api/v1/channels # list workspace channels
POST /api/v1/channels # create (requires master token)
GET /api/v1/tenants/{id}/channels # effective settings per channel
POST /api/v1/tenants/{id}/channels # set tenant override
GET /api/v1/integration-account/{id}/channels # effective settings per channel
POST /api/v1/integration-account/{id}/channels # set integration-account override
GET /api/v1/listing/{id}/channels # effective settings per channel
POST /api/v1/listing/{id}/channels # set listing overrideChannel creation is a platform operation guarded by the x-master-token header; the settings endpoints use normal API-key auth (with optional x-calry-tenant-id, as elsewhere).