---
title: "List ranked spend recommendations and savings actions."
method: GET
path: "/recommendations"
---

# List ranked spend recommendations and savings actions.

`GET /recommendations`

## Query parameters

- `period` 'last_30d'
- `impact_kind` 'hard_savings' | 'modeled_savings' | 'mixed_savings' | 'review' | 'data_quality'
- `confidence` 'confirmed' | 'modeled' | 'needs_review'
- `lens` 'commitments' | 'licenses' | 'shadow' | 'behavior' | 'data_quality'
- `objective` 'save_money' | 'right_size' | 'reallocate' | 'reduce_shadow' | 'behavior_fit'
- `sort` '-impact' | 'impact' | '-affected_people' | 'affected_people'
- `limit` integer
- `cursor` string

## Headers

- `Oximy-Version` '2026-06-29'

## Response `200`

Recommendations list.

- object
  - `object` 'list', required
  - `request_id` string, required
  - `as_of` string, date-time, required
  - `data` Recommendation[], required
    - `id` string, required
    - `object` 'recommendation', required
    - `type` string, required
    - `lens` string
    - `objective` string
    - `title` string, required
    - `description` string
    - `tool` object, nullable
      - `id` string, nullable
      - `name` string
      - `category` string, nullable
      - `icon_url` string, nullable
    - `department` object, nullable
      - `name` string
    - `impact` object, required
      - `monthly_usd` number, required
      - `annual_usd` number, required
      - `scenario_monthly_usd` number, nullable
      - `kind` string, required
      - `breakdown` object[]
        - `label` string
        - `monthly_usd` number
        - `annual_usd` number
        - `kind` string
        - `people` number, nullable
        - `seats` number, nullable
        - `detail` string, nullable
    - `affected` object, required
      - `people` number, required
      - `seats` number, required
    - `confidence` string, required
    - `evidence` string[]
    - `recommended_action` string
    - `action_href` string
    - `subject` object
    - `sources` string[], required
  - `has_more` boolean, required
  - `next_cursor` string, nullable, required

## Other responses

- `304` — Not modified. Conditional GET responses do not consume rate-limit quota.
- `400` — Invalid parameters.
- `401` — Missing or invalid API key.
- `403` — The API key does not have the required scope.
- `404` — The requested resource was not found in the calling key's workspace scope.
- `409` — Conflict or idempotency replay conflict.
- `429` — Rate limit exceeded.
- `500` — Unexpected server error.

---

[API](https://skmtc.net/oximy/apis/oximy-public-api.md) · [All operations](https://skmtc.net/oximy/apis/oximy-public-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/oximy/oximy-public-api/revisions/36cc62fb2aaf/schema)
