# Sales

> Sales per day and channel, for your own reporting.

Source: https://www.panion.travel/docs/api/reference/sales

### GET /api/v1/sales

Sales per day and channel.

Daily totals for a date range: Panion sales by booking date per operator, and every other channel from your booking system, for every operator on the key or the one in `partner_id`.

Scope: `finance:read`.

Query parameters:

- `from` (string, YYYY-MM-DD): First day (YYYY-MM-DD).
- `to` (string, YYYY-MM-DD): Last day, inclusive (YYYY-MM-DD). At most 366 days.
- `currency` (one of `EUR`, `NOK`, optional, default "NOK"): Currency for other-channel figures.
- `partner_id` (string, optional): Only this operator: one of the key's operators (see GET /api/v1/me). Any other id answers 404. Omit for every operator on the key.

Response fields (200):

- `from` (string, YYYY-MM-DD)
- `to` (string, YYYY-MM-DD)
- `panion` (object): Sales made through Panion (by booking date), in booking currency, one row per day, currency and operator.
  - `days` (array)
    - each item:
      - `date` (string, YYYY-MM-DD)
      - `revenue_minor` (integer): Integer minor units (øre, cents).
      - `bookings` (integer)
      - `currency` (string): ISO 4217 code.
      - `partner` (object): The operator a row belongs to: one of the key's operators (the tour's operator for a booking).
        - `id` (string)
        - `name` (string)
  - `totals` (array)
    - each item:
      - `currency` (string): ISO 4217 code.
      - `partner` (object): The operator a row belongs to: one of the key's operators (the tour's operator for a booking).
        - `id` (string)
        - `name` (string)
      - `revenue_minor` (integer): Integer minor units (øre, cents).
      - `bookings` (integer)
- `other_channels` (object): Every other channel from your booking system (OTAs, desk, ...), converted.
  - `currency` (string): ISO 4217 code.
  - `partners` (array): The operators these figures cover. Operators sharing one booking system account are counted once, not once per operator.
    - each item:
      - `id` (string)
      - `name` (string)
  - `available` (boolean): False when the figures could not be read.
  - `days` (array)
    - each item:
      - `date` (string, YYYY-MM-DD)
      - `revenue_minor` (integer): Integer minor units (øre, cents).
      - `bookings` (integer)
  - `channels` (array)
    - each item:
      - `label` (string)
      - `revenue_minor` (integer): Integer minor units (øre, cents).
      - `bookings` (integer)
      - `participants` (integer)
  - `totals` (object)
    - `revenue_minor` (integer): Integer minor units (øre, cents).
    - `bookings` (integer)
    - `participants` (integer)

Example: One day

```sh
curl "https://www.panion.travel/api/v1/sales?from=2026-11-01&to=2026-11-01&currency=NOK" \
  -H "Authorization: Bearer $PANION_API_KEY"
```

```json
{
  "from": "2026-11-01",
  "to": "2026-11-01",
  "panion": {
    "days": [
      {
        "date": "2026-11-01",
        "revenue_minor": 359800,
        "bookings": 1,
        "currency": "NOK",
        "partner": {
          "id": "2b7e1516-28ae-4d2a-9f15-88094f3c4f3c",
          "name": "Arctic Tours"
        }
      }
    ],
    "totals": [
      {
        "currency": "NOK",
        "revenue_minor": 359800,
        "bookings": 1,
        "partner": {
          "id": "2b7e1516-28ae-4d2a-9f15-88094f3c4f3c",
          "name": "Arctic Tours"
        }
      }
    ]
  },
  "other_channels": {
    "currency": "NOK",
    "partners": [
      {
        "id": "2b7e1516-28ae-4d2a-9f15-88094f3c4f3c",
        "name": "Arctic Tours"
      }
    ],
    "available": true,
    "days": [
      {
        "date": "2026-11-01",
        "revenue_minor": 539700,
        "bookings": 2
      }
    ],
    "channels": [
      {
        "label": "Desk",
        "revenue_minor": 539700,
        "bookings": 2,
        "participants": 3
      }
    ],
    "totals": {
      "revenue_minor": 539700,
      "bookings": 2,
      "participants": 3
    }
  }
}
```

Responses:

- 200: OK
- 400: Invalid request
- 401: Missing, invalid, expired or revoked key
- 403: The key lacks the scope
- 429: Rate limited (300 requests per minute per key)
