Skip to content

Estimate out-of-pocket costs for a plan

GET
/v1/health/plans/{plan_id}/oop-estimate

Calculates estimated annual out-of-pocket costs for a given plan under a specified usage scenario. Uses SBC (Summary of Benefits and Coverage) data for having_baby and having_diabetes scenarios, and heuristic modeling for low/medium/high usage scenarios. Requires Pro or Enterprise subscription.

plan_id
required
string

Plan variant ID

Example
21989AK0030001-01
zip
required
string
/^\d{5}$/

5-digit ZIP code

Example
99501
age
required
integer
<= 65

Applicant age

Example
35
scenario
required
string
Allowed values: low medium high having_baby having_diabetes

Usage scenario for cost estimation

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

Out-of-pocket cost estimate with HAL _links

Estimated annual out-of-pocket costs under a given scenario

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
plan

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_id
string
plan_name
string
metal_level
string
zip
string
age
integer
county
string
county_fips
string
multiple_areas
boolean
monthly_premium
number
scenario
string
Allowed values: low medium high having_baby having_diabetes
estimated_annual_cost
number
sbc_data_available

Whether CMS SBC scenario data was available. False indicates heuristic estimation.

boolean
breakdown
object
annual_premium
number
estimated_out_of_pocket
number
deductible_applied
number
coinsurance_applied
number
notes
Array<string>
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)