---
title: "Fleet-wide membership-eligibility coverage (Enterprise Routes)"
method: GET
path: "/v1/eligibility/coverage"
tags: ["Reference Data"]
---

# Fleet-wide membership-eligibility coverage (Enterprise Routes)

`GET /v1/eligibility/coverage`

## Request

- Base URL: `https://api.rateapi.dev`
- URL: `https://api.rateapi.dev/v1/eligibility/coverage`
- Auth: API key in header `X-API-Key`

What the eligibility graph holds across all US credit unions: live rule counts, how many institutions they cover and what share of the active fleet that is, immutable-publication adoption, legacy compatibility populations, evidence-source mix, verification status, freshness, rules by kind, and reach. Every number is reported next to the stage it belongs to.

Read from the graph tables directly, fleet-wide. `GET /v1/eligibility/search` answers for one place and is not a census; quote this endpoint for coverage.

Aggregate only — no institution-level rows. `headline` is a single dated sentence an application or answer engine can quote verbatim. The aggregate is cached internally for one hour; authenticated responses are private and not edge-cacheable.

**Enterprise authentication required**: Pass an Enterprise API key in the `X-API-Key` header.

## Response `200`

Coverage aggregate

- object
  - `as_of` string, date-time, nullable, required: Newest rule confirmation in the inventory, not the age of every rule or an offer observation date. Use generated_at for the aggregate computation time and the freshness distribution for corpus age.
  - `generated_at` string, date-time, required: When this aggregate was computed. Edge-cached for one hour, so it may be up to an hour older than the request.
  - `headline` string, required: One dated, quotable sentence carrying every headline number next to its denominator.
  - `population` object: Population disclosure: this cached graph inventory is neither a personal eligibility decision nor a reachable-offer count. Its population and generation differ from the active non-canary serving snapshot.
    - `kind` 'graph_inventory': Aggregate graph inventory, not personalized offers.
    - `rule_scope` 'all_current_rules': All current rules in the graph inventory.
    - `fleet_scope` 'active_institutions': Scope of the fleet denominator.
    - `is_personal_eligibility_decision` false: Never a decision about a person.
    - `is_reachable_offer_count` false: Never a count of proven suitable deposit offers.
    - `observation_time_semantics` string: Explains why the newest confirmation is not the age of every rule.
  - `fleet` object, required: The denominator: how many active institutions exist and how many the graph holds live rules for.
    - `active_institutions` integer: Active US credit unions in the RateAPI directory.
    - `institutions_with_live_rules` integer: Active credit unions with at least one current eligibility rule. Both this numerator and active_institutions use the active-fleet population.
    - `share_with_live_rules` number: institutions_with_live_rules / active_institutions, 0–1.
  - `rules` object, required: Live rule counts, verification split and freshness.
    - `live` integer: Rules not superseded.
    - `institutions` integer: Distinct inventory institutions with current rules, including inactive institutions. Kept separate from the active-fleet numerator.
    - `human_verified` integer: Live rules whose verification_status is human_verified or institution_verified.
    - `auto_validated` integer: Live rules machine-validated against a second independent read of the source.
    - `with_verbatim_evidence` integer: Equals `live` by construction: a rule cannot be stored without its evidence quote.
    - `median_age_days` number, nullable: Median days since each live rule was last confirmed.
    - `confirmed_within_30d` integer: Live rules whose last confirmation (or first observation) is within the last 30 days.
  - `by_kind` object[], required: Live rules and distinct institutions per rule kind, largest first.
    - `rule_kind` 'geography' | 'employment' | 'association' | 'education' | 'military' | 'worship' | 'family' | 'household' | 'open' | 'deposit_or_donation' | 'other': The kind of access path the rule describes.
    - `rules` integer: Live rules of this kind.
    - `institutions` integer: Distinct institutions holding at least one live rule of this kind.
  - `authority` object, required: Serving-authority adoption. These populations are deliberately separate from broad live-rule coverage.
    - `active_publications` integer, required: Charters currently governed by an exact immutable active-publication pointer.
    - `active_publication_rules` integer, required: Rules declared by those active publications.
    - `selection_bound_publications` integer, required: Active publications carrying the selection-bound append-only provenance contract.
    - `publications_with_proposal_coverage` integer, required: Active publications that report proposed, verified and withheld claim counts.
    - `legacy_graph_institutions` integer, required: Institutions with live graph rules but no immutable active-publication pointer.
    - `flat_only_institutions` integer, required: Active institutions represented only by the lossy flat compatibility record.
    - `latest_activation` string, date-time, nullable, required: Most recent immutable publication activation, or null when none exists.
  - `evidence_sources` object[], required: Evidence-authority mix. Institution counts can overlap because one institution may use multiple source classes.
    - `source_type` string, required: Recorded source class, such as membership_page, application_page, ncua or unknown.
    - `rules` integer, required: Live rules supported by this source class.
    - `institutions` integer, required: Distinct institutions with at least one live rule from this source class.
  - `reach` object, required: How specific the rules are: distinct places and organizations they name, and how many institutions carry each path type.
    - `counties_named` integer: Distinct county keys (county:ST:name) appearing in live, non-negated conditions.
    - `states_with_county_rules` integer: Distinct states that at least one county key belongs to (DC counts as a state).
    - `institutions_with_county_rules` integer: Institutions with at least one live county-level condition.
    - `employers_resolved` integer: Distinct canonical organizations named by employment conditions.
    - `institutions_with_employer_rules` integer: Institutions with at least one live employment condition resolved to a canonical organization.
    - `institutions_with_military_rules` integer: Institutions with at least one live military-affiliation condition.
    - `institutions_open_to_anyone` integer: Institutions with a live open_to_anyone condition. Deliberately conservative: this claim passes a two-vendor gate before publication.
    - `institutions_with_school_rules` integer: Institutions with at least one live student/alumni/school-employee condition.
    - `institutions_with_worship_rules` integer: Institutions with at least one live place-of-worship condition.
  - `pipeline` object[], required: Institutions by eligibility pipeline status — why an institution may be absent from the graph (no source found, needs review, pending).
    - `status` string: Eligibility pipeline status for the institution (published, no_source_found, needs_review, pending, failed).
    - `institutions` integer: Institutions currently in this status.
  - `credit_data` object, required: Explicit statement that no rule condition references credit data.
    - `conditions_referencing_credit` 0: Always 0: the condition schema has no kind for credit score, income or debt.
    - `note` string: Plain-language statement of the above, safe to quote.
  - `semantics` string, required: How to read the counts: live rules only; absence from the graph is undecided, never ineligible; where row-level verdicts live.
  - `disclosure` string, required: Statement that must accompany any consumer-facing use of eligibility data.

## Other responses

- `401`: No API key, or a key that is unknown or disabled. Send it in the `X-API-Key` header. Free keys are issued instantly by POST /keys with an email address. The response carries `WWW-Authenticate` pointing at this host's protected-resource metadata, and the `RateLimit-*` headers describing the Free-tier budget a key issued now would carry (scope `anonymous`) — a rejected request spends none of it, so `Remaining` equals `Limit`.
- `402`: The key is valid, but RateAPI Routes is available only on Enterprise. The response includes `required_plan`, `upgrade_url`, and a `Link` header with `rel="upgrade"`; the rejected request does not consume quota.
- `429`: Quota exhausted for the current window. `Retry-After` gives the seconds to wait; `upgradeInfo` explains how to lift the cap. Retrying before the reset will fail again and still counts as a request.
- `503`: Coverage temporarily unavailable. Never a body of zeros.

---

[API](https://skmtc.dev/rateapi/apis/rate-api.md) · [All operations](https://skmtc.dev/rateapi/apis/rate-api/llms.txt) · [OpenAPI document](https://skmtc.dev/rateapi/apis/rate-api/revisions/06a6db76995f?raw)
