Skip to content

Search health plans by ZIP code and age

GET
/v1/health/plans

Returns a paginated HAL collection of health plans matching the given ZIP code, age, and optional filters. Plans are returned in _embedded.plans with _links.self on each item. Supports both cursor-based (keyset) and offset-based pagination. Advanced filters (issuer, hsa_eligible, max_premium, max_deductible, non-default sort) and APTC parameters (income, household_size) require a Pro or Enterprise subscription.

zip
required
string
/^\d{5}$/

5-digit ZIP code

Example
10001
age
required
integer
<= 65

Applicant age (0-14 are child rates, 64+ use age 64 rate)

Example
35
year
integer
default: 2026 >= 2014 <= 2030

Plan year. Defaults to 2026. Available: 2026

county_fips
string
/^\d{5}$/

5-digit county FIPS code to disambiguate ZIPs spanning multiple rating areas

Example
36061
metal_level
string
Allowed values: bronze expanded_bronze silver gold platinum catastrophic

Filter by metal tier

plan_type
string
Allowed values: hmo ppo epo pos indemnity

Filter by network type

issuer
string

Case-insensitive partial match on issuer name

Example
United
hsa_eligible
boolean

Filter HSA-eligible plans only

max_premium
number

Maximum monthly premium in dollars

max_deductible
number

Maximum individual deductible in dollars

sort_by
string
default: premium
Allowed values: premium deductible max_oop name

Field to sort results by

sort_order
string
default: asc
Allowed values: asc desc

Sort direction

cursor
string

Opaque cursor for keyset pagination (from next_cursor in previous response)

page
integer
default: 1 >= 1

Page number for offset-based pagination. Returns 400 if >1 when cursor is also provided.

per_page
integer
default: 25 >= 1 <= 100

Results per page

Paginated HAL collection of health plans

HAL collection of health plans with pagination metadata

object
_links
object
self

A HAL link object (draft-kelly-json-hal-11 §5)

object
href
required

Target URI or URI Template

string format: uri-reference
templated

True when href is an RFC 6570 URI Template

boolean
type

Media type hint for the target resource

string
title

Human-readable link title

string
next

A HAL link object (draft-kelly-json-hal-11 §5)

object
href
required

Target URI or URI Template

string format: uri-reference
templated

True when href is an RFC 6570 URI Template

boolean
type

Media type hint for the target resource

string
title

Human-readable link title

string
prev

A HAL link object (draft-kelly-json-hal-11 §5)

object
href
required

Target URI or URI Template

string format: uri-reference
templated

True when href is an RFC 6570 URI Template

boolean
type

Media type hint for the target resource

string
title

Human-readable link title

string
first

A HAL link object (draft-kelly-json-hal-11 §5)

object
href
required

Target URI or URI Template

string format: uri-reference
templated

True when href is an RFC 6570 URI Template

boolean
type

Media type hint for the target resource

string
title

Human-readable link title

string
last

A HAL link object (draft-kelly-json-hal-11 §5)

object
href
required

Target URI or URI Template

string format: uri-reference
templated

True when href is an RFC 6570 URI Template

boolean
type

Media type hint for the target resource

string
title

Human-readable link title

string
plan_detail

A HAL link object (draft-kelly-json-hal-11 §5)

object
href
required

Target URI or URI Template

string format: uri-reference
templated

True when href is an RFC 6570 URI Template

boolean
type

Media type hint for the target resource

string
title

Human-readable link title

string
_embedded
object
plans
Array<object>

Abbreviated plan data returned in search and compare collections

object
_links

HAL links for this plan item

object
self

A HAL link object (draft-kelly-json-hal-11 §5)

object
href
required

Target URI or URI Template

string format: uri-reference
templated

True when href is an RFC 6570 URI Template

boolean
type

Media type hint for the target resource

string
title

Human-readable link title

string
id

Plan variant ID

string
name

Marketing name

string
issuer

Insurance company name

string
state

Two-letter state code

string
metal_level
string
Allowed values: bronze expanded bronze silver gold platinum catastrophic
plan_type
string
Allowed values: hmo ppo epo pos indemnity
premium

Monthly premium for the given age

number
premium_with_credit

Premium after estimated APTC (null until subsidy calculation is available)

number
nullable
deductible

Cost amount for individual and family tiers

object
individual

Individual cost in dollars

number
family

Family cost in dollars

number
max_out_of_pocket

Cost amount for individual and family tiers

object
individual

Individual cost in dollars

number
family

Family cost in dollars

number
hsa_eligible
boolean
national_network
boolean
links

External resource URLs (SBC, formulary, etc.)

object
benefits_summary
string format: uri
nullable
brochure
string format: uri
nullable
formulary
string format: uri
nullable
provider_directory
string format: uri
nullable
total

Total matching plans. Null on cursor-paginated pages (client has total from page 1).

integer
nullable
page

Current page (null when using cursor)

integer
nullable
per_page
integer
next_cursor

Opaque cursor for the next page

string
zip
string
state
string
county
string
county_fips
string
rating_area
string
multiple_areas

True when ZIP spans multiple rating areas

boolean
plan_year
integer
data_source
string
data_freshness
string
X-Request-Id
string format: uuid

Unique request identifier for tracing

Link
string

RFC 8288 Web Linking (pagination and resource discovery)

ETag
string

Weak ETag for conditional request support (If-None-Match)

Validation error

RFC 9457 Problem Details for HTTP APIs (application/problem+json)

object
type
required

URI identifying the problem type. about:blank for standard HTTP status semantics.

string format: uri
title
required

Short human-readable summary of the problem type

string
status
required

HTTP status code

integer
detail
required

Human-readable explanation specific to this occurrence

string
instance

URI reference identifying the specific occurrence (request path)

string format: uri-reference
errors

Validation errors (extension member, present on 400 responses)

Array<object>
object
field

Dot-delimited path to the invalid field

string
message

Validation error message

string
required_tier

Minimum subscription tier required (extension member, present on 402 responses)

string
Allowed values: pro enterprise
upgrade

URL to upgrade subscription (extension member, present on 402/429 responses)

string format: uri
Example
{
"type": "https://api.opelyx.com/problems/not-found",
"title": "Not Found",
"status": 404,
"detail": "Plan 99999XX0000000-00 not found.",
"instance": "/v1/health/plans/99999XX0000000-00"
}

Missing or invalid API key

RFC 9457 Problem Details for HTTP APIs (application/problem+json)

object
type
required

URI identifying the problem type. about:blank for standard HTTP status semantics.

string format: uri
title
required

Short human-readable summary of the problem type

string
status
required

HTTP status code

integer
detail
required

Human-readable explanation specific to this occurrence

string
instance

URI reference identifying the specific occurrence (request path)

string format: uri-reference
errors

Validation errors (extension member, present on 400 responses)

Array<object>
object
field

Dot-delimited path to the invalid field

string
message

Validation error message

string
required_tier

Minimum subscription tier required (extension member, present on 402 responses)

string
Allowed values: pro enterprise
upgrade

URL to upgrade subscription (extension member, present on 402/429 responses)

string format: uri
Example
{
"type": "https://api.opelyx.com/problems/not-found",
"title": "Not Found",
"status": 404,
"detail": "Plan 99999XX0000000-00 not found.",
"instance": "/v1/health/plans/99999XX0000000-00"
}
WWW-Authenticate
string

Bearer authentication challenge

Feature requires a higher-tier subscription

RFC 9457 Problem Details for HTTP APIs (application/problem+json)

object
type
required

URI identifying the problem type. about:blank for standard HTTP status semantics.

string format: uri
title
required

Short human-readable summary of the problem type

string
status
required

HTTP status code

integer
detail
required

Human-readable explanation specific to this occurrence

string
instance

URI reference identifying the specific occurrence (request path)

string format: uri-reference
errors

Validation errors (extension member, present on 400 responses)

Array<object>
object
field

Dot-delimited path to the invalid field

string
message

Validation error message

string
required_tier

Minimum subscription tier required (extension member, present on 402 responses)

string
Allowed values: pro enterprise
upgrade

URL to upgrade subscription (extension member, present on 402/429 responses)

string format: uri
Example
{
"type": "https://api.opelyx.com/problems/not-found",
"title": "Not Found",
"status": 404,
"detail": "Plan 99999XX0000000-00 not found.",
"instance": "/v1/health/plans/99999XX0000000-00"
}

Resource not found

RFC 9457 Problem Details for HTTP APIs (application/problem+json)

object
type
required

URI identifying the problem type. about:blank for standard HTTP status semantics.

string format: uri
title
required

Short human-readable summary of the problem type

string
status
required

HTTP status code

integer
detail
required

Human-readable explanation specific to this occurrence

string
instance

URI reference identifying the specific occurrence (request path)

string format: uri-reference
errors

Validation errors (extension member, present on 400 responses)

Array<object>
object
field

Dot-delimited path to the invalid field

string
message

Validation error message

string
required_tier

Minimum subscription tier required (extension member, present on 402 responses)

string
Allowed values: pro enterprise
upgrade

URL to upgrade subscription (extension member, present on 402/429 responses)

string format: uri
Example
{
"type": "https://api.opelyx.com/problems/not-found",
"title": "Not Found",
"status": 404,
"detail": "Plan 99999XX0000000-00 not found.",
"instance": "/v1/health/plans/99999XX0000000-00"
}

Rate limit exceeded

RFC 9457 Problem Details for HTTP APIs (application/problem+json)

object
type
required

URI identifying the problem type. about:blank for standard HTTP status semantics.

string format: uri
title
required

Short human-readable summary of the problem type

string
status
required

HTTP status code

integer
detail
required

Human-readable explanation specific to this occurrence

string
instance

URI reference identifying the specific occurrence (request path)

string format: uri-reference
errors

Validation errors (extension member, present on 400 responses)

Array<object>
object
field

Dot-delimited path to the invalid field

string
message

Validation error message

string
required_tier

Minimum subscription tier required (extension member, present on 402 responses)

string
Allowed values: pro enterprise
upgrade

URL to upgrade subscription (extension member, present on 402/429 responses)

string format: uri
Example
{
"type": "https://api.opelyx.com/problems/not-found",
"title": "Not Found",
"status": 404,
"detail": "Plan 99999XX0000000-00 not found.",
"instance": "/v1/health/plans/99999XX0000000-00"
}
Retry-After
integer

Seconds until the rate limit resets

RateLimit-Limit
integer

Maximum requests per day for this tier

RateLimit-Remaining
integer

Remaining requests today

RateLimit-Reset
integer

Unix timestamp when the limit resets (midnight UTC)