Work with this as data
Every API here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for apis
7 MCP tools reach this
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.
Call it yourself
curl for this page
This API
curl "https://apis.io/api/v1/apis/gankdat-com:gankdat-com-platform-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"
Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
OpenAPI Specification
openapi: 3.2.0
info:
title: gankdat Platform API
version: 0.28.3
description: Clean-JSON access to UK planning applications, UK procurement notices, UK contract awards (Contracts Finder), UK sanctions designations, EU procurement notices (TED), US federal exclusions (SAM.gov), UK corporate insolvency notices, UK new company incorporations, UK food hygiene ratings (FSA), UK licensed visa sponsors (Home Office), Charities in England & Wales (Charity Commission), Regulated care locations in England (CQC), Schools and colleges in England (GIAS + Ofsted), NHS organisations in England (ODS register), UK trade mark applications published for opposition (Trade Marks Journal), Licensed gambling operators in Great Britain (Gambling Commission register), UK company lookup (Companies House) — one schema across every dataset, from official open-data feeds. Built for developers and AI agents (native MCP + x402). Licence and personal-data posture are stated per dataset in the terms (OGL v3 sources; Blind Mode where stated).
contact:
name: gankdat
url: https://gankdat.com
termsOfService: https://gankdat.com/terms
servers:
- url: https://gankdat.com
description: Production
tags:
- name: Platform
description: Health and discovery
paths:
/v1/health:
get:
operationId: health
summary: Liveness check
tags:
- Platform
responses:
'200':
description: Service is up
content:
application/json:
schema:
type: object
properties:
ok:
type: boolean
const: true
data:
type: object
properties:
status:
type: string
version:
type: string
required:
- status
- version
required:
- ok
- data
/v1/data:
get:
operationId: list_sources
summary: List available data sources
tags:
- Platform
responses:
'200':
description: Registered sources
content:
application/json:
schema:
type: object
properties:
ok:
type: boolean
const: true
data:
type: array
items:
type: object
properties:
slug:
type: string
title:
type: string
description:
type: string
supported_params:
type: array
items:
type: string
refresh_cron:
type: string
credit_cost:
type: number
change_feed:
description: Path of the daily change feed (register datasets), else null
type:
- string
- 'null'
notice:
description: A dated note while the origin is paused or emptied (last snapshot served), else null
type:
- string
- 'null'
required:
- slug
- title
- description
- supported_params
- refresh_cron
- credit_cost
- change_feed
- notice
required:
- ok
- data
/v1/keys:
delete:
operationId: revoke_key
summary: Revoke the presented API key (self-serve)
tags:
- Platform
security:
- bearerAuth: []
responses:
'200':
description: Key revoked
content:
application/json:
schema:
type: object
properties:
ok:
type: boolean
const: true
data:
type: object
properties:
revoked:
type: boolean
required:
- revoked
required:
- ok
- data
'401':
description: Missing, unknown, or revoked API key
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorEnvelope'
/v1/usage:
get:
operationId: get_usage
summary: Current-period credit usage for the presented key (free to call)
tags:
- Platform
security:
- bearerAuth: []
responses:
'200':
description: Usage summary
content:
application/json:
schema:
type: object
properties:
ok:
type: boolean
const: true
data:
type: object
properties:
plan:
type: string
period:
type: string
used:
type: number
granted:
type: number
remaining:
type: number
alerts:
type: array
items:
type: string
required:
- plan
- period
- used
- granted
- remaining
- alerts
required:
- ok
- data
'401':
description: Missing, unknown, or revoked API key
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorEnvelope'
/v1/billing/checkout:
post:
operationId: create_checkout
summary: Create a Stripe Checkout session for a paid plan
tags:
- Platform
security:
- bearerAuth: []
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
plan:
type: string
required:
- plan
responses:
'200':
description: Checkout session created
content:
application/json:
schema:
type: object
properties:
ok:
type: boolean
const: true
data:
type: object
properties:
url:
type:
- string
- 'null'
plan:
type: string
required:
- url
- plan
required:
- ok
- data
'400':
description: Unknown plan
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorEnvelope'
'401':
description: Missing, unknown, or revoked API key
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorEnvelope'
'503':
description: Billing not configured
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorEnvelope'
/v1/billing/paypal/orders:
post:
operationId: create_paypal_order
summary: 'Buy a one-off credit pack with PayPal (sandbox): returns the approval URL'
description: Credit packs (pack_1k, pack_5k, pack_20k; GET /v1/billing/paypal/packs lists them) add to a top-up balance spent once the monthly plan allowance is gone; they never expire. The order is captured when the buyer returns from PayPal, or by POST /v1/billing/paypal/orders/{id}/capture. PayPal sandbox only — no live money moves.
tags:
- Platform
security:
- bearerAuth: []
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
pack:
type: string
required:
- pack
responses:
'200':
description: Order created; the buyer approves at approve_url
content:
application/json:
schema:
type: object
properties:
ok:
type: boolean
const: true
data:
type: object
properties:
order_id:
type: string
approve_url:
type: string
pack:
type: string
credits:
type: integer
minimum: -9007199254740991
maximum: 9007199254740991
amount_usd:
type: string
next:
type: string
required:
- order_id
- approve_url
- pack
- credits
- amount_usd
- next
required:
- ok
- data
'400':
description: Unknown pack
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorEnvelope'
'401':
description: Missing, unknown, or revoked API key
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorEnvelope'
'503':
description: Credit packs not configured, or PayPal unavailable
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorEnvelope'
/v1/billing/paypal/orders/{id}/capture:
post:
operationId: capture_paypal_order
summary: Capture an approved PayPal order and add its credits (idempotent)
tags:
- Platform
security:
- bearerAuth: []
parameters:
- name: id
in: path
required: true
schema:
type: string
description: The order_id from create_paypal_order
responses:
'200':
description: Order captured (status completed) or already captured (already_completed)
content:
application/json:
schema:
type: object
properties:
ok:
type: boolean
const: true
data:
type: object
properties:
order_id:
type: string
status:
type: string
enum:
- completed
- already_completed
credits_added:
type: integer
minimum: -9007199254740991
maximum: 9007199254740991
topup:
type: integer
minimum: -9007199254740991
maximum: 9007199254740991
required:
- order_id
- status
- credits_added
- topup
required:
- ok
- data
'401':
description: Missing, unknown, or revoked API key
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorEnvelope'
'404':
description: No such order on this account
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorEnvelope'
'409':
description: 'The buyer has not approved the order yet (code: payment_required)'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorEnvelope'
'503':
description: Credit packs not configured, or PayPal unavailable
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorEnvelope'
/v1/billing/portal:
get:
operationId: billing_portal
summary: Get a Stripe customer-portal link (manage/cancel subscription)
tags:
- Platform
security:
- bearerAuth: []
responses:
'200':
description: Portal link
content:
application/json:
schema:
type: object
properties:
ok:
type: boolean
const: true
data:
type: object
properties:
url:
type: string
required:
- url
required:
- ok
- data
'401':
description: Missing, unknown, or revoked API key
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorEnvelope'
'404':
description: No billing account for this key
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorEnvelope'
'503':
description: Billing not configured
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorEnvelope'
/v1/waitlist:
post:
operationId: join_waitlist
summary: Join the launch waitlist (email only, GDPR-minimal)
tags:
- Platform
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
email:
type: string
format: email
pattern: ^(?:[A-Za-z0-9_'+\-]+\.)*[A-Za-z0-9_'+\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$
source:
type: string
required:
- email
responses:
'200':
description: Subscribed (idempotent)
content:
application/json:
schema:
type: object
properties:
ok:
type: boolean
const: true
data:
type: object
properties:
subscribed:
type: boolean
required:
- subscribed
required:
- ok
- data
'400':
description: Invalid request body
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorEnvelope'
'429':
description: Rate limit exceeded
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorEnvelope'
/v1/feedback:
post:
operationId: send_feedback
summary: Send product feedback (public; email optional, only for replies)
tags:
- Platform
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
message:
type: string
minLength: 3
maxLength: 2000
email:
type: string
format: email
pattern: ^(?:[A-Za-z0-9_'+\-]+\.)*[A-Za-z0-9_'+\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$
page:
type: string
maxLength: 200
required:
- message
responses:
'200':
description: Feedback stored
content:
application/json:
schema:
type: object
properties:
ok:
type: boolean
const: true
data:
type: object
properties:
received:
type: boolean
required:
- received
required:
- ok
- data
'400':
description: Invalid request body
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorEnvelope'
'429':
description: Rate limit exceeded
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorEnvelope'
components:
schemas:
ErrorEnvelope:
type: object
properties:
ok:
type: boolean
const: false
error:
type: object
properties:
code:
type: string
enum:
- bad_request
- unauthorized
- forbidden
- payment_required
- quota_exceeded
- not_found
- gone
- rate_limited
- unavailable
- internal
message:
type: string
docs_url:
type: string
details: {}
required:
- code
- message
- docs_url
required:
- ok
- error
securitySchemes:
bearerAuth:
type: http
scheme: bearer
description: API key created from your account dashboard (sign in at /account), sent as a bearer token.
externalDocs:
description: Quickstart, interactive reference, llms.txt
url: https://gankdat.com/docs