Citeerbaar Open data API

Alleen-lezen JSON, CC BY 4.0, bronvermelding naar source_page.

Operations 9

GET /api/facts.json Feiten-API #
GET /api/content.json Pagina-index #
GET /api/answers.json Vragen en antwoorden #
GET /api/pricing.json Prijzen #
GET /api/claims.json Beweringen met bron #
GET /api/glossary.json Begrippenlijst #
GET /api/entities.json Entiteitenkaart #
GET /api/changes.json Wijzigingen #
GET /feed.json Artikelfeed #

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.
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 Specification

citeerbaar-nl-open-data-api-openapi.yml Raw ↑
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