---
title: "Compare a baseline with the current plan"
method: GET
path: "/baselines/{id}/variance"
tags: ["scheduling"]
---

# Compare a baseline with the current plan

`GET /baselines/{id}/variance`

## Request

- Base URL: `https://api.onplana.com/api`
- URL: `https://api.onplana.com/api/baselines/{id}/variance`
- Auth: one of:
  - HTTP bearer
  - API key in header `Authorization`

Read-only. The computed variance of the project against this baseline: project finish slip in calendar days, an on_track / at_risk / behind rating, counts, and a row per top-level task with its start, finish, planned-duration and started-late variance. `summary` puts the comparison in plain English, built without AI so it costs nothing and reads the same every time: `paragraphs` (the finish and the chain of tasks driving it, scope, planned cost, tasks added and removed), `moves` (the five largest start or finish moves, each with its own sentence), `chain`, `scope` and `cost`. Cost appears only for a caller who may read the project's cost; for anyone else `cost` is null and `costHidden` is true. The sentences are English. Needs project read; a project the caller cannot read answers 404.

## Path parameters

- `id` string, required

## Headers

- `X-Organization-Id` string, required

## Response `200`

Baseline variance with its summary

- object
  - `baselineId` string
  - `baselineName` string
  - `takenAt` string, date-time
  - `baselineFinish` string, nullable: YYYY-MM-DD
  - `currentFinish` string, nullable: YYYY-MM-DD
  - `projectFinishVarianceDays` integer, nullable: Calendar days, positive when the finish is later
  - `rag` 'on_track' | 'at_risk' | 'behind'
  - `counts` object
    - `delayed` integer
    - `onTime` integer
    - `ahead` integer
    - `added` integer
    - `removed` integer
  - `tasks` object[]
  - `summary` object
    - `paragraphs` string[], required
    - `moves` object[], required
      - `taskId` string
      - `title` string
      - `field` 'start' | 'finish'
      - `days` integer: Calendar days, positive when later
      - `from` string, nullable
      - `to` string, nullable
      - `text` string
    - `chain` object[], required: The tasks driving the current finish, in order, when the finish moved
      - `taskId` string
      - `title` string
      - `finishMoveDays` integer, nullable
      - `added` boolean
    - `scope` object, required
      - `baselineTaskCount` integer
      - `currentTaskCount` integer
      - `baselineDurationDays` integer, nullable
      - `currentDurationDays` integer, nullable
    - `cost` object, nullable, required
      - `baseline` number, nullable
      - `current` number, nullable
    - `costHidden` boolean

## Other responses

- `404`: Baseline not found, or its project is not readable by the caller

---

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