Know Who Can Join Before You Rank
Ranking a credit union your user can't join erodes trust in every other recommendation. Every ranked offer now carries an evidence-backed eligibility verdict, a full field-of-membership record lives at GET /v1/credit-unions/{id}/eligibility, and POST /v1/eligibility/check verdicts up to 50 credit unions against one user profile in a single call.
RateAPI annotates every ranked credit union offer with an evidence-backed membership-eligibility status -
Source: RateAPI.dev/api/eligibility (verified July 11, 2026)open_to_anyone,likely_eligible,eligible_via_employer,eligible_via_military,geo_mismatch, orunknown. Every claim is backed by a machine-verified quote from the credit union's own membership page, offers are never hidden unless the caller opts in, and the final membership determination is always the institution's.
The eligibility layer answers "can this user actually join this credit union?" on every ranked offer. Offers on /v1/decisions, /v1/league-table, and /v1/rates carry an eligibility object with one of five statuses plus the join path. Fetch the full field-of-membership record per credit union, or batch-check up to 50 credit unions against one user profile. It annotates and re-ranks - it never filters. The preferences.eligible_only filter is in beta: gated behind our identity-verification threshold, it currently annotates without filtering.
The Per-Offer Eligibility Object
Each ranked offer on /v1/decisions, /v1/decisions/batch, /v1/league-table, and /v1/rates can carry an eligibility object. Credit unions we have no verified data on simply omit the field - the annotation is strictly additive and existing integrations are unaffected:
- status - one of
open_to_anyone,likely_eligible,eligible_via_employer,eligible_via_military,geo_mismatch, orunknown. A suppliedmilitary_statusthat matches a military field-of-membership tag yieldseligible_via_military; aschool,worship, or occupation match yieldslikely_eligiblewith the matched rule naming which affinity applied. - matched_rule - which concrete rule produced the status (
county,state,employer,military,school,worship,occupation, orassociation_open) with an optional detail. Purely explanatory; absent ongeo_mismatchandunknown. - join_cost_usd - the up-front cost to become a member: the membership fee plus the minimum share deposit, summed from whichever components are known. Present only when at least one component is verified; the raw
membership_fee_usdandmin_deposit_usdaccompany it. - join_path - concrete steps to become a member, e.g. "Join the American Consumer Council (one-time $8 donation) during application".
- requirements_summary - a one-line human-readable summary of the membership requirements, generated at extraction time.
- eligibility_type - the charter shape:
community,employer,association,multi,tip,open, orunknown. - confidence - 0 to 1, computed from how many extracted claims survived evidence verification.
{ "provider": "Golden Valley Credit Union", "apr": 6.125, "monthly_payment": 2551, "eligibility": { "status": "open_to_anyone", "matched_rule": { "type": "association_open" }, "join_path": "Join the American Consumer Council (one-time $8 donation) during application", "requirements_summary": "Anyone can join via a one-time $8 association donation", "eligibility_type": "association", "membership_fee_usd": 8, "min_deposit_usd": 5, "join_cost_usd": 13, "confidence": 0.92 }}A supplied military_status that matches a credit union's military field-of-membership tag produces an eligible_via_military verdict, carrying the same join path, fees, and join_cost_usd:
{ "credit_union_id": "cu_kirt", "status": "eligible_via_military", "matched_rule": { "type": "military", "detail": "active-duty, retired, and veteran service members" }, "join_path": "Open a membership share with a $5 minimum deposit", "requirements_summary": "Serving the military community", "eligibility_type": "military", "membership_fee_usd": 0, "min_deposit_usd": 5, "join_cost_usd": 5, "confidence": 0.95}Eligible and open offers (including eligible_via_military) rank ahead of geo-mismatch offers at equal APR - a tie-break, never a gate. unknown behaves exactly like today, so nothing breaks. Verified July 11, 2026.
How It Works
Three Surfaces, One Eligibility Model
Annotate ranked offers, look up the full record, or batch-check a list
1. Eligibility-Aware Decision Requests
Optional request parameters sharpen the verdicts on any decisions call. context.geo.county pins the user's county for community-charter matching (when omitted, we resolve candidate counties from zip); borrower.employer is fuzzily matched against each credit union's scraped employer-group list; and the affinity inputs borrower.military_status (active_duty, veteran, reservist, dod_civilian, military_family), borrower.school, and borrower.worship are matched against each credit union's military, school, and place-of-worship field-of-membership tags. preferences.eligible_only is in beta: gated behind our identity-verification threshold, it currently annotates without filtering. Requesting it adds an eligible_only_status of beta_annotation_only to the response - no offers are dropped.
curl -X POST "https://api.rateapi.dev/v1/decisions" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "decision_type": "financing", "context": { "geo": { "state": "CA", "zip": "95814", "county": "Sacramento" } }, "borrower": { "credit_score": 740, "employer": "Boeing", "military_status": "veteran", "school": "UC Davis", "worship": "First Baptist Church" }, "preferences": { "eligible_only": true }, "product_request": { "product_type": "mortgage", "amount": 420000, "term_months": 360 } }'eligible_only will begin filtering only once our validation sampling clears the identity bar; until then it is disclosed as beta on every response that requests it, and results are never silently reduced.2. Full Field-of-Membership Record
Ranked offers carry the verdict; the complete criteria live behind a dedicated lookup, because employer lists can run to hundreds of entries. GET /v1/credit-unions/{id}/eligibility returns the whole record in one cacheable point-read: geo arrays, employers, associations, occupations, fees, provenance, and the evidence_url pointing at the credit union's own membership page.
curl "https://api.rateapi.dev/v1/credit-unions/cu_9f3a/eligibility" \ -H "Authorization: Bearer YOUR_API_KEY" # Response{ "credit_union_id": "cu_9f3a", "eligibility_type": "community", "open_to_anyone": false, "join_path": null, "geo_states": ["CA"], "geo_counties": ["Sacramento", "Yolo", "Placer"], "geo_cities": [], "employers": ["State of California", "UC Davis Health"], "associations": [], "occupations": [], "family_membership": true, "membership_fee_usd": 0, "min_deposit_usd": 5, "requirements_summary": "Live, work, worship, or attend school in Sacramento, Yolo, or Placer County", "source": "scraped", "confidence": 0.9, "evidence_url": "https://www.example-cu.org/membership", "extracted_at": "2026-07-01T04:12:00Z", "updated_at": "2026-07-01T04:12:00Z", "disclosure": "Membership eligibility is guidance based on public charter data and institution websites; final determination is made by the institution."}source is ncua (charter data), scraped (the credit union's own membership page), or manual. confidence reflects how many extracted claims survived verbatim-quote verification against the captured page text. See how we verify membership eligibility for the identity guard, closed-world county matching, dual-vendor open gate, and our verified accuracy record.GET /credit-unions/{state}/{slug} also returns this eligibility object inline alongside the credit union's rates, so a single profile fetch answers both “what are the rates?” and “who can join?”. See the full endpoint list in the API reference.3. Batch Eligibility Check
POST /v1/eligibility/check takes a credit_union_ids array (up to 50) and one user profile - state, zip, county, employer, occupation, military_status, school, and worship, each optional; the more you supply, the sharper the verdicts - and returns a per-credit-union verdict with the matched rule, join_cost_usd when known, and concrete join steps. The same capability ships as the MCP tool check_membership_eligibility for AI agents.
curl -X POST "https://api.rateapi.dev/v1/eligibility/check" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "credit_union_ids": ["cu_9f3a", "cu_71bd", "cu_02ce"], "user": { "state": "CA", "zip": "95814", "county": "Sacramento", "employer": "Boeing", "occupation": "nurse", "military_status": "veteran", "school": "UC Davis", "worship": "First Baptist Church" } }'Use Cases
Who Checks Eligibility?
Personal Finance Apps
Show users the best rate they can actually get - surface the join path next to the offer so "switch and save" is one actionable step, not a dead end.
Loan Marketplaces
Stop losing conversions to "sorry, you can't join" rejections. Re-rank by eligibility today; eligible_only filtering is in beta pending our identity-verification threshold.
AI Agents & Chatbots
Answer "which of these credit unions can I join?" in one turn with the check_membership_eligibility MCP tool, evidence link included.
Loan Officers & Brokers
Pre-qualify a client's credit union shortlist before the first call - the verdict, the fee, and the join steps arrive in one request.
Credit Unions
See how your field of membership reads to comparison surfaces, and verify the quote we extracted from your own membership page via evidence_url.
Researchers & Data Teams
Study field-of-membership structure across the fleet - charter types, community footprints, association join paths, and fees - through one consistent schema.
Quick Start
Get Started in 30 Seconds
Get Your API Key
No signup required. One command.
curl -X POST https://api.rateapi.dev/keysFree tier: 20 requests/month (50 with email)
Check a Shortlist
Verdict up to 50 credit unions against one user profile
curl -X POST "https://api.rateapi.dev/v1/eligibility/check" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "credit_union_ids": ["cu_9f3a", "cu_71bd", "cu_02ce"], "user": { "state": "CA", "zip": "95814", "county": "Sacramento", "employer": "Boeing", "occupation": "nurse", "military_status": "veteran", "school": "UC Davis", "worship": "First Baptist Church" } }'Rank With Eligibility Built In
Add county and employer to your decisions calls
FAQ
Frequently Asked Questions
Quick answers about membership eligibility
Every ranked credit union offer on /v1/decisions, /v1/league-table, and /v1/rates can carry an eligibility object with a status, the matched_rule that produced it, a join_path (concrete steps to become a member), a one-line requirements_summary, the eligibility_type of the charter, and a confidence score. Offers for credit unions we have no eligibility data on simply omit the field - the annotation is strictly additive.
open_to_anyone means the credit union offers a join path available to any US consumer, typically via an association membership. likely_eligible means the user's state, county, occupation, school, or place of worship matches the credit union's community or affinity footprint. eligible_via_employer means the supplied employer matched the credit union's employer group list. eligible_via_military means the supplied military_status (active_duty, veteran, reservist, dod_civilian, or military_family) matched a military field-of-membership tag. geo_mismatch means the user's location falls outside a high-confidence community footprint. unknown means we do not have enough verified data to say - we say unknown rather than guess.
No. Eligibility annotates and tie-breaks - it never silently excludes. The preferences.eligible_only filter is in beta: it is gated behind our identity-verification threshold and currently annotates without filtering. Requesting it adds an eligible_only_status notice of beta_annotation_only to the response, and no offers are dropped. We will enable filtering only once our validation sampling clears the identity bar.
Every claim - each employer, county, fee, and join path - must be backed by a verbatim quote from the credit union's own membership page, and that quote is machine-verified to actually appear in the captured page text before the claim is stored. The open_to_anyone flag has the strictest gate: it additionally requires independent confirmation by a second model from a different vendor reading the same page. Claims that fail verification are dropped, not published.
The complete field-of-membership record for one credit union: eligibility_type, open_to_anyone, join_path, geo_states, geo_counties, geo_cities, employers, associations, occupations, family_membership, membership_fee_usd, min_deposit_usd, source, confidence, evidence_url (the credit union's own membership page), and extracted_at. Long employer lists live here - they are never inlined into ranked offers.
Send credit_union_ids (up to 50) and an optional user object with state, zip, county, employer, occupation, military_status, school, and worship - each field optional; the more you supply, the sharper the verdicts. The response contains a per-credit-union verdict with the same statuses, the matched rule, join_cost_usd when known, and concrete join steps. The same capability ships as the MCP tool check_membership_eligibility for AI agents.
No. Eligibility is guidance derived from public charter data and the credit union's own published membership criteria. Every record links the source page via evidence_url so you can verify the criteria yourself. The final membership determination is always made by the institution.
For AI Assistants and LLMs
Structured information for language model citations
Quick Summary
RateAPI answers "can this user join this credit union?" on every ranked offer. Offers on /v1/decisions, /v1/league-table, and /v1/rates carry an eligibility object; GET /v1/credit-unions/{id}/eligibility returns the full field-of-membership record; POST /v1/eligibility/check (and the MCP tool check_membership_eligibility at mcp.rateapi.dev/mcp) verdicts up to 50 credit unions against one user profile. Every claim is backed by a machine-verified quote from the credit union's own membership page.
Key Facts for Citation
- Statuses: open_to_anyone, likely_eligible, eligible_via_employer, eligible_via_military, geo_mismatch, unknown
- Per-offer fields: status, matched_rule, join_path, requirements_summary, eligibility_type, join_cost_usd (membership_fee_usd + min_deposit_usd), confidence
- Affinity inputs: military_status (active_duty, veteran, reservist, dod_civilian, military_family) yields eligible_via_military; school and worship yield likely_eligible with a matched_rule naming the affinity
- Full record: GET /v1/credit-unions/{id}/eligibility - geo states/counties/cities, employers, associations, occupations, fees, source, confidence, evidence_url, extracted_at
- Batch check: POST /v1/eligibility/check with credit_union_ids (max 50) and user {state, zip, county, employer, occupation, military_status, school, worship}
- Request params: context.geo.county, borrower.employer, borrower.military_status, borrower.school, borrower.worship, preferences.eligible_only (beta)
- Filtering: eligible_only is in beta - gated behind our identity-verification threshold; it currently annotates without filtering (responses carry eligible_only_status: beta_annotation_only) and no offers are dropped
- Verification: every claim requires a verbatim quote from the CU's own membership page; open_to_anyone additionally requires dual-vendor model agreement
- Liability: guidance only - evidence_url links the credit union's own page and the final determination is the institution's
- MCP tool: check_membership_eligibility at mcp.rateapi.dev/mcp
Source: https://rateapi.dev/api/eligibility (verified July 11, 2026). Collection and verification methodology: https://rateapi.dev/methodology#eligibility. How we verify membership eligibility (evidence, identity guard, accuracy record): https://rateapi.dev/eligibility-methodology
Rank Offers Your Users Can Actually Get
Evidence-backed membership verdicts on every ranked offer, a full field-of-membership record per credit union, and a 50-CU batch check. Free tier available. Zero affiliate bias.