---
title: "POST /uploads/{id}/factor-agent/groups/{groupKey}/exclude"
method: POST
path: "/uploads/{id}/factor-agent/groups/{groupKey}/exclude"
tags: ["Uploads"]
---

# POST /uploads/{id}/factor-agent/groups/{groupKey}/exclude

`POST /uploads/{id}/factor-agent/groups/{groupKey}/exclude`

Take a review group's account (every ledger:<account>|… group of it) outside the Scope 3 boundary, with a reason. The decision joins the upload's boundary policy and the organization's memory (source reviewer), and a regroup job moves the account's rows under boundary:account|<account>: they keep their money, lose their emission rows, and are never submitted. The group key is percent-encoded as one path segment.

## Path parameters

- `id` integer, required
- `groupKey` string, required

## Request body

- DirectUploadFactorGroupExcludeRequest
  - `reason` 'transfer_or_subvention' | 'financial_charges' | 'payroll_or_pension' | 'student_or_member_support' | 'fees_and_registration' | 'water' | 'waste_billed_separately' | 'tax_or_levy' | 'internal_or_balancing' | 'insurance_or_protection' | 'other', required

## Response `202`

The regroup job, queued. Poll GET .../factor-agent/jobs/{documentJobId} (kind regroup) until it ends; while it runs the analysis reads processing and names it (jobId). Its progress phases, in order: regroup_classify "Deciding the new keys", regroup_apply "Moving the rows", regroup_match "Matching emission factors", regroup_duplicates "Checking duplicate spend lines", regroup_finish "Finishing the review" (done and total count the rows the regroup moves). A regroup cannot be cancelled.

- DocumentJobAcceptedResponse
  - `data` object, required
    - `jobId` string, required
    - `kind` 'analyze' | 'submit' | 'regroup', required
    - `status` 'queued' | 'running', required

## Other responses

- `400` — BOUNDARY_GROUP: the group is a boundary group (include it instead); VALIDATION_ERROR: a reason that is not an exclusion reason (details.field reason), or a malformed body.
- `401` — Unauthorized
- `403` — Forbidden
- `404` — NOT_FOUND: no such upload in the request's workspace, no such group, or nothing left to move (the decision is already applied).
- `409` — ROW_SUBMITTED: a row of the account has been submitted. LEDGER_POLICY_NOT_ENABLED (the boundary policy is off on this server), LEDGER_POLICY_NOT_APPLIED (the analysis was read without the policy; run Re Analysis), DOCUMENT_JOB_RUNNING (any live job of the upload, an analysis awaiting its answers included; details.jobId and details.kind), UPLOAD_SUBMITTED, or ANALYSIS_NOT_REVIEWABLE (the analysis is not completed or needs_input).

## Changes

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

[Change history](https://skmtc.dev/greentally/apis/esgai-api/changes/uploads/:id/factor-agent/groups/:groupKey/exclude/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)
