---
title: "Submit a client benefit election workbook"
method: POST
path: "/v1/clients/{clientId}/benefit-elections"
tags: ["Benefit Elections"]
---

# Submit a client benefit election workbook

`POST /v1/clients/{clientId}/benefit-elections`

## Request

- Base URL: `https://api.pasito.ai`
- URL: `https://api.pasito.ai/v1/clients/{clientId}/benefit-elections`
- Auth: HTTP bearer

Records the uploaded client benefit election (CBE) workbook(s) and runs AI extraction of the client's whole benefit configuration, which is applied directly to the client — there is no review step. The new plan year lands hidden from employees until someone reviews it. Poll the returned `electionId` for status.

## Path parameters

- `clientId` string, required

## Request body

- CreateBenefitElectionRequest
  - `files` FileRef[], required: The uploaded CBE workbook(s), as returned by POST /v1/files (query string optional). Use the same clientId there as here.
    - `uploadUrl` string, required: Presigned S3 PUT URL. Upload the file bytes here, then pass this uploadUrl back to the endpoint that consumes it — POST /v1/clients/{clientId}/benefit-configurations or POST /v1/clients/{clientId}/benefit-elections (the ?X-Amz-… query string may be included or stripped).
  - `planYearStart` string: Optional YYYY-MM-DD cross-check, recorded alongside the election and compared against the plan year Pasito extracts.

## Response `201`

Default Response

- object
  - `electionId` string, required: The extraction run id — poll it for status.
  - `intakeId` string, required: The election intake record the extraction writes into.

## Other responses

- `400`: Default Response
- `401`: Default Response
- `403`: Default Response
- `404`: Default Response
- `429`: Default Response

---

[API](https://skmtc.dev/pasito/apis/pasito-external-api.md) - [All operations](https://skmtc.dev/pasito/apis/pasito-external-api/llms.txt) - [OpenAPI document](https://skmtc.dev/pasito/apis/pasito-external-api/revisions/d206e98c9d61?raw)
