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.
All 92 tools →
Call it yourself
curl for this page
This API
curl "https://apis.io/api/v1/apis/citeerbaar-nl:citeerbaar-nl-open-data-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: 3.2.0
info:
title: Citeerbaar en agent-laag Open data API
version: 1.2.0
description: 'De machineleesbare laag van citeerbaar.nl: JSON-endpoints met feiten, prijzen, antwoorden, beweringen, begrippen, entiteiten en wijzigingen, plus het MCP- en A2A-endpoint. Alle GET-endpoints zijn openbaar, zonder sleutel, met ETag en CORS. Fouten op de GET-endpoints en op onbekende adressen onder /api/ komen als application/problem+json (RFC 9457) met een vaste code en een hint; het MCP- en A2A-endpoint geven een JSON-RPC-foutobject. Wijzigingen staan in /api/changes.json onder tool_changes. Versies en uitfasering: de versie van de agent-laag staat in info.version, in /api/health.json en in serverInfo van de MCP-server. Een brekende wijziging, of het schrappen van een endpoint, veld of tool, kondigen we minimaal 90 dagen vooraf aan: in /api/changes.json onder tool_changes en met de headers Deprecation (RFC 9745) en Sunset (RFC 8594) op de betrokken antwoorden. Uitbreidingen, zoals nieuwe velden of endpoints, zijn niet brekend en komen zonder aankondiging.'
contact:
name: Citeerbaar
url: https://www.citeerbaar.nl/contact/
email: hello@citeerbaar.nl
license:
name: CC BY 4.0
identifier: CC-BY-4.0
servers:
- url: https://www.citeerbaar.nl/
tags:
- name: Open data
description: Alleen-lezen JSON, CC BY 4.0, bronvermelding naar source_page.
paths:
/api/facts.json:
get:
summary: Feiten-API
description: 'De harde feiten over Citeerbaar: diensten, prijzen, doorlooptijden, btw-status en bedrijfsgegevens.'
tags:
- Open data
responses:
'200':
description: 'OK. Zwakke ETag; met If-None-Match volgt 304. Cache-Control: max-age=300, stale-while-revalidate=600.'
content:
application/json:
schema:
type: object
required:
- _meta
- organization
- packages
properties:
_meta:
$ref: '#/components/schemas/FactsMeta'
organization:
description: Zie de payload; structuur staat in het antwoord zelf.
packages:
description: Zie de payload; structuur staat in het antwoord zelf.
discount_rules:
description: Zie de payload; structuur staat in het antwoord zelf.
guarantee:
description: Zie de payload; structuur staat in het antwoord zelf.
measurement_platforms:
description: Zie de payload; structuur staat in het antwoord zelf.
payment_terms:
description: Zie de payload; structuur staat in het antwoord zelf.
methodology_9_points:
description: Zie de payload; structuur staat in het antwoord zelf.
methodology_source_page:
description: Zie de payload; structuur staat in het antwoord zelf.
cases:
description: Zie de payload; structuur staat in het antwoord zelf.
claims:
description: Zie de payload; structuur staat in het antwoord zelf.
customer_statements:
description: Zie de payload; structuur staat in het antwoord zelf.
additionalProperties: true
'304':
description: 'Not Modified: de ETag uit If-None-Match klopt nog, de inhoud is niet veranderd. Geen body.'
'404':
$ref: '#/components/responses/NotFound'
'405':
$ref: '#/components/responses/MethodNotAllowed'
operationId: getFacts
parameters:
- $ref: '#/components/parameters/IfNoneMatch'
/api/content.json:
get:
summary: Pagina-index
description: Elke gepubliceerde pagina met titel, samenvatting, type en wijzigingsdatum.
tags:
- Open data
responses:
'200':
description: 'OK. Zwakke ETag; met If-None-Match volgt 304. Cache-Control: max-age=300, stale-while-revalidate=600.'
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/EnvelopeZonderHash'
- type: object
properties:
count:
description: Zie de payload; structuur staat in het antwoord zelf.
items:
description: Zie de payload; structuur staat in het antwoord zelf.
additionalProperties: true
'304':
description: 'Not Modified: de ETag uit If-None-Match klopt nog, de inhoud is niet veranderd. Geen body.'
'404':
$ref: '#/components/responses/NotFound'
'405':
$ref: '#/components/responses/MethodNotAllowed'
operationId: listContent
parameters:
- $ref: '#/components/parameters/IfNoneMatch'
/api/answers.json:
get:
summary: Vragen en antwoorden
description: Vragen die zichtbaar op de site staan, met het antwoord, de bron-URL en de wijzigingsdatum van die pagina.
tags:
- Open data
responses:
'200':
description: 'OK. Zwakke ETag; met If-None-Match volgt 304. Cache-Control: max-age=300, stale-while-revalidate=600.'
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/EnvelopeZonderHash'
- type: object
properties:
count:
description: Zie de payload; structuur staat in het antwoord zelf.
items:
description: Zie de payload; structuur staat in het antwoord zelf.
additionalProperties: true
'304':
description: 'Not Modified: de ETag uit If-None-Match klopt nog, de inhoud is niet veranderd. Geen body.'
'404':
$ref: '#/components/responses/NotFound'
'405':
$ref: '#/components/responses/MethodNotAllowed'
operationId: listAnswers
parameters:
- $ref: '#/components/parameters/IfNoneMatch'
/api/pricing.json:
get:
summary: Prijzen
description: Alle pakketten met prijs, doorlooptijd en inhoud, plus verrekenregel en betaalvoorwaarden. Exclusief btw.
tags:
- Open data
responses:
'200':
description: 'OK. Zwakke ETag; met If-None-Match volgt 304. Cache-Control: max-age=300, stale-while-revalidate=600.'
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/Envelope'
- type: object
properties:
currency:
description: Zie de payload; structuur staat in het antwoord zelf.
vat_status:
description: Zie de payload; structuur staat in het antwoord zelf.
vat_rate_pct:
description: Zie de payload; structuur staat in het antwoord zelf.
vat_note:
description: Zie de payload; structuur staat in het antwoord zelf.
source_page:
description: Zie de payload; structuur staat in het antwoord zelf.
packages:
description: Zie de payload; structuur staat in het antwoord zelf.
discount_rules:
description: Zie de payload; structuur staat in het antwoord zelf.
guarantee:
description: Zie de payload; structuur staat in het antwoord zelf.
payment_terms:
description: Zie de payload; structuur staat in het antwoord zelf.
measurement_platforms:
description: Zie de payload; structuur staat in het antwoord zelf.
methodology_9_points:
description: Zie de payload; structuur staat in het antwoord zelf.
additionalProperties: true
'304':
description: 'Not Modified: de ETag uit If-None-Match klopt nog, de inhoud is niet veranderd. Geen body.'
'404':
$ref: '#/components/responses/NotFound'
'405':
$ref: '#/components/responses/MethodNotAllowed'
operationId: getPricing
parameters:
- $ref: '#/components/parameters/IfNoneMatch'
/api/claims.json:
get:
summary: Beweringen met bron
description: 'Een getoetst register: alleen cijfers waarvan de primaire bron is gecontroleerd en die zichtbaar met bronvermelding op een pagina staan.'
tags:
- Open data
responses:
'200':
description: 'OK. Zwakke ETag; met If-None-Match volgt 304. Cache-Control: max-age=300, stale-while-revalidate=600.'
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/Envelope'
- type: object
properties:
method:
description: Zie de payload; structuur staat in het antwoord zelf.
external_claims:
description: Zie de payload; structuur staat in het antwoord zelf.
own_results:
description: Zie de payload; structuur staat in het antwoord zelf.
additionalProperties: true
'304':
description: 'Not Modified: de ETag uit If-None-Match klopt nog, de inhoud is niet veranderd. Geen body.'
'404':
$ref: '#/components/responses/NotFound'
'405':
$ref: '#/components/responses/MethodNotAllowed'
operationId: listClaims
parameters:
- $ref: '#/components/parameters/IfNoneMatch'
/api/glossary.json:
get:
summary: Begrippenlijst
description: De begrippen rond AI-vindbaarheid en GEO met hun definitie, waar mogelijk gekoppeld aan Wikipedia en Wikidata.
tags:
- Open data
responses:
'200':
description: 'OK. Zwakke ETag; met If-None-Match volgt 304. Cache-Control: max-age=300, stale-while-revalidate=600.'
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/Envelope'
- type: object
properties:
source_page:
description: Zie de payload; structuur staat in het antwoord zelf.
count:
description: Zie de payload; structuur staat in het antwoord zelf.
items:
description: Zie de payload; structuur staat in het antwoord zelf.
additionalProperties: true
'304':
description: 'Not Modified: de ETag uit If-None-Match klopt nog, de inhoud is niet veranderd. Geen body.'
'404':
$ref: '#/components/responses/NotFound'
'405':
$ref: '#/components/responses/MethodNotAllowed'
operationId: listGlossaryTerms
parameters:
- $ref: '#/components/parameters/IfNoneMatch'
/api/entities.json:
get:
summary: Entiteitenkaart
description: De entiteiten waar de site over spreekt en hoe ze zich tot elkaar verhouden.
tags:
- Open data
responses:
'200':
description: 'OK. Zwakke ETag; met If-None-Match volgt 304. Cache-Control: max-age=300, stale-while-revalidate=600.'
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/Envelope'
- type: object
properties:
organization:
description: Zie de payload; structuur staat in het antwoord zelf.
founder:
description: Zie de payload; structuur staat in het antwoord zelf.
services:
description: Zie de payload; structuur staat in het antwoord zelf.
clients:
description: Zie de payload; structuur staat in het antwoord zelf.
concepts:
description: Zie de payload; structuur staat in het antwoord zelf.
additionalProperties: true
'304':
description: 'Not Modified: de ETag uit If-None-Match klopt nog, de inhoud is niet veranderd. Geen body.'
'404':
$ref: '#/components/responses/NotFound'
'405':
$ref: '#/components/responses/MethodNotAllowed'
operationId: getEntities
parameters:
- $ref: '#/components/parameters/IfNoneMatch'
/api/changes.json:
get:
summary: Wijzigingen
description: Alles wat is gepubliceerd of bijgewerkt, nieuwste eerst, zodat een crawler in één verzoek ziet wat er veranderde.
tags:
- Open data
responses:
'200':
description: 'OK. Zwakke ETag; met If-None-Match volgt 304. Cache-Control: max-age=300, stale-while-revalidate=600.'
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/Envelope'
- type: object
properties:
count:
description: Zie de payload; structuur staat in het antwoord zelf.
items:
description: Zie de payload; structuur staat in het antwoord zelf.
schema_changes:
description: Zie de payload; structuur staat in het antwoord zelf.
tool_changes:
description: Zie de payload; structuur staat in het antwoord zelf.
additionalProperties: true
'304':
description: 'Not Modified: de ETag uit If-None-Match klopt nog, de inhoud is niet veranderd. Geen body.'
'404':
$ref: '#/components/responses/NotFound'
'405':
$ref: '#/components/responses/MethodNotAllowed'
operationId: listChanges
parameters:
- $ref: '#/components/parameters/IfNoneMatch'
/feed.json:
get:
summary: Artikelfeed
description: 'De blogartikelen als JSON Feed, met volledige tekst. Formaat: JSON Feed 1.1.'
tags:
- Open data
responses:
'200':
description: 'OK. Zwakke ETag; met If-None-Match volgt 304. Cache-Control: max-age=300, stale-while-revalidate=600.'
content:
application/feed+json:
schema:
type: object
required:
- version
- title
- items
properties:
version:
type: string
title:
type: string
items:
type: array
items:
type: object
additionalProperties: true
additionalProperties: true
'304':
description: 'Not Modified: de ETag uit If-None-Match klopt nog, de inhoud is niet veranderd. Geen body.'
'404':
$ref: '#/components/responses/NotFound'
'405':
$ref: '#/components/responses/MethodNotAllowed'
operationId: getArticleFeed
parameters:
- $ref: '#/components/parameters/IfNoneMatch'
components:
responses:
MethodNotAllowed:
description: Alleen GET, HEAD en OPTIONS. Header Allow noemt ze.
headers:
Allow:
schema:
type: string
content:
application/problem+json:
schema:
$ref: '#/components/schemas/Problem'
NotFound:
description: Onbekend adres onder /api/, bijvoorbeeld een tikfout in het pad of een endpoint dat niet bestaat. Geldt voor elk pad dat hier niet beschreven staat. Code endpoint_not_found.
content:
application/problem+json:
schema:
$ref: '#/components/schemas/Problem'
schemas:
FactsMeta:
type: object
description: 'Metadata van facts.json: schemaversie, datums, bron en btw-context van de bedragen.'
required:
- schema_version
- last_updated
- canonical
- license
properties:
schema_version:
type: string
last_updated:
type: string
valid_from:
type: string
canonical:
type: string
format: uri
source_page:
type: string
format: uri
documentation:
type: string
format: uri
license:
type: string
contact:
type: string
currency:
type: string
vat_status:
type: string
vat_rate_pct:
type: number
vat_note:
type: string
additionalProperties: true
Envelope:
type: object
description: Gedeelde omslag van elk JSON-endpoint.
required:
- name
- url
- generated_at
- last_modified
- content_hash
properties:
name:
type: string
description:
type: string
url:
type: string
format: uri
inLanguage:
type: string
publisher:
type: object
additionalProperties: true
license:
type: string
format: uri
usage:
type: string
generated_at:
type: string
format: date-time
description: Moment van deze ophaling.
last_modified:
type: string
format: date-time
description: Schuift alleen op als de inhoud verandert.
content_hash:
type: string
related:
type: object
additionalProperties:
type: string
format: uri
Problem:
type: object
description: Foutobject volgens RFC 9457 (application/problem+json). type is about:blank, title de HTTP-statustekst; code is de vaste, machineleesbare reden en hint zegt wat je anders moet doen.
required:
- type
- title
- status
- detail
- code
properties:
type:
type: string
format: uri-reference
const: about:blank
title:
type: string
examples:
- Not Found
status:
type: integer
minimum: 400
maximum: 599
detail:
type: string
instance:
type: string
description: Het opgevraagde pad.
code:
type: string
enum:
- endpoint_not_found
- method_not_allowed
hint:
type: string
description: Wat je anders kunt doen.
docs:
type: string
format: uri
additionalProperties: true
EnvelopeZonderHash:
type: object
description: 'Omslag van content.json en answers.json: als Envelope, maar zonder content_hash.'
required:
- name
- url
- generated_at
- last_modified
properties:
name:
type: string
description:
type: string
url:
type: string
format: uri
inLanguage:
type: string
publisher:
type: object
additionalProperties: true
license:
type: string
format: uri
usage:
type: string
generated_at:
type: string
format: date-time
last_modified:
type: string
format: date-time
related:
type: object
additionalProperties:
type: string
format: uri
parameters:
IfNoneMatch:
name: If-None-Match
in: header
required: false
description: De ETag van een eerder antwoord. Is de inhoud niet veranderd, dan volgt 304 zonder body.
schema:
type: string