# Get Savings Audit breakdown by provider

> Returns saved recommendations for a provider as paginated JSON (format=table) or a CSV download of the full filtered set (format=csv)

Source: https://docs.levelfour.ai/api-reference/providers/get-providers-by-id-recommendations-audit-breakdown


## GET /api/v1/providers/{provider_id}/recommendations/audit/breakdown

Returns saved recommendations for a provider as paginated JSON (format=table) or a CSV download of the full filtered set (format=csv)

### Authentication

Send `Authorization: Bearer <token>`.

### Parameters

- `provider_id` (path, string, required)
- `format` (query, string, default `table`): Response format: table (paginated JSON) or csv (full filtered set as a CSV download)
- `start` (query, string, nullable): Start date filter (ISO 8601 format: YYYY-MM-DD or YYYY-MM)
- `end` (query, string, nullable): End date filter (ISO 8601 format: YYYY-MM-DD or YYYY-MM)
- `page` (query, integer, default `1`): Page number (1-indexed)
- `page_size` (query, integer, default `10`): Items per page (max 200)
- `sort_by` (query, string, default `period`): Field to sort by (period, account_id, environment, service, usage_type, usage_quantity, usage_unit, pre_optimization_cost, monthly_savings, requested_by, approved_by)
- `sort_order` (query, one of `asc`, `desc`, default `desc`): Sort order
- `preset` (query, string, nullable): Date preset: '30D', '6M', or '12M' (takes precedence over start/end)
- `service` (query, array of string, nullable): Filter by service(s) - can be repeated for multiple values
- `environment` (query, array of string, nullable): Filter by environment(s) - can be repeated for multiple values
- `account_id` (query, array of string, nullable): Filter by account ID(s) - can be repeated for multiple values

### Responses

#### 200: Successful Response

- `success` (boolean, default `true`)
- `timestamp` (date-time string)
- `data` (object, required): Saved by provider breakdown data with pagination
  - `total_savings` (number, required): Sum of monthly_savings for this provider (filtered)
  - `items` (array of object, required)
    - `audit_id` (integer, required): Realized savings audit row id
    - `recommendation_id` (string, required): Recommendation id
    - `savings_id` (string, required): User-facing savings identifier (alias of recommendation_id)
    - `period` (string, required): Period in YYYY-MM format
    - `implemented_at` (string, nullable): ISO 8601 timestamp of the cloud event that realized the savings
    - `account_id` (string, nullable): Cloud account ID
    - `environment` (string, nullable): Environment. Holds the account alias rather than a fixed vocabulary, e.g. payments-prod, aws.data.staging, production-web, Shared-Services.
    - `provider` (string, required): Provider identifier: aws, gcp, azure, k8s
    - `service` (string, required): Resource/service name - maps to Resource column in UI
    - `usage_type` (string, nullable): Usage type description; null when no Cost Explorer line item is available
    - `usage_quantity` (number, nullable): Usage quantity; null when no Cost Explorer line item is available
    - `usage_unit` (string, nullable): Usage unit; null when no Cost Explorer line item is available
    - `cost` (number, required): Pre-optimization cost (derived in v1)
    - `savings` (number, required): Realized savings (alias of realized_savings_usd)
    - `author` (string, nullable): Legacy alias of approved_by (saving_accepted_by, falls back to actor_principal); kept for older clients
    - `requested_by` (string, nullable): Member who requested the execution (execution_request_by); null when there was no explicit requester
    - `approved_by` (string, nullable): Dashboard user who approved the savings (saving_accepted_by); falls back to actor_principal
    - `applied_via` (string, required): How the apply was attributed (sourced from implementation_method)
    - `implementation_method` (string, nullable): How the rec was implemented: one-click / one-click-plus-iac / iac / manual
    - `first_view_at` (string, nullable): Earliest view of this rec on any channel (manual path)
    - `first_view_channel` (string, nullable): Channel of the earliest view: dashboard / cli / sdk-go / sdk-node / sdk-python / api
    - `view_count_at_audit` (integer, nullable): Total view count snapshot at audit reconcile time
    - `verification` (string, default `pending`): Verification state: pending / auto-by-worker / auto-by-worker-and-iac / auto-by-iac / auto-wizard-manual / manual-verified / manual-unverified
    - `estimated_savings_usd` (number, nullable): Estimated savings at apply time
    - `realized_savings_usd` (number, nullable): Settled realized savings for this line; null while the billing period is open or before settlement
    - `realized_savings_in_progress_usd` (number, nullable): Running CE-visible realized savings during an open billing period; finalized into realized_savings_usd ≥5 days after period end
    - `settled_at` (string, nullable): Timestamp at which realized_savings_usd was finalized for this period
    - `realized_savings_7d_usd` (number, nullable): Reconciliation snapshot 7 days post-apply (CE-driven)
    - `realized_savings_30d_usd` (number, nullable): Reconciliation snapshot 30 days post-apply (CE-driven, billable)
    - `snapshot_7d_at` (string, nullable): Timestamp the 7-day snapshot was taken
    - `snapshot_30d_at` (string, nullable): Timestamp the 30-day snapshot was taken
    - `realized_basis` (string, required): Source for realized savings calculation
  - `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)
