Skip to content
FreedomRankings

Developers

FreedomRankings API

A REST API over the same civic dataset that powers the site — state freedom rankings, official profiles, voting records, and campaign finance — returned as JSON. API access is included with every plan and scales with your subscription.

Create an API key →

Authentication

Every request must carry your API key as a bearer token. Create and manage keys from your profile. Keep keys secret — they grant your plan’s access. The full key is shown only once at creation.

curl https://freedomrankings.com/api/v1/rankings \
  -H "Authorization: Bearer fr_live_your_key_here"

Plans & rate limits

PlanRequests / dayBurst / minActive keysMax page size
Citizen10020150
Supporter1,000603100
Pro10,00012010200

Responses carry RateLimit-Limit, RateLimit-Remaining, and RateLimit-Reset headers. Exceeding a window returns 429 with Retry-After. Compare plans →

Endpoints

EndpointDescriptionMin plan
GET /api/v1/meYour key’s tier, quota, and scopes.Citizen
GET /api/v1/rankingsAll states ranked, with category scores. Paginated.Citizen
GET /api/v1/states/{id}One state by two-letter id, with category details.Citizen
GET /api/v1/officials/{id}Core profile, role, scores, committees.Supporter
GET /api/v1/officials/{id}/votesVote records, newest first. Paginated.Supporter
GET /api/v1/compare?states=CA,TXCompare states side by side.Supporter
GET /api/v1/officials/{id}/financeNet-worth band, total raised, donor totals.Pro
GET /api/v1/officials/{id}/donorsFull itemized donor list. Paginated.Pro

Conventions

  • Success responses are { "data": …, "meta": … }; errors are { "error": "code", "message": … }.
  • List endpoints take ?page= and ?pageSize= (clamped to your plan’s max).
  • Large integers (net worth, totals) are returned as strings to stay JSON-safe.
  • Calling an endpoint above your plan returns 403 scope_not_allowed with the requiredTier.