Accessibility data for anything you build.
Accessibility data over REST. Get a key, send it in one header, and query 105,000+ scored venues from curl, JavaScript or Python.
1,000 requests a month free · No credit card · OpenAPI 3.1Example response. The field names and the shape are the live ones.
Use the API, the Python SDK or the MCP server.
A 0 to 100 score, not a checkbox.
Every venue carries a composite accessibility score, and we know of no other U.S. dataset that publishes one. Multi-source data and community feedback feed every score, and the breakdown shows how much is actually recorded instead of one inflated number.
Put access into the product you already have.
GET /v1/locations rollin-mcp-server GET /v1/locations?radius= GET /v1/score/:id GET /v1/changes POST /v1/feedback License the dataset instead of compiling it.
The Business tier delivers scored, multi-source data with feature breakdowns and a confidence level, built for compliance dashboards, procurement scoring and travel itinerary features. A 105,000+ venue baseline.
- Score breakdowns by featureEvery feature, with how much of it is actually recorded.
- Changes feedStay in sync without re-pulling whole regions.
- 500,000 requests a month200 a minute, with higher limits on contract.
- White-label availableShow the data under your brand.
- Custom MSAProcurement-friendly terms and dedicated onboarding.
Build with the ROLLIN API.
Everything from your first request to production. Schemas and response shapes live in the API reference.
Three steps to your first response.
- 1Get a key The free tier is 1,000 requests a month with no credit card. Confirm your email and the key turns on.
- 2Authenticate Send your key in the X-Api-Key header. Keep it in environment variables and never commit secrets.
- 3Make a call Request /v1/locations with a lat and lng. You get scored venues back as JSON.
Send your key in X-Api-Key.
Pull the key from environment variables. Never commit secrets. The unauthenticated /v1/health endpoint is the easiest sanity check.
The four calls most integrations start with.
Search nearby venues
Pass a lat and lng with a radius in miles, filter by minimum score, and page with limit and cursor. Results come back nearest first, or by score if you ask for it.
Get full venue detail
Retrieve one venue by ID: the score, all six features, the address, the verified flag and last_updated, plus phone, website and sensory values from Starter and photo_url from Developer.
Submit feedback
POST a correction, an accurate confirmation or an inaccurate report. The ROLLIN team reviews every submission, and accurate reports feed back into the score.
Check your quota
Returns current usage across the per-minute, per-day and per-month windows for your key, plus the current tier.
Give your AI assistant real accessibility data.
rollin-mcp-server works with Claude, ChatGPT and Gemini. Add it to your client's config with your key and the assistant can search and read scored venues on its own. Full setup is on the MCP page.
Ten endpoints cover the whole surface.
The short version. Parameters, bodies and response shapes live in the full reference.
/api/v1/locations Search by coordinates and radius, or by bbox viewport. Filter on score, features, category and cuisine. Paginated. /api/v1/locations/:id Full venue detail: score, features, address, sensory values. /api/v1/locations/batch Up to 50 venues by ID in one request. /api/v1/changes Venues changed in the last N days. Sync feed.Developer and above /api/v1/regions Coverage by state. /api/v1/score/:id Score breakdown by feature.Business and above /api/v1/feedback Submit an accessibility correction.Developer and above /api/v1/usage Current key usage across the rate-limit windows. /api/v1/trial/* Public trial proxy. IP rate limited, no key required. /api/v1/health API status. No auth, no quota cost. Limits scale with your plan.
Three windows run at once: per minute, per day and per month. Hit one and you get a 429 with a Retry-After header. Calls to /v1/health are never counted. Change tiers any time in the portal.
Standard HTTP, structured payloads.
Every error returns success: false and an error object with a code and a message. There is no 402 anywhere in the API: a tier gate is a 403.
INVALID_PARAMSMissing or malformed parameters, or a body that is not valid JSON. INVALID_API_KEYNo key, a key that fails the format check, a revoked key, or an expired one. TIER_REQUIREDThe endpoint or the filter needs a higher plan. LOCATION_NOT_FOUNDThat venue ID does not exist, or it has been removed. METHOD_NOT_ALLOWEDWrong HTTP method for the endpoint. FEEDBACK_PENDINGYou already have feedback pending for that venue. RATE_LIMIT_MINUTEA minute, day or month window is full. Honour Retry-After. INTERNAL_ERROROur end. Retry with exponential backoff. Before you ship to real users.
- Keep keys in env vars, never in source Set
ROLLIN_API_KEYin your platform's secret store (Netlify env, Vercel env, Doppler, 1Password). Never commit the key. - Honour 429 with Retry-After Rate limit hits return
429with aRetry-Afterheader in seconds. Wait that long before retrying, and use exponential backoff with jitter for 5xx errors. - Cache aggressively client-side Venue data changes daily to monthly, not by the second. Cache
/v1/locations/:idresponses for 24 hours./v1/usageshows the quota you have left. - Surface scores honestly to users A score of 60 is not the same as a score of 90. Show the number rather than a binary yes or no, and link to ROLLIN for the full breakdown.
- Forward corrections to /v1/feedback If your users tell you a venue's data is wrong, send it back with
POST /v1/feedback(Developer and above). It makes the score more accurate for everyone. - Plan for the limits before launch day There is a daily cap as well as a monthly one: Free is 33 a day, Starter 167. Estimate volume from your projected daily actives, and if it lands above 5,000 a month move to Starter before launch day.
API reference
REST over HTTPS with JSON request and response bodies. Authenticate with the X-Api-Key header. Ten endpoints, and one key that also works with the MCP server.
Authentication
Send your key in the X-Api-Key header on every request. Keys carry a tier prefix: rlf_ for Free, rls_ for Starter, rld_ for Developer, rlb_ for Business and rle_ for Enterprise. A missing, malformed, revoked or expired key returns 401. An endpoint or a filter above your plan returns 403.
Errors
Errors use standard HTTP status codes with a JSON body carrying success: false and an error object with a code and a message. Rate-limit bodies add retry_after in seconds.
Rate limits
Three windows run at once: per minute, per day and per month. Hitting any of them returns 429 with a Retry-After header in seconds. Calls to /v1/health are never counted.
Pagination
List endpoints accept limit (default 20, max 50 on /v1/locations, max 500 on /v1/changes) and return next_cursor when more results exist. Pass it back as cursor for the next page.
Ten endpoints.
Search venues by coordinates or a bounding box, then filter. Sorted by distance by default, and the response carries a cursor when there is another page.
Query parametersFull venue detail: the six accessibility features, the address, the verified flag and last_updated. Phone, website and sensory values from Starter. photo_url from Developer. data_confidence on Business. Free receives no feature set and a locked sensory stub.
Up to 50 venues by ID in one round trip, with the same shape and tier gating as detail. IDs must be UUIDs; anything else is dropped, so compare requested against count.
BodyIncremental sync feed of venues whose profile or sensory data changed inside the window. Poll it daily instead of re-pulling whole regions.
Query parametersCoverage by state: how many scored venues each one holds, and a coverage level for each. total_locations carries the live corpus size, so read it rather than hard-coding a number.
Score breakdown: each feature’s recorded value, a qualitative impact label, and whether it is one of the four critical features. Point weights are not exposed.
Submit a correction for a venue. Every submission lands as pending and is reviewed by the ROLLIN team. One pending submission per venue, and 10 submissions per key per 24 hours.
BodyUsage for the authenticated key across the minute, day and month windows, plus the current tier.
Public trial proxy with no API key, rate limited per IP to 5 requests a minute and 30 a day, with the radius capped at 5 miles and 5 results a search. It mirrors locations, detail, score, regions, feedback and health under free-tier restrictions, and the MCP server’s trial mode runs on it.
Status check for liveness probes. No key required, and it is never counted against your quota. The response also carries a data.locations count.
SDKs and MCP
pip install git+https://github.com/stainless-commons/rollin-python.git MCP · HOSTED Hosted MCP server joinrollin.com/api/mcp MCP · NPM rollin-mcp-server npx -y rollin-mcp-server OPENAPI OpenAPI 3.1 spec /openapi.yaml Accessibility data, inside your AI.
Give Claude, Cursor, VS Code or any MCP client five tools and 105,000+ scored venues. Try it with no key: the trial proxy allows 5 requests a minute.
Install in about a minute
Get it with your key filled inclaude_desktop_config.json Mac: ~/Library/Application Support/Claude/. Windows: %APPDATA%\Claude\. Paste, save and restart Claude.
Terminal Set ROLLIN_API_KEY in your shell first, then run this once.
.cursor/mcp.json Add it to your repo root for one project, or ~/.cursor/mcp.json for all of them. Restart Cursor.
.vscode/mcp.json VS Code uses "servers", not "mcpServers". Reload the window after saving.
https://joinrollin.com/api/mcp Nothing to install. Works in any client that supports remote MCP servers, including ChatGPT connectors. Send your key as a header.
Paste one prompt. Your agent sets it up.
Works in Claude Code, Cursor, VS Code, Windsurf, Lovable, Replit and other coding agents. It picks the right config for the tool it is running in, asks for your key, then tests the connection.
Five tools
search_locations(lat, lng, q, radius, min_score, features, lighting, limit) Search venues around a point. lat and lng are required; everything else narrows the result. get_location_details(id) Full detail for one venue: score, all six features, address, photo URL and sensory values, subject to your tier. list_regions() Coverage by state, for scoping a search. check_health() API status and version. Never counted against your quota. submit_feedback(location_id, feedback_type, features, comment) Send a correction for the ROLLIN team to review. Developer and above Start free. Upgrade when you ship.
One key works across the REST API and the MCP server. Month to month, and you can change plans any time.
Common questions
How do I get a key?
Pick a plan and enter your email. A free key is issued straight away and switches on when you click the confirmation link we email. Paid plans go through Stripe Checkout, and the key is issued once payment completes.
Do I need a credit card for the Free tier?
No. The free tier is 1,000 requests a month with no card on file. We will not move you to a paid plan when you hit the limit; you get a 429 and an upgrade nudge.
What is the difference between Free and Starter?
Free is 1,000 requests a month at reduced precision: coordinates rounded to about 1 km, the address trimmed to city and state, and the feature set, phone, website and sensory values withheld. Starter is 5,000 requests a month at full precision with those fields included. Most production apps need Starter.
How do paid plans get billed?
Stripe handles billing, and card details never touch our servers. Manage your subscription, update your card or cancel from the Stripe billing portal.
Can I switch tiers later?
Yes, from the billing portal, and the change takes effect immediately. Annual billing on Developer and above saves 20 percent.
I lost my key. What now?
Keys are shown once, when they are created. Use Manage billing and we will email a short-lived link to your billing portal. Rotating a key from the dashboard is not live yet, so write to hello@joinrollin.com and we will reissue.