---
title: "Which credit unions' published membership area reaches this place?"
method: GET
path: "/v1/eligibility/search"
tags: ["Reference Data"]
---

# Which credit unions' published membership area reaches this place?

`GET /v1/eligibility/search`

## Request

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

The place-based inverse lookup, and the data source behind the public `/who-can-join/*` pages. Given a state (and optionally a county), returns positive-evidence matches ranked county-specific evidence first, then state-wide, then open-to-anyone.

Unlike `POST /v1/eligibility/search`, this asks nothing about a person: it reports which institutions' published criteria reach a PLACE, with per-row provenance. The result set is explicitly non-exhaustive: absence is not ineligibility.

Matching stance: a credit union whose record names the state but carries no county detail serves the whole state and is reported as `matched: "state"` — it is never dropped from a county for lacking county detail. When a non-empty county list omits the requested county, the institution is returned in `unknown`, because the record cannot prove no other geographic or non-geographic membership path exists. `open_to_anyone` records match everywhere.

Set `open_to_anyone=true` to list the nationally-joinable credit unions; in that mode `state` is optional, because scoping an open-membership list to a state would be false.

**Authentication required**: Pass your API key in the `X-API-Key` header.

## Query parameters

- `state` string
- `county` string
- `open_to_anyone` 'true' | 'false'

## Response `200`

Positive-evidence place matches — from exact active eligibility publications when available, otherwise from live compatibility graph rules or the legacy flat record — plus unknown non-matches. Only pure place/open graph paths are eligible for a positive GET match; compound paths remain unknown. Non-exhaustive; absence is not ineligibility.

- object
  - `state` string: Echo of the requested state. Omitted when none was supplied.
  - `county` string: Echo of the requested county, normalized. Omitted when none was supplied.
  - `open_to_anyone_only` boolean: Present and true when the open-membership filter was applied.
  - `result_semantics` 'positive_evidence_only', required: The positive results are non-exhaustive. A missing credit union, or a row in `unknown`, must not be interpreted as ineligible.
  - `count` integer, required: Number of matching credit unions returned.
  - `results` EligibilityPlaceMatch[], required: Credit unions with positive evidence that the requested place is reached.
    - `credit_union_id` string, required: Canonical identifier of the matched credit union.
    - `name` string, required: Name of the matched credit union.
    - `slug` string, required: URL slug used by the public who-can-join pages.
    - `state` string, required: Two-letter US state code the credit union is chartered in.
    - `eligibility_type` string, required: How membership is defined for this credit union — for example community, employer, association, or military.
    - `open_to_anyone` boolean, required: True when a verified open-to-anyone graph path or legacy open path is held.
    - `geo_counties` string[]: Counties the record names (normalized). Empty when the record is state-wide or names only cities. Graph rows carry state-qualified county keys, so a county listed here is in the requested state.
    - `geo_cities` string[]: Cities the record names (normalized), when the source is the eligibility graph. Absent on legacy rows.
    - `source` string, nullable: Where the eligibility rule was read from, or null when unattributed.
    - `confidence` number, required: Confidence in this match, 0–1, carried from the extracted eligibility rule.
    - `evidence_url` string, uri, nullable: Page the eligibility rule was extracted from, or null when unattributed.
    - `extracted_at` string, date-time, nullable: When the eligibility rule was last extracted, or null when unknown.
    - `engine` 'graph' | 'legacy': Which pass produced this row: `graph` (an exact active publication when present, otherwise live compatibility rules) or `legacy` (flat cu_eligibility row used only where no graph rules exist).
    - `publication` EligibilityPublicationRef: Exact immutable active eligibility generation evaluated for this response.
      - `publication_id` integer, required: Database identifier of the active publication.
      - `ruleset_sha256` string, required: SHA-256 digest of the complete ordered rule set.
      - `activated_at` string, date-time, required: When this generation became serving authority.
      - `proposal_coverage` EligibilityProposalCoverage: How many model-proposed claims from the source page survived evidence verification. This is not an attestation that every real-world field-of-membership path is known.
        - `scope` 'source_page_model_proposals', required: Metric scope, explicitly limited to model proposals extracted from reviewed source pages.
        - `proposed_claims` integer, required: Claims proposed by extraction from the reviewed source pages.
        - `verified_claims` integer, required: Proposed claims that passed evidence verification.
        - `published_rules` integer, required: Verified graph rules published from the candidate.
        - `withheld_claims` integer, required: Proposed claims withheld because verification did not pass.
        - `proposal_survival` number, nullable, required: Verified claims divided by proposed claims, or null when no claims were proposed.
        - `withheld_reasons` object, required: Withheld claim counts grouped by machine-readable verification reason.
    - `matched` 'county' | 'city' | 'state' | 'open', required: How this credit union reached the requested place: a named county in its record, a named city in the state (state pages only), a state-wide record, or open-to-anyone membership.
  - `unknown_count` integer, required: Number of non-positive rows whose held rules do not prove a pure place/open match.
  - `unknown` EligibilityPlaceUnknown[], required: Non-matches retained as unknown. Active rows carry exact publication lineage but no stale flat action metadata.
    - `credit_union_id` string, required: Canonical identifier of the matched credit union.
    - `name` string, required: Name of the matched credit union.
    - `slug` string, required: URL slug used by the public who-can-join pages.
    - `state` string, required: Two-letter US state code the credit union is chartered in.
    - `eligibility_type` string, required: How membership is defined for this credit union — for example community, employer, association, or military.
    - `open_to_anyone` boolean, required: True when a verified open-to-anyone graph path or legacy open path is held.
    - `geo_counties` string[]: Counties the record names (normalized). Empty when the record is state-wide or names only cities. Graph rows carry state-qualified county keys, so a county listed here is in the requested state.
    - `geo_cities` string[]: Cities the record names (normalized), when the source is the eligibility graph. Absent on legacy rows.
    - `source` string, nullable: Where the eligibility rule was read from, or null when unattributed.
    - `confidence` number, required: Confidence in this match, 0–1, carried from the extracted eligibility rule.
    - `evidence_url` string, uri, nullable: Page the eligibility rule was extracted from, or null when unattributed.
    - `extracted_at` string, date-time, nullable: When the eligibility rule was last extracted, or null when unknown.
    - `engine` 'graph' | 'legacy': Which pass produced this row: `graph` (an exact active publication when present, otherwise live compatibility rules) or `legacy` (flat cu_eligibility row used only where no graph rules exist).
    - `publication` EligibilityPublicationRef: Exact immutable active eligibility generation evaluated for this response.
      - `publication_id` integer, required: Database identifier of the active publication.
      - `ruleset_sha256` string, required: SHA-256 digest of the complete ordered rule set.
      - `activated_at` string, date-time, required: When this generation became serving authority.
      - `proposal_coverage` EligibilityProposalCoverage: How many model-proposed claims from the source page survived evidence verification. This is not an attestation that every real-world field-of-membership path is known.
        - `scope` 'source_page_model_proposals', required: Metric scope, explicitly limited to model proposals extracted from reviewed source pages.
        - `proposed_claims` integer, required: Claims proposed by extraction from the reviewed source pages.
        - `verified_claims` integer, required: Proposed claims that passed evidence verification.
        - `published_rules` integer, required: Verified graph rules published from the candidate.
        - `withheld_claims` integer, required: Proposed claims withheld because verification did not pass.
        - `proposal_survival` number, nullable, required: Verified claims divided by proposed claims, or null when no claims were proposed.
        - `withheld_reasons` object, required: Withheld claim counts grouped by machine-readable verification reason.
    - `status` 'unknown', required: Always `unknown`; this record is not a positive match and is not evidence of ineligibility.
    - `unknown_reason` 'fom_completeness_unaffirmed', required: No typed closed-world attestation proves that the held membership rules contain every path.
  - `disclosure` string, required: Statement that must be shown to a consumer alongside this result.

## Other responses

- `400`: The request was malformed — a missing required field, an unparseable body, or a parameter outside its allowed range. The `error` field names what was wrong; retrying the identical request will fail identically.
- `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.

---

[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)
