Get data
The data behind every section of this site, for your agents, models and apps: a REST API, an MCP server for AI agents, and SQL. One key, the same data.
Guides to the whole service are in Docs, and the API reference describes every call and lets you try it.
Your first call in three steps
- 1Register your companyFree, and it takes a minute. Register
- 2Create a keyOn your account page. It's shown once, with a ready-made call.
- 3CallFor example the next 90 days' holidays, with the key in $QL_KEY:
curl -H "Authorization: Bearer $QL_KEY" -H "Content-Type: application/json" \
"https://quicklookup.com/api/v1/services/037fd8b2-2918-5e6e-8bee-13bfec7c8326/query" \
-d '{"inputs":{"from":"2026-11-12T00:00:00Z","to":"2027-02-10T00:00:00Z","country_code":"IS"}}'Try a request
Paste an API key, pick a request and send it. The answer shows here with the headers that matter. Each try counts as one request, like any call.
The key stays in this page: never stored, sent only to us.
POST /api/v1/services/037fd8b2-2918-5e6e-8bee-13bfec7c8326/query
Every service and what it takes: the API reference and QuickLookup's guides.
SQL (Postgres-compatible), on Pro and Enterprise.
In detail
REST API
The API is QuickLookup's own, served here once your key and your tier's limits are checked. Three calls cover most needs: find a service, read its contract, query it.
1. Find a service
Search the catalogue by words, by type (time series, events, lookups) or by category.
curl -H "Authorization: Bearer $QL_KEY" \
"https://quicklookup.com/api/v1/catalog/services?q=weather"2. Read its contract
Each service lists the inputs it takes, the fields you can select, where its data comes from, and complete examples you can run as they are.
curl -H "Authorization: Bearer $QL_KEY" \
"https://quicklookup.com/api/v1/catalog/services/037fd8b2-2918-5e6e-8bee-13bfec7c8326"3. Query it
Send the inputs, choose the fields you need with select, filter with where. Here: Iceland's public holidays for the next 90 days.
curl -H "Authorization: Bearer $QL_KEY" -H "Content-Type: application/json" \
"https://quicklookup.com/api/v1/services/037fd8b2-2918-5e6e-8bee-13bfec7c8326/query" \
-d '{
"inputs": {
"from": "2026-11-12T00:00:00Z",
"to": "2027-02-10T00:00:00Z",
"country_code": "IS"
},
"order": "asc",
"limit": 100
}'A place and a day
Resolve almost any input (a name, an address, coordinates, an IP address, a phone number, an email or web address) to a place, then ask for everything known about that place on a day.
curl -H "Authorization: Bearer $QL_KEY" -H "Content-Type: application/json" \
"https://quicklookup.com/api/v1/resolve" -d '{
"input": "Harpa",
"countryCodes": [
"IS"
]
}'
curl -H "Authorization: Bearer $QL_KEY" -H "Content-Type: application/json" \
"https://quicklookup.com/api/v1/context/day" -d '{
"location": {
"resolve": "Harpa"
},
"date": "2026-11-12",
"timezone": "Atlantic/Reykjavik"
}'Events near a place
Every event feed searched at once, nearest first. Here: today's events within 2 km of central Reykjavík.
curl -H "Authorization: Bearer $QL_KEY" -H "Content-Type: application/json" \
"https://quicklookup.com/api/v1/events/search" -d '{
"from": "2026-11-12T00:00:00Z",
"to": "2026-11-13T00:00:00Z",
"near": {
"latitude": 64.1466,
"longitude": -21.9426,
"radiusKm": 2
},
"order": "distance_asc",
"limit": 50
}'From Python
import os, httpx
api = httpx.Client(
base_url="https://quicklookup.com/api/v1",
headers={"Authorization": f"Bearer {os.environ['QL_KEY']}"},
)
# Hourly weather for a point in Reykjavík, today
body = {
"inputs": {"from": "2026-11-12T00:00:00Z", "to": "2026-11-13T00:00:00Z",
"lat": 64.1466, "lon": -21.9426},
"limit": 100,
}
rows, cursor = [], None
while True:
page = api.post("/services/84451ef4-fc70-5f94-8346-01e2a5e69f5f/query",
json={**body, "cursor": cursor}).raise_for_status().json()
rows += page["items"]
cursor = page.get("nextCursor")
if not cursor:
break
print(len(rows), "rows")Paging and caching · Errors
Answers come in pages of up to 10,000 rows. Pass nextCursor back unchanged until it is null. Responses carry an ETag: send it back as If-None-Match and an unchanged answer returns 304 with no body.
| 401 | missing_key | No key was sent. Send it as Authorization: Bearer YOUR_KEY. |
| 401 | invalid_key | The key is wrong, revoked or expired. Create a new one on your account. |
| 429 | too_many_attempts | Too many wrong keys from one address. Wait a minute. |
| 429 | rate_limited | Too many requests in a second or a minute. Wait as Retry-After says. |
| 429 | too_many_at_once | Too many REST requests in progress at once. Wait for an answer before sending the next. |
| 429 | mcp_busy | Too many MCP tool calls in progress at once. |
| 429 | mcp_protocol_limited | Over 120 MCP messages a minute (lists, discovery). Keep the tool list. |
| 429 | quota_exceeded | The month's requests (and extra credits) are used. Buy more or change tier; the quota resets on the 1st (UTC). |
| 403 | period_not_in_tier | A date outside your tier's period. Higher tiers reach further. |
| 403 | premium_data | Premium third-party data, only under its provider's licence (Enterprise). |
| 403 | mcp_not_in_tier | MCP isn't part of your tier. |
| 503 | unavailable | QuickLookup didn't answer. Try again shortly; it costs no request. |
MCP for AI agents
QuickLookup's MCP server gives agents the same data as the REST API, through read-only tools. It speaks Streamable HTTP; your API key is the credential.
Claude Code
claude mcp add --transport http quicklookup https://quicklookup.com/mcp \
--header "Authorization: Bearer $QL_KEY"Clients configured with JSON (Claude Desktop, Cursor and others)
{
"mcpServers": {
"quicklookup": {
"type": "http",
"url": "https://quicklookup.com/mcp",
"headers": {
"Authorization": "Bearer <your API key>"
}
}
}
}Tools
- list_data_services
- Search the catalogue.
- get_data_service
- Read a service's contract and its runnable examples.
- query_data_service
- Query a service.
- search_nearby_events
- Events near a point, across every feed.
- list_time_series_families
- Find families of related time series.
- get_time_series_family
- Inspect a family and its series.
- list_saved_context, get_saved_context, resolve_saved_context, query_saved_event_context
- Saved places and their context.
SQL
SQL over the same data, through our semantic layer, for Pro and Enterprise: connect any Postgres or MySQL client, BI tool or notebook. for the connection details.
Limits, licences and attribution
A request is a REST call or an MCP tool call that QuickLookup answered. Refused calls and failures on our side cost nothing, nor do MCP messages like the tool list. They're counted per company each month (UTC); see pricing.
| Limit | Free | Basic | Pro | Enterprise |
|---|---|---|---|---|
| Requests a month | 1,000 | 25,000 | 250,000 | By agreement |
| A minute | 10 | 60 | 300 | 1,200 |
| A second | 1 | 5 | 20 | 50 |
| REST in progress at once | 1 | 3 | 10 | By agreement |
| MCP tool calls at once | 1 | 3 | 20 | Unlimited |
Every answer carries the limits and what's left of them:
- X-Quota-Limit · X-Quota-Remaining
- the month's requests and how many are left
- X-Credits-Remaining
- extra credits left, once the month's are used
- X-RateLimit-Limit · X-RateLimit-Remaining
- requests a minute and how many are left
- RateLimit-Policy
- the second's and the minute's allowance
- Retry-After
- seconds until you may try again, with every 429
- Several sources require attribution wherever you show their data. Sources lists which, and the exact wording.
- Premium third-party data, such as Trading Economics' markets and indicators, is available only where that provider's licence allows it. Ask us about Enterprise.
A key in a minute
Register your company free: a year back and a week ahead, every calendar whole and a REST key at once. No card.