---
title: "Get a benefit election and its status"
method: GET
path: "/v1/clients/{clientId}/benefit-elections/{id}"
tags: ["Benefit Elections"]
---

# Get a benefit election and its status

`GET /v1/clients/{clientId}/benefit-elections/{id}`

## Request

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

## Path parameters

- `clientId` string, required
- `id` string, required

## Response `200`

A benefit-election status snapshot — the same shape whether it arrived over the REST API or an SFTP drop.

- BenefitElectionSnapshot: A benefit-election status snapshot — the same shape whether it arrived over the REST API or an SFTP drop.
  - `id` string, required: The benefit-election (extraction run) id — poll it for status.
  - `status` 'requested' | 'in_progress' | 'completed' | 'failed' | 'canceled', required: `completed` means the election was extracted AND applied — a plan year now exists on the client, hidden from employees pending your audit. `failed` means Pasito accepted the workbook(s) but extraction or applying them did not produce a plan year (see `errorCode`).
  - `intakeId` string, required: The election intake record the extraction writes into.
  - `intakeKind` 'first_setup' | 'renewal' | 'new_client', required: Which kind of election this is.
  - `clientId` string, nullable, required: The Pasito company the election landed on, null until applied.
  - `clientRef` string, nullable, required: The client identifier you supplied — your own external id or the Pasito com_ id.
  - `periodId` string, nullable, required: The plan year the election created, null until applied.
  - `deliveredVia` 'api' | 'sftp', required: Whether the election arrived over the REST API or an SFTP drop.
  - `folderPath` string, nullable, required: The SFTP drop folder that produced this election, relative to your SFTP home (e.g. `/client-benefit-elections/9172/2026-09-28T021533`). Null for a REST-initiated election.
  - `errorCode` string, nullable, required: Machine-readable failure reason, present only when `status` is `failed`.
  - `userMessage` string, nullable, required: Human-readable failure reason, present only when `status` is `failed`. Pair with `errorCode` for programmatic handling; show this to a human.
  - `startedAt` string: When extraction started, as an ISO 8601 timestamp. Absent until it does.
  - `finishedAt` string: When extraction finished, as an ISO 8601 timestamp. Absent until it does.
  - `createdAt` string, required: When the election was created, as an ISO 8601 timestamp.

## Other responses

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