ROLLIN API reference.
REST API over HTTPS. JSON request and response bodies. Authentication via the X-Api-Key header. Eight endpoints. Free tier covers 1,000 requests per month with no credit card. Starter tier ($9.99/mo) unlocks full address precision, photos, hours, and 5,000 monthly requests.
Base URL: https://joinrollin.com/api/v1. Full OpenAPI 3.1 spec at /openapi.yaml.
No key yet?
Free tier — 1,000 requests/month, no credit card.
Authentication
Send your API key in the X-Api-Key header on every request. Keys start with a tier prefix: rlf_ (free), rls_ (starter), rld_ (developer), rlb_ (business), rle_ (enterprise).
curl -H "X-Api-Key: $ROLLIN_API_KEY" "https://joinrollin.com/api/v1/health" A missing or invalid key returns 401 Unauthorized. A revoked or expired key returns 403 Forbidden.
Errors
Errors return standard HTTP status codes with a JSON body of the form { "error": { "code": "…", "message": "…" } }.
| Code | Meaning | When |
|---|---|---|
| 400 | Bad Request | Missing or malformed parameters. |
| 401 | Unauthorized | Missing or invalid X-Api-Key. |
| 402 | Payment Required | Endpoint requires a higher tier. |
| 403 | Forbidden | Key revoked, expired, or origin-locked. |
| 404 | Not Found | Resource ID does not exist. |
| 429 | Too Many Requests | Rate limit hit. See Retry-After. |
| 500 | Internal Error | Retry with exponential backoff. |
Rate limits
Per-minute and per-month limits scale with tier. Hitting a limit returns 429 with a Retry-After header (seconds). The /v1/health endpoint is unauthenticated and uncounted.
| Tier | Per minute | Per month | Price |
|---|---|---|---|
| Free | 10 | 1,000 | $0 |
| Starter | 30 | 5,000 | $9.99 |
| Developer | 60 | 50,000 | $29 |
| Business | 200 | 500,000 | $149 |
Pagination
List endpoints accept a limit parameter (default 20, max 100) and return a next_cursor field when more results are available. Pass the cursor back as cursor to fetch the next page.
/api/v1/locations Free+ Search venues by location, query, or both. Results are pre-sorted by accessibility score, descending.
Query parameters
| Parameter | Type | Description |
|---|---|---|
| lat | float | Latitude. Required when searching by location. |
| lng | float | Longitude. Required when searching by location. |
| radius | int | Search radius in meters. Default 500. |
| city | string | Filter by city name. Use with state. |
| state | string | Two-letter state code, e.g. NY. |
| q | string | Free-text query against name and category. |
| min_score | int | Filter by minimum accessibility score (0–100). |
| category | string | Filter by category: restaurant, bar, lodging, venue. |
| limit | int | Max results per page. Default 20, max 100. |
curl -H "X-Api-Key: $ROLLIN_API_KEY" \ "https://joinrollin.com/api/v1/locations?lat=40.7580&lng=-73.9855&radius=500&min_score=70&limit=20"
{
"locations": [
{
"id": "abc-123-def",
"name": "Devoción",
"category": "cafe",
"score": 86,
"address": "69 Grand St, Brooklyn, NY 11249",
"lat": 40.7148,
"lng": -73.9614,
"wheelchair_entry": true,
"accessible_restroom": true,
"level_entry": true,
"accessible_parking": false,
"wide_aisles": true,
"elevator": null
}
],
"count": 20,
"next_cursor": "eyJvZmZzZXQiOjIwfQ=="
}/api/v1/locations/:id Free+ (premium fields Starter+) Full venue detail including all six accessibility features, address, photos (Starter+), hours (Starter+), and verification status.
curl -H "X-Api-Key: $ROLLIN_API_KEY" \ "https://joinrollin.com/api/v1/locations/abc-123-def"
{
"id": "abc-123-def",
"name": "Devoción",
"score": 86,
"category": "cafe",
"cuisine_type": "coffee",
"address": "69 Grand St",
"city": "Brooklyn",
"state": "NY",
"phone": "+17184843090",
"website": "https://devocion.com",
"hours": { "mon": "7-19" },
"features": {
"wheelchair_entry": true,
"accessible_restroom": true,
"level_entry": true,
"accessible_parking": false,
"wide_aisles": true,
"elevator": null
},
"verified": true,
"last_updated": "2026-04-22T18:13:00Z"
}/api/v1/regions Free+ Coverage stats — 15 US states, 48 metro regions, total scored venues per region.
/api/v1/score/:id Business+ Detailed score breakdown — per-feature value, weight, and confidence.
curl -H "X-Api-Key: $ROLLIN_API_KEY" \ "https://joinrollin.com/api/v1/score/abc-123-def"
{
"id": "abc-123-def",
"score": 86,
"breakdown": {
"wheelchair_entry": { "value": true, "weight": 22, "confidence": 0.95 },
"accessible_restroom": { "value": true, "weight": 22, "confidence": 0.88 },
"level_entry": { "value": true, "weight": 18, "confidence": 0.92 }
}
}/api/v1/feedback Developer+ Submit accessibility feedback or corrections for a venue. Reviewed by the ROLLIN team.
Body
| Field | Type | Description |
|---|---|---|
| location_id required | string | Venue ID. |
| type required | enum | One of: correction, missing, verify. |
| message | string | Plain-text description. Max 2,000 chars. |
curl -X POST -H "X-Api-Key: $ROLLIN_API_KEY" \ -H "Content-Type: application/json" \ -d '{"location_id":"abc-123","type":"correction","message":"..."}' \ "https://joinrollin.com/api/v1/feedback"
/api/v1/usage Free+ Current usage stats for the authenticated key. Shows used vs. limit across the per-minute, per-day, and per-month windows, plus the current tier.
curl -H "X-Api-Key: $ROLLIN_API_KEY" \ "https://joinrollin.com/api/v1/usage"
{
"tier": "starter",
"minute": { "used": 3, "limit": 30 },
"day": { "used": 42, "limit": 167 },
"month": { "used": 1284, "limit": 5000 }
}/api/v1/trial/* No key · IP-rate-limited Public trial proxy. No API key required. IP-rate-limited to 5 requests, optionally tracked per-session via the X-Trial-Session header. Mirrors the regular endpoints under /v1/trial/locations, /v1/trial/locations/:id, /v1/trial/score/:id, /v1/trial/regions, /v1/trial/feedback, and /v1/trial/health with free-tier restrictions applied. Used by the MCP server’s trial mode.
# Public trial proxy — no key, IP-rate-limited (5 calls) curl "https://joinrollin.com/api/v1/trial/locations?lat=40.7580&lng=-73.9855"
/api/v1/health No auth · uncounted Status check. No API key required, doesn't count against quota. Use for liveness probes.
curl "https://joinrollin.com/api/v1/health"{ "status": "ok", "version": "1.4.0" }SDKs
Python — auto-generated by Stainless. Type-safe, async support, pagination built in.
OpenAPI 3.1 — full spec. Generate clients in any language with openapi-generator or Stainless.
TypeScript and Go SDKs are on the roadmap.
MCP server
The ROLLIN MCP server gives Claude Desktop, Cursor, VS Code, and any MCP-compatible client direct access to ROLLIN data through five tools. One npx command — no install.
Ready to ship?
Free tier — 1,000 requests/month, no credit card. Starter $9.99/mo when you outgrow it.