← home · machine-readable spec: /openapi.json ·
MCP endpoint for agents: /mcp
# 1. Sign in at https://gankdat.com/account (email magic link, no password)
# and create a key from your dashboard (250 req/mo free, shown once)
# 2. Query procurement notices by value and CPV code (filters combine with AND)
curl -H "Authorization: Bearer fapi_..." \
"https://gankdat.com/v1/data/uk-tenders?value_amount_min=1000000&cpv_codes=45&status=active"
# 3. Query planning applications
curl -H "Authorization: Bearer fapi_..." \
"https://gankdat.com/v1/data/uk-planning?authority=109&q=extension&per_page=5"
# 4. What changed since a date — registers diff themselves daily (charities, care
# locations, schools, NHS, sponsors, food hygiene, exclusions, trade marks, gambling licences)
curl -H "Authorization: Bearer fapi_..." \
"https://gankdat.com/v1/changes/uk-charities?since=2026-09-01&change=added"
# …with the dataset's own filters: a trade-mark watch on one Nice class and a word
curl -H "Authorization: Bearer fapi_..." \
"https://gankdat.com/v1/changes/uk-trademark-journal?classes=09&q=northwind&since=2026-09-01"
# 5. Check your usage (free)
curl -H "Authorization: Bearer fapi_..." https://gankdat.com/v1/usage
# MCP (Streamable HTTP) — tools: list_sources, get_usage, get_changes (register deltas), and query_<dataset> for each dataset (query_uk_tenders, query_eu_ted, query_sam_exclusions, …)
"mcpServers": { "gankdat": {
"url": "https://gankdat.com/mcp",
"headers": { "Authorization": "Bearer fapi_..." } } }
# No key yet? An agent can sign its user up without a browser (no key needed for these two):
# MCP: request_api_key {email} → show the user the code → claim_api_key {request_id, claim_secret}
# REST:
curl -X POST https://gankdat.com/v1/auth/agent-signup -H "content-type: application/json" \
-d '{"email":"you@example.com","client_name":"my-agent"}' # user gets a one-click approval email
curl -X POST https://gankdat.com/v1/auth/agent-signup/claim -H "content-type: application/json" \
-d '{"request_id":"…","claim_secret":"fsig_…"}' # "pending" until approved, then the key (once)
# x402 pay-per-request (no account): GET /x402/data/uk-tenders → HTTP 402 → pay → retry
# Claude (web, desktop, mobile, Code): Settings → Connectors → add "gankdat" from the directory,
# or "Add custom connector" with the URL below. Every tool works straight away as a PREVIEW:
# up to 5 rows per call, 20 calls per day, no account.
https://gankdat.com/mcp
# Ask Claude things like:
# "Which UK tenders over £1m in CPV 45 are open right now?" → query_uk_tenders
# "Has any charity been removed from the register this week?" → get_changes
# "Is <company> a licensed visa sponsor?" → query_uk_sponsors
# Full pages and your plan's credits: say "sign in to gankdat" (the connect_account tool) or
# keep going until the preview runs out — Claude shows a Connect button, you sign in with your
# email (a free account with 250 credits/month is created if needed, no card) and approve once.
# That is standard OAuth (PKCE, no client secret): Cursor, ChatGPT and any MCP client that
# follows the 401 challenge get the same flow. The connection appears as a key named
# oauth:<client> at /account — revoke it there to disconnect.
# Clients without OAuth: request_api_key / claim_api_key get a key from inside the chat, or
# create one at /account and send it as "Authorization: Bearer fapi_..." (config above).
Every response uses the same envelope: {"ok":true,"data":…,"meta":…} or
{"ok":false,"error":{"code","message","docs_url"}}. Errors carry stable codes
(unauthorized, quota_exceeded, rate_limited, …) and
validation failures list per-field details. Full reference below ↓