---
title: "Return the report-level spend intelligence rollup."
method: GET
path: "/report-summary"
---

# Return the report-level spend intelligence rollup.

`GET /report-summary`

## Query parameters

- `period` 'last_30d'

## Headers

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

## Response `200`

Report summary.

- ReportSummaryResponse
  - `object` 'report_summary', required
  - `request_id` string, required
  - `as_of` string, date-time, required
  - `data` ReportSummary, required
    - `id` string, required
    - `object` 'report_summary', required
    - `period` string, required
    - `generated_at` string, date-time, required
    - `baseline_monthly_spend_usd` number
    - `savings` object, required
      - `confirmed_monthly_usd` number
      - `confirmed_annual_usd` number
      - `modeled_monthly_usd` number
      - `total_scenario_monthly_usd` number
      - `confirmed_percent_of_baseline` number, nullable
    - `opportunity_counts` object, required
      - `total` number
      - `confirmed_actions` number
      - `review_actions` number
    - `shadow` object
      - `unapproved_spend_total_usd` number
      - `review_accounts` number
    - `scorecard` Scorecard
      - `status` 'available' | 'not_available', required
      - `source` 'spend_intelligence_scorecard_v1', required
      - `grade` string, nullable, required
      - `score` number, nullable, required
      - `tone` 'excellent' | 'good' | 'mid' | 'bad' | 'base', required
      - `basis` string, required
      - `inputs` object, required
        - `baselineMonthlyUsd` number, required
        - `confirmedSavingsPct` number, nullable, required
        - `modeledSavingsPct` number, nullable, required
        - `confirmedActionShare` number, nullable, required
        - `shadowSpendPct` number, nullable, required
        - `reviewActions` number, required
        - `reviewAccounts` number, required
    - `top_recommendations` Recommendation[]
      - `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
    - `behavior` object
    - `sources` string[], 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)
