---
title: "Get contract burndown"
method: GET
path: "/v1/contract-tracker/{id}/burndown"
tags: ["Contract tracker"]
---

# Get contract burndown

`GET /v1/contract-tracker/{id}/burndown`

## Request

- Base URL: `https://api.nops.io`
- URL: `https://api.nops.io/v1/contract-tracker/{id}/burndown`
- Auth: HTTP bearer
- TypeScript: <https://skmtc.dev/nops/apis/nops-public-api/docs/v1/contract-tracker/:id/burndown/get.ts> (a function with typed inputs; its response is checked against the schema)

Commitment attainment for a contract, counted before the EDP discount (unblended cost, or usage amount for usage-based contracts).

- `data`: spend per series. `granular` is keyed by segment start, the later of the month start and the contract period start, so a period starting mid-month splits that month into two keys. `isMarketplace` marks series billed by AWS Marketplace, which the Marketplace cap applies to. `forecastBounds` holds prediction intervals for forecast months.
- `forecastMonths`: month keys whose values come from the forecast model.
- `currentMonthActuals`: current month spend to date, keyed by segment, summed across series with the Marketplace cap applied.
- `periods`: per period attainment: `actualSpend` (includes the current month to date), `projectedSpend` (forecast still to come), `projectedEnd`, `projectedShortfall` (target minus projected end, floored at 0), `projectedMeetMonth`, `projectedRange`, `meetChance`, `target`, `paceTarget`, `variance`, `status`, `outcome` and `isComplete`. `projectedRange` (`low`, `high`) is where the period likely ends: the 10th to 90th percentile of simulated outcomes, sized from the forecast's past error, never below `actualSpend` and with counted Marketplace spend capped. `meetChance` (0 to 1) is the chance the period reaches its target; both are null for a finished period or without a forecast, and `meetChance` also once the target is met. `outcome` is `Met` or `Missed` for a finished period and `Not started` before it starts. An open period is `On track` (chance to meet 80% or more), `Likely to miss` (20% or less) or `At risk` (between); without a chance it is `On track` or `At risk` from `projectedEnd`, or from pace when there is no forecast. `status` compares spend with pace only and is kept for compatibility.
- `savings`: what the EDP and private pricing discounts saved, read from the contract's `EdpDiscount` and `PrivateRateDiscount` billing rows. `eligibleSpend` is the contract's spend AWS bills itself, before the discount (the EDP does not apply to AWS Marketplace, Azure or SaaS spend). `realizedEdpRate` is EDP savings as a percentage of it, `null` when billing shows no EDP discount. `projectedEdpSavings` extends each period's rate over its forecast. Totals and `periods` (keyed like `periods` above). `null` for usage-based contracts or when the savings could not be read.
- `scopeRestricted`: `true` when the caller's data scope covers only part of the contract's spend. The totals are then partial, and `status` and `outcome` should not be read as on track or behind.
- `projectedBreachDate` is kept for compatibility; prefer `periods[].projectedMeetMonth`.

## Path parameters

- `id` string, required: Contract ID

## Response `200`

Get contract burndown

- object
  - `data` object, required: JSON object

## Other responses

- `401`: Unauthorized — invalid or missing API key
- `403`: Forbidden — insufficient permissions or entitlement

---

[API](https://skmtc.dev/nops/apis/nops-public-api.md) - [All operations](https://skmtc.dev/nops/apis/nops-public-api/llms.txt) - [OpenAPI document](https://skmtc.dev/nops/apis/nops-public-api/revisions/ac549fa495dd?raw)
