---
title: "List Commission Rules"
method: GET
path: "/api/v1/commission-rules"
tags: ["commission-rules"]
---

# List Commission Rules

`GET /api/v1/commission-rules`

The tenant's rules, most specific first then oldest window first.

Reading is VIEW_REPORTS, not MANAGE_SETTINGS: an analyst has to be able
to see why a booking priced the way it did without being able to change
it.

## Response `200`

Successful Response

- CommissionRuleRead[]
  - `id` string, uuid, required
  - `property_code` string, nullable, required
  - `channel` 'voice_agent' | 'text_agent' | 'hotel_agent' | 'ota' | 'website' | 'direct_pms' | 'unknown', required — Where a canonical booking originated (normalized channel attribution). NULL on ``BookingRecord`` means "not yet derived" (legacy rows before the PR 3 backfill); UNKNOWN means "derived but undeterminable" — the two are deliberately distinct (Direct Bookings ontology §6).
  - `provider` string, nullable, required
  - `cost_type` string, required
  - `contract_basis` 'commissionable' | 'net_rate' | 'metasearch' | 'own_cost', required — What kind of commercial arrangement a ``CommissionRule`` records (PR 19). A rate is not a contract. "18% of gross" and "we are paid a contracted net amount" are different economics, and applying the first shape to the second produces a confident €0.00 rather than a missing number — the most expensive channel in the portfolio rendered as free. - ``COMMISSIONABLE`` — the hotel sets the rate and the provider invoices a percentage (or a flat fee). The PR 12 behaviour, and the default so every pre-PR-19 row keeps exactly the meaning it had. - ``NET_RATE`` — the hotel is paid a contracted net amount; the provider's margin is not a cost the hotel pays. No commission is computed, and the reported value (when present) already IS the net. - ``METASEARCH`` — billed per click or per campaign, never per booking. The rule records the arrangement so the source does not read as free; CPC spend has no per-booking home and this PR does not invent one. - ``OWN_COST`` — the hotel's own per-booking costs on direct business (payment gateway, booking engine). Computes exactly like ``COMMISSIONABLE``; kept separate so "distribution cost" and "cost of taking a direct booking" never render as the same line. ``NET_RATE`` and ``METASEARCH`` carry NO charge (a CHECK enforces it): a percentage on a net-rate rule is a configuration error that would otherwise price silently.
  - `rate` string, nullable, required
  - `fixed_amount` string, nullable, required
  - `fixed_currency` string, nullable, required
  - `effective_from` string, date, required
  - `effective_to` string, date, nullable, required
  - `contract_version` string, required
  - `tenant_id` string, uuid, required

---

[API](https://skmtc.dev/getanana/apis/cleon-api.md) · [All operations](https://skmtc.dev/getanana/apis/cleon-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/getanana/cleon-api/revisions/c0f54348e251/schema)
