# Get recommendations breakdown with pagination

> Returns paginated list of all recommendations with actions

Source: https://docs.levelfour.ai/api-reference/recommendations/get-recommendations


## GET /api/v1/recommendations

Returns paginated list of all recommendations with actions

### Authentication

Send `Authorization: Bearer <token>`.

### Parameters

- `page` (query, integer, default `1`): Page number (1-indexed)
- `page_size` (query, integer, default `20`): Items per page (max 200)
- `sort_by` (query, string, default `monthly_savings`): Field to sort by (recommendation_id, service, environment, monthly_savings, annual_savings, savings_percentage, analysis_period, created_at)
- `sort_order` (query, one of `asc`, `desc`, default `desc`): Sort order

### Responses

#### 200: Successful Response

- `success` (boolean, default `true`)
- `timestamp` (date-time string)
- `data` (object, required): Recommendations breakdown data with pagination
  - `items` (array of object, required)
    - `recommendation_id` (string, required): Unique business identifier for the recommendation
    - `service` (string, required)
    - `environment` (string, nullable)
    - `analysis_period` (string, nullable)
    - `monthly_savings` (number, required)
    - `annual_savings` (number, required)
    - `current_spending` (number, required)
    - `savings_percentage` (number, required)
    - `status` (string, nullable): Display status. 'unavailable' means the recommendation is outside the tenant's evaluation allowlist, so its implementation detail is withheld
    - `display_status` (one of `available`, `awaiting_approval`, `pending`, `saved`, `rejected`, `unavailable`, default `available`): Status the person reads, served once so the dashboard, the CLI and MCP all print the same word. Derived from status, saving_acceptance and execution_request_status; a request waiting on an approver outranks everything else. Prefer this over status for display
    - `actions` (object, nullable)
      - `description` (string, nullable): Brief summary of the recommendation
      - `overview` (string, nullable): Detailed overview explaining the recommendation (supports markdown)
      - `implementation_process` (string, nullable): How to implement this recommendation (supports markdown)
      - `execution_method` (string, nullable): Technical execution details (supports markdown)
      - `key_takeaway` (string, nullable): Important notes, risks, and safety information (supports markdown)
      - `operational_impact` (string, nullable): Impact on operations and any downtime requirements (supports markdown)
    - `risk_assessment` (object, nullable): Risk level denormalized from actions so the list/table Risk column renders (level only; full factors live on the detail endpoint)
  - `pagination` (object, required): Pagination metadata
    - `total_items` (integer, required): Total number of items across all pages
    - `total_pages` (integer, required): Total number of pages
    - `current_page` (integer, required): Current page number (1-indexed)
    - `page_size` (integer, required): Number of items per page
    - `has_next` (boolean, required): Whether there is a next page
    - `has_previous` (boolean, required): Whether there is a previous page

#### Errors

- `400`: Bad Request
- `401`: Authentication Error
- `403`: Authorization Error
- `404`: Not Found
- `409`: Conflict
- `422`: Validation Error
- `429`: Rate Limit Exceeded
- `500`: Internal Server Error

Body of `400`, `401`, `403`, `404`, `409`, `422`, `429`, `500`:

- `success` (`false`, required)
- `error` (object, required)
  - `code` (string, required)
  - `message` (string, required)
  - `details` (any)
- `timestamp` (date-time string, required)
