---
title: "Save a target set as the active one"
method: POST
path: "/net-zero/target-sets"
---

# Save a target set as the active one

`POST /net-zero/target-sets`

Judges the draft under its rulebook and saves it, superseding the active set. Refused with 400 VALIDATION_ERROR when any check fails; error.details.failures lists them (code = check id). Requires org.edit_dashboard.

## Request body

- NetZeroTargetSetDraft
  - `baselineId` string, uuid, required
  - `companyNetZeroYear` integer, nullable
  - `rulebook` 'sbti-cnzs-1.3.1' | 'sbti-cnzs-2.0', required — sbti-cnzs-1.3.1 is the Corporate Net-Zero Standard V1.3.1 with the Near-Term Criteria V5.3.1 (accepted until 2028-01-31). sbti-cnzs-2.0 is V2.0 (from 2027-02-01); only its structure is checked until its methods are transcribed.
  - `scope2Method` 'location' | 'market', required
  - `targets` NetZeroTargetDraft[], required
    - `ambition` '1.5c' | 'wb2c' | 'custom', required
    - `annualRate` number, double, nullable — A near-term custom target's linear rate, as a share of base-year emissions per year.
    - `boundary` 's1' | 's2' | 's1s2' | 's3', required
    - `coveragePct` number, double, required
    - `horizon` 'near_term' | 'long_term', required
    - `reductionPct` number, double, nullable — A long-term custom target's reduction from the base year (0.9 = 90%).
    - `targetYear` integer, required

## Response `201`

Saved target set

- NetZeroTargetSetResponse
  - `data` NetZeroTargetSet, required
    - `baseYear` integer, required
    - `category` 'A' | 'B', nullable — SBTi CNZS V2.0 company category; null under V1.3.1 or without a profile.
    - `checks` NetZeroTargetCheck[], required
      - `criterion` string, required
      - `id` string, required
      - `message` string, required
      - `status` 'pass' | 'fail' | 'warn' | 'not_applicable' | 'not_assessable', required
      - `target` integer, nullable — Index of the target the check is about; null for the set.
    - `mostRecentYear` integer, required
    - `rulebook` 'sbti-cnzs-1.3.1' | 'sbti-cnzs-2.0', required — sbti-cnzs-1.3.1 is the Corporate Net-Zero Standard V1.3.1 with the Near-Term Criteria V5.3.1 (accepted until 2028-01-31). sbti-cnzs-2.0 is V2.0 (from 2027-02-01); only its structure is checked until its methods are transcribed.
    - `scope3Share` number, double, nullable, required
    - `submissionYear` integer, required
    - `targets` NetZeroTargetResult[], required
      - `ambition` '1.5c' | 'wb2c' | 'custom', required
      - `annualRate` number, double, required
      - `baseKgCo2e` number, double, required
      - `boundary` 's1' | 's2' | 's1s2' | 's3', required
      - `coveragePct` number, double, required
      - `horizon` 'near_term' | 'long_term', required
      - `minimumRate` number, double, nullable — The rulebook's near-term minimum rate; null where it publishes none.
      - `path` NetZeroTargetPathPoint[], required
        - `kgCo2e` number, double, required
        - `year` integer, required
      - `reductionPct` number, double, required
      - `targetKgCo2e` number, double, required
      - `targetYear` integer, required
    - `baselineId` string, uuid, required
    - `companyNetZeroYear` integer, nullable, required
    - `createdAt` string, date-time, required
    - `createdBy` string, required
    - `id` string, uuid, required
    - `scope2Method` 'location' | 'market', required
    - `status` 'active' | 'superseded', required
    - `supersedesId` string, uuid, nullable, required

## Other responses

- `400` — Bad Request
- `401` — Unauthorized
- `403` — Forbidden

## Changes

- **2026-10-01** `b4751fd15397` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/greentally/apis/esgai-api/changes/net-zero/target-sets/post.md)

---

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