Skip to main content

Statements

Use the statements and statement queries to retrieve an Individual's monthly account statements. The list query returns lightweight summaries. The detail query returns the full statement: period, balances, interest, and every transaction in the period.

These queries return structured data, not documents. You render the statement experience in your own application, using your own formatting and branding.

Today, only HSA Benefits produce statements. The API is forward-compatible: filters that select other Benefit types return an empty list, not an error.

What you need

List an Individual's statements

Statements are ordered by period start date, most recent first.

query Statements($where: StatementsFilterInput!, $after: String, $first: Int) {
statements(where: $where, after: $after, first: $first) {
... on StatementsResults {
nodes {
id
periodStartDate
periodEndDate
}
pageInfo {
hasNextPage
endCursor
}
}
... on BadRequestError {
message
code
retryable
}
... on InternalServerError {
message
code
retryable
}
}
}

Variables:

{
"where": { "individualId": "<individualId>" },
"first": 25
}

A successful response:

{
"data": {
"statements": {
"nodes": [
{
"id": "<statementId>",
"periodStartDate": "2026-05-01",
"periodEndDate": "2026-05-31"
},
{
"id": "<statementId>",
"periodStartDate": "2026-04-01",
"periodEndDate": "2026-04-30"
}
],
"pageInfo": {
"hasNextPage": false,
"endCursor": "<cursor>"
}
}
}
}

An enrolled Individual with no statements yet returns an empty nodes list.

Pagination

The list is cursor-paginated. To fetch the next page, pass the previous page's endCursor as after and check hasNextPage. Cursors are opaque; do not parse or construct them.

Filters

All filters are optional. Omitted filters do not restrict the result.

FilterBehavior
benefitTypesOnly statements for accounts of these Benefit types. Today only HSA produces statements.
benefitIdsOnly statements for accounts associated with these Benefits.
periodStartsOnOrAfterOnly statements whose period starts on or after this date (inclusive).
periodEndsOnOrBeforeOnly statements whose period ends on or before this date (inclusive).

Filters that match no statement-bearing account — for example, benefitTypes: [FSA] — return an empty list, not an error.

For example, to list statements for periods within 2026:

{
"where": {
"individualId": "<individualId>",
"benefitTypes": ["HSA"],
"periodStartsOnOrAfter": "2026-01-01",
"periodEndsOnOrBefore": "2026-12-31"
}
}

Get a statement

Fetch the full statement with the statement query, using an id returned by the list query.

query Statement($where: StatementFilterInput!) {
statement(where: $where) {
... on Statement {
id
periodStartDate
periodEndDate
benefitType
accountNumberForDisplay
startingBalance {
currency
lowestDenominationAmount
amount
}
endingBalance {
currency
lowestDenominationAmount
amount
}
interestEarnedForPeriod {
currency
lowestDenominationAmount
amount
}
interestPaidForPeriod {
currency
lowestDenominationAmount
amount
}
transactions {
id
date
description
type
category
amount {
currency
lowestDenominationAmount
amount
}
balance {
currency
lowestDenominationAmount
amount
}
}
}
... on BadRequestError {
message
code
retryable
}
... on InternalServerError {
message
code
retryable
}
}
}

Variables:

{
"where": {
"individualId": "<individualId>",
"id": "<statementId>"
}
}

A successful response:

{
"data": {
"statement": {
"id": "<statementId>",
"periodStartDate": "2026-05-01",
"periodEndDate": "2026-05-31",
"benefitType": "HSA",
"accountNumberForDisplay": "****1234",
"startingBalance": {
"currency": "USD",
"lowestDenominationAmount": 125000,
"amount": 1250
},
"endingBalance": {
"currency": "USD",
"lowestDenominationAmount": 130000,
"amount": 1300
},
"interestEarnedForPeriod": {
"currency": "USD",
"lowestDenominationAmount": 52,
"amount": 0.52
},
"interestPaidForPeriod": {
"currency": "USD",
"lowestDenominationAmount": 48,
"amount": 0.48
},
"transactions": [
{
"id": "<transactionId>",
"date": "2026-05-15",
"description": "Payroll contribution",
"type": "DEPOSIT",
"category": "Employee contribution",
"amount": {
"currency": "USD",
"lowestDenominationAmount": 5000,
"amount": 50
},
"balance": {
"currency": "USD",
"lowestDenominationAmount": 130000,
"amount": 1300
}
}
]
}
}
}

Notes:

  • Transaction amount values are signed: positive amounts are credits, negative amounts are debits.
  • Each transaction's balance is the account balance immediately after that transaction.
  • interestEarnedForPeriod and interestPaidForPeriod are null when not available for the period.
  • See StatementTransactionType for the full set of transaction types.

Errors

Returns BadRequestError when:

  • The Individual cannot be found. The individualId is unknown or does not belong to your organizations.
  • The statement cannot be found. The id is unknown or does not belong to the supplied individualId.

Unexpected failures return InternalServerError; these are safe to retry.

See also

  • Tax Forms — 1099-SA and 5498-SA data for an Individual, plus secure PDF downloads.