---
title: "Download a ProSeries fill plan for the chosen documents and questionnaire groups"
method: POST
path: "/internal/api/tax-export/{client_id}/proseries/plan"
tags: ["Tax Export"]
---

# Download a ProSeries fill plan for the chosen documents and questionnaire groups

`POST /internal/api/tax-export/{client_id}/proseries/plan`

## 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/tax-export/{client_id}/proseries/plan`
- Auth: OAuth 2
  - Password
  - Token URL: `/auth/login`

Compile a plan limited to what the preparer chose, and stream it as a download.

☠ THE GET ABOVE IS UNTOUCHED AND STAYS THE FULL EXPORT. Every existing caller keeps working
  with no selection concept at all; this is an addition, not a migration. A POST with an
  empty body is identical to that GET.

## Path parameters

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

## Query parameters

- `tax_year` integer

## Request body

- PlanSelection: What the preparer ticked in the picker. ☠ `null` AND `[]` MEAN DIFFERENT THINGS, AND THE DIFFERENCE IS THE SAFE DEFAULT. Omitting a field (or sending `null`) means "everything on that axis" — so a client that posts only `document_ids` still gets the whole questionnaire, which is what a partially built frontend would expect. An EMPTY LIST means "none of them", which is a real choice a preparer can make on one axis; making both axes empty is refused below rather than producing an empty plan.
  - `document_ids` string[], nullable: App document ids to include. Omit or null for every document.
  - `questionnaire_groups` string[], nullable: Questionnaire group keys to include — the first segment of a question code, e.g. 'basic_info'. Omit or null for every group.
  - `acknowledge_warnings` boolean: Proceed even though the plan carries warnings a preparer should see first. Send false (the default) to be told about them; send true only after a human has read them and chosen to continue.

## Response `200`

The fill artifact as a file download (application/json).

- unknown

## 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)
