# Renewal plan for one commitment

> What to repurchase and when. units_recommended is the quantity the renewal options recommend, the same number the drawer shows: 0 with decision let_expire when the commitment was used too little to pay for itself, the quantity held when nothing measured it. units_consumed is the average the sized series measured, null when unmeasured. States the instant to buy after rather than a date, because a replacement bills from the moment it is bought, and lists the pending changes to the same instance family that must land first so their capacity is not reserved for another term. superseded_by names the commitment that already renewed this one, and no_recent_usage says nothing of its family and engine ran last week; either one means no renewal is raised.

Source: https://docs.levelfour.ai/api-reference/commitments/get-commitments-renewal-plan-by-id


## GET /api/v1/commitments/renewal-plan/{commitment_id}

What to repurchase and when. units_recommended is the quantity the renewal options recommend, the same number the drawer shows: 0 with decision let_expire when the commitment was used too little to pay for itself, the quantity held when nothing measured it. units_consumed is the average the sized series measured, null when unmeasured. States the instant to buy after rather than a date, because a replacement bills from the moment it is bought, and lists the pending changes to the same instance family that must land first so their capacity is not reserved for another term. superseded_by names the commitment that already renewed this one, and no_recent_usage says nothing of its family and engine ran last week; either one means no renewal is raised.

### Authentication

Send `Authorization: Bearer <token>`.

### Parameters

- `commitment_id` (path, string, required)

### Responses

#### 200: Successful Response

- `success` (boolean, default `true`)
- `timestamp` (date-time string)
- `data` (object, required)
  - `commitment_id` (string, required)
  - `service` (string, required)
  - `holder_account_id` (string, required)
  - `end_at` (string, nullable, required)
  - `end_at_assumed` (boolean, default `false`)
  - `buy_after_utc` (string, nullable, required)
  - `expires_in_seconds` (integer, nullable, required)
  - `renewal_window_days` (integer, required)
  - `units_held` (number, required)
  - `units_consumed` (number, nullable, required)
  - `units_recommended` (number, required)
  - `resource_recommended` (string, nullable)
  - `quantity_recommended` (number, nullable)
  - `sizing_basis` (string, default `unmeasured`)
  - `decision` (one of `renew`, `let_expire`, default `renew`)
  - `protects_monthly` (number, required)
  - `rightsizing_monthly` (number, required)
  - `pending_changes` (array of object, required)
    - `recommendation_id` (string, required)
    - `service` (string, required)
    - `account` (string, required)
    - `monthly_savings` (number, required)
    - `status` (string, required)
  - `blocking_changes` (array of object)
    - `recommendation_id` (string, required)
    - `service` (string, required)
    - `account` (string, required)
    - `monthly_savings` (number, required)
    - `status` (string, required)
  - `exchangeable` (boolean, nullable, required)
  - `cancellable` (boolean, nullable, required)
  - `superseded_by` (string, nullable)
  - `superseded_at` (string, nullable)
  - `no_recent_usage` (boolean, default `false`)

#### 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)
