> ## Documentation Index
> Fetch the complete documentation index at: https://developer.kalixo.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Changelog

> API and documentation changes by version.

## 2.1.3 - 2026-06-06

### Ping

* Added `GET /ping` — returns `{ status, timestamp }` to verify API connectivity.
  Requires `x-api-key` and a whitelisted IP address.

## 2.1.2 - 2026-06-06

### Catalog

* Replaced ambiguous `discount` on catalog products with explicit
  `discountAmount` (minor units) and `discountPercentage` (commission rate).

### Breaking API changes

| Change           | Before                     | After                                   |
| ---------------- | -------------------------- | --------------------------------------- |
| Catalog discount | `discount` (mixed meaning) | `discountAmount` + `discountPercentage` |

## 2.1.1 - 2026-06-06

### API reference

* **Retrieve order → partially\_completed** response example now explicitly includes
  `products[].codes` for all delivered units (not only `delivered` / `total`).

## 2.1.0 - 2026-06-06

### Order behaviour

* `partially_completed` responses include `products[].codes` for every delivered unit,
  alongside `delivered` and `total`.

### Catalog

* `redeemable` is derived from `countryCode` (e.g. `GB` → `United Kingdom`), not the internal region field.
* Documented optional `promotion*` fields on catalog products (see [Promotions](/concepts/promotions)).
* Documented optional `serviceFee*` fields on catalog products (see [Service fee](/concepts/service-fee)).

### Breaking API changes

These apply to all v2 catalog and order responses:

| Change           | Before                                    | After                               |
| ---------------- | ----------------------------------------- | ----------------------------------- |
| Redemption codes | `products[].pin: [{ pin: "…" }]`          | `products[].codes: [{ code: "…" }]` |
| Product tags     | `"bestseller,gaming"` (string)            | `["bestseller", "gaming"]` (array)  |
| Removed fields   | `rrp`, `rrpCurrency`, `state` on products | Omitted - use `price` and `status`  |

### New validation

* If you send a top-level `price` on `POST /orders`, it must equal the sum of
  `(line price × quantity)` or the request returns `400` with
  `Order price mismatch: expected total {n}`.

### New response headers

All v2 responses now include:

* `X-RateLimit-Limit`
* `X-RateLimit-Remaining`
* `X-RateLimit-Reset`

`429` responses still include `Retry-After`. See [Rate limits](/concepts/rate-limits).

### Documentation

* Fixed polling example to respect `estimatedReadyAt`.
* Added guidance for `partially_completed`, sandbox, webhooks (coming soon), and cancellation.
* Multi-line order pricing example.
* Reference Node client in [examples/kalixo-node](/examples/kalixo-node).

## 2.0.0 - initial release

* Async ordering with `POST /orders` + poll `GET /orders/{reference}`.
* Catalog filtering and pagination.
* Wallet endpoint and embedded wallet snapshots on orders.
* API-key authentication (`x-api-key`).
