---
title: "Add an action to a year's memo"
method: POST
path: "/net-zero/action-memos/{year}/actions"
---

# Add an action to a year's memo

`POST /net-zero/action-memos/{year}/actions`

One of three shapes. A catalogue entry (catalogueKey, optional reductionPct within the entry's range, baseId when the entry applies to several bases). A base with the user's or Tally's own percentage (title, baseId, reductionPct, rationale). A typed estimate (title, scope, estimateKgCo2e, rationale). Core works out the estimate; a percentage outside a catalogue entry's range needs a rationale and makes the estimate a tally one. 404 ACTION_MEMO_NOT_FOUND; 400 VALIDATION_ERROR (the message says why). Requires org.edit_dashboard.

## Path parameters

- `year` integer, required

## Request body

- NetZeroActionCreate — Three shapes (see addNetZeroAction): catalogueKey with optional reductionPct and baseId; title, baseId, reductionPct and rationale; or title, scope, estimateKgCo2e and rationale. Every other field is optional in all of them.
  - `baseId` string — A NetZeroActionBase.id from the catalogue's bases.
  - `catalogueKey` string
  - `description` string — Defaults to the catalogue entry's description.
  - `dueQuarter` integer
  - `estimateKgCo2e` number, double
  - `owner` string
  - `progressNote` string
  - `rationale` string
  - `reductionPct` number, double
  - `scope` integer — Needed for a typed estimate; otherwise it must match the base.
  - `scope3Category` integer
  - `siteId` string — A site external id inside the workspace (400 otherwise). A site the user places the action at (a typed estimate, or a label on an organization-wide base) must be active; a base's own site may be archived.
  - `status` 'planned' | 'in_progress' | 'done' | 'dropped'
  - `title` string — Defaults to the catalogue entry's title.

## Response `201`

The new action

- NetZeroActionResponse
  - `data` NetZeroAction, required
    - `baseChanged` boolean, required — The current base differs from the snapshot by more than 1% or 0.1 tCO2e, or the memo's base year has moved since.
    - `baseId` string — The base the estimate was worked out on (NetZeroActionBase.id); left out for a typed estimate.
    - `baseKgCo2e` number, double — The base's figure when the estimate was worked out (the snapshot).
    - `baseKind` 'resource' | 'scope3_category' | 'refrigerant' | 'scope'
    - `baseRef` NetZeroActionBaseRef — Narrows a base kind to one slice; fields that do not apply to the kind are left out.
      - `category` integer — Scope 3 category.
      - `resource` string
      - `scope` integer
      - `siteId` string — Site external id.
      - `usage` string
    - `baseYear` integer — The year of the snapshot.
    - `carriedFromActionId` string, uuid
    - `carriedFromYear` integer
    - `catalogueKey` string
    - `catalogueVersion` integer
    - `createdAt` string, date-time, required
    - `currentBaseKgCo2e` number, double — The base's figure on the memo's base year today (0 when the base no longer exists); left out for a typed estimate.
    - `description` string, required
    - `dueQuarter` integer — Left out when none.
    - `estimateKgCo2e` number, double, required
    - `estimateKind` 'catalogue' | 'tally' | 'typed', required
    - `id` string, uuid, required
    - `owner` string, required — Free text; empty when none.
    - `position` integer, required
    - `progressNote` string, required
    - `rationale` string, required
    - `reductionPct` number, double — Above 0 and at most 100; left out for a typed estimate.
    - `scope` integer, required
    - `scope3Category` integer
    - `siteId` string — The action's site external id, when it has one.
    - `siteName` string — The action's site, when it has one.
    - `source` 'catalogue' | 'tally' | 'manual', required
    - `status` 'planned' | 'in_progress' | 'done' | 'dropped', required
    - `title` string, required
    - `updatedAt` string, date-time, required

## Other responses

- `400` — Bad Request
- `401` — Unauthorized
- `403` — Forbidden
- `404` — Not Found
- `409` — Conflict

## Changes

- **2026-10-04** `77d466d0e73d` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/greentally/apis/esgai-api/changes/net-zero/action-memos/:year/actions/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/77d466d0e73d?raw)
