Skip to content

Baselines

A baseline is a frozen snapshot of your project’s schedule at a point in time. Capture one when you commit a plan to stakeholders, then compare it against the live schedule to see exactly how far — and which tasks — have drifted.

Capturing a baseline records, for every task in the project at that moment:

  • the task name (kept even if the task is later deleted),
  • planned start and finish dates,
  • duration, and any actual start/finish already recorded.

Snapshots are immutable — once written, a baseline’s task rows never change, so a baseline remains a faithful record of what the plan looked like when you took it. A baseline notes whether its tasks had computed CPM dates at capture time, so a comparison can flag a snapshot that was taken before the schedule was fully calculated.

A project can hold many baselines — for example one per phase gate — but one is active at a time. The active baseline is the one used for comparison. Activating a different baseline automatically deactivates the previous one.

Capturing and managing baselines via the API

Section titled “Capturing and managing baselines via the API”

All endpoints are project-scoped and authenticated with a bearer token ($JWT); $PROJECT_ID is the project UUID.

Terminal window
# 1. Capture a baseline (name optional — auto-named "Baseline N" if omitted).
# Requires the Project Manager role. Snapshots every task atomically.
curl -X POST -H "Authorization: Bearer $JWT" -H "Content-Type: application/json" \
-d '{"name": "Phase 1 commit"}' \
https://trueppm.example.com/api/v1/projects/$PROJECT_ID/baselines/
# 2. List baselines for the project.
curl -H "Authorization: Bearer $JWT" \
https://trueppm.example.com/api/v1/projects/$PROJECT_ID/baselines/
# 3. Activate a baseline (deactivates any other). Requires the Project Manager role.
curl -X POST -H "Authorization: Bearer $JWT" \
https://trueppm.example.com/api/v1/projects/$PROJECT_ID/baselines/$BASELINE_ID/activate/
# 4. Delete a baseline. Requires the Project Admin (owner) role.
curl -X DELETE -H "Authorization: Bearer $JWT" \
https://trueppm.example.com/api/v1/projects/$PROJECT_ID/baselines/$BASELINE_ID/
Method & pathPurposePermission
GET /api/v1/projects/{id}/baselines/List baselinesProject member
POST /api/v1/projects/{id}/baselines/Capture a baseline (auto-named if blank)Project Manager (ADMIN)
GET /api/v1/projects/{id}/baselines/{baselineId}/Retrieve (with task count)Project member
POST /api/v1/projects/{id}/baselines/{baselineId}/activate/Make active, deactivate othersProject Manager (ADMIN)
DELETE /api/v1/projects/{id}/baselines/{baselineId}/Delete a baselineProject Admin (OWNER)

Once a baseline is active, opening a task in the Schedule view shows a Baseline section in the task detail drawer with the planned-vs-current comparison for that task:

Planned (baseline)Current (live)Delta
Start / finish at captureStart / finish from the latest CPM runVariance in days (e.g. +3 days)

The same per-task comparison is available directly from the API:

Terminal window
# Active baseline vs current schedule for a single task.
curl -H "Authorization: Bearer $JWT" \
https://trueppm.example.com/api/v1/projects/$PROJECT_ID/tasks/$TASK_ID/baseline/

The response is discriminated by has_baseline / in_baseline: it reports no baseline, a task added after the baseline was taken, or a full comparison row with start_delta_days / finish_delta_days (positive = slipping later than planned).