gankdat docs

← home · machine-readable spec: /openapi.json · MCP endpoint for agents: /mcp

quickstart (60 seconds, no js needed)

# 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

for ai agents

# 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

use in claude (connectors directory)

# 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 ↓