---
title: "Reevaluate Workpaper (re-run, async)"
method: POST
path: "/internal/api/clients/{client_id}/workpaper/reevaluate"
tags: ["CLIENT", "Workpaper"]
---

# Reevaluate Workpaper (re-run, async)

`POST /internal/api/clients/{client_id}/workpaper/reevaluate`

## Request

- Base URL: `https://api.signalshq.io` (the document declares no server; this is the origin it was published from)
- URL: `https://api.signalshq.io/internal/api/clients/{client_id}/workpaper/reevaluate`
- Auth: OAuth 2
  - Password
  - Token URL: `/auth/login`

Re-run evaluation on an existing draft. Pass tax_return_id from GET workpaper (or omit to look up by tax_year; 400 if none). Returns 202 + tax_return_id; poll GET workpaper/status for status.

## Path parameters

- `client_id` string, uuid, required: Client ID

## Request body

- WorkpaperReevaluateBody: Request body for POST workpaper/reevaluate (re-run). tax_return_id from GET workpaper.
  - `tax_year` integer, required: Tax year for workpaper evaluation
  - `tax_return_id` string, uuid, nullable: Tax return ID from GET workpaper. Omit to look up by tax_year (400 if none).
  - `triggered_by_user_id` string, uuid, nullable: User who triggered; defaults to current user when omitted.

## Response `202`

Successful Response

- WorkpaperAcceptedResponse: 202 Accepted response body: tax_return_id for polling and subsequent reevaluate.
  - `tax_return_id` string, uuid, required: Tax return UUID; use in GET workpaper and future reevaluate requests.
  - `status` 'PENDING' | 'RUNNING' | 'COMPLETED' | 'FAILED': Job lifecycle. DB: workpaper_regeneration_job_status_enum. API adds IDLE in core.

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/signalshq/apis/signals-api.md) - [All operations](https://skmtc.dev/signalshq/apis/signals-api/llms.txt) - [OpenAPI document](https://skmtc.dev/signalshq/apis/signals-api/revisions/2c22af3b5576?raw)
