Sail

Get Contribution Summary

GET/users/{user_id}/accounts/{account_id}/contributions/summary

Year-to-date contribution total, applicable IRS limit, and remaining headroom, the “help users max out their HSA” use case in one call. Requires the benefit_account scope and product.

Path Parameters

user_idstringrequired

The Sail user id.

account_idstringrequired

The Sail account id.

Query Parameters

tax_yearinteger

Defaults to the current tax year.

Response

Contribution summary.

account_idstring

The Sail account id.

tax_yearinteger

The tax year this summary covers.

ytd_totalnumber<float>

Total contributions made so far this tax year.

annual_limitnumber<float>

Applicable IRS limit for the account holder’s coverage tier.

remainingnumber<float>

Headroom remaining before the annual limit is reached.

coverage_tier"self_only" | "family" | "unknown"

The account holder’s HSA coverage tier, which determines the applicable IRS limit.

as_ofstring<date-time>

When this summary was computed.

Standard error envelope covering 400, 401, 403, 404, 429, and 500.

errorobject

The error detail.

Show error properties
codestring

Machine-readable code, e.g. not_found, token_scope_mismatch, product_not_enabled, insufficient_key_scope, insufficient_token_scope, user_token_required, user_token_expired, invalid_user_token, invalid_key_configuration, connection_not_reconnectable, rate_limited.

messagestring

Human-readable error message. May change, so match on error.code instead.

paramstring

The request field that caused the error, when applicable. Null otherwise.

Request
curl -X GET "https://live.savewithsail.com/api/v1/users/<user_id>/accounts/<account_id>/contributions/summary?tax_year=<tax_year>" \
  -H "Authorization: Bearer <token>"
Response
{
  "account_id": "string",
  "tax_year": 2026,
  "ytd_total": 2150,
  "annual_limit": 4400,
  "remaining": 2250,
  "coverage_tier": "self_only",
  "as_of": "1970-01-01T00:00:00.000Z"
}