EU Open Data Portal Search API (hub-search)

The hub-search metadata search service for data.europa.eu. Provides full-text and faceted search over ~1.9 million dataset, data service, dataset series, catalogue, vocabulary and organisation records harvested from EU institutions and national portals, plus Atom/RSS feeds, sitemaps, a gazetteer autocomplete and a CKAN-compatible package API. Read operations are public and unauthenticated; write operations require an API key or JWT bearer token.

Operations 56

GET /search Search #
POST /search Search #
GET /scroll Scroll #
GET /{lang}/feeds/datasets.atom Atom #
GET /{lang}/feeds/datasets.rss RSS #
GET /{lang}/feeds/datasets/{id} RSS for a single dataset #
GET /sitemap Sitemap Meta #
GET /sitemap/{id} Sitemap Datasets #
GET /datasets List datasets #
POST /datasets Create a dataset #
GET /datasets/{id} Get a dataset #
PUT /datasets/{id} Create or Update a dataset #
PATCH /datasets/{id} Modify a dataset #
DELETE /datasets/{id} Delete a dataset #
GET /datasets/{id}/{revision} Get a specific dataset version #
PUT /datasets/{id}/revisions/{revisionId} Create specific dataset revision #
GET /datasets/{id}/revisions/{revisionId} Get a specific dataset revision #
DELETE /datasets/{id}/revisions/{revisionId} Delete a specific dataset version #
PUT /bulk/datasets Bulk-create/update of datasets #
GET /dataservices/{id} Get a single Data Service #
PUT /dataservices/{id} Create or Update a Data Service #
DELETE /dataservices/{id} Delete a Data Service #
GET /datasetseries/{id} Get a single Dataset Series #
PUT /datasetseries/{id} Create or Update a Dataset Series #
DELETE /datasetseries/{id} Delete a Dataset Series #
GET /catalogues List catalogues #
POST /catalogues Create a catalogue #
GET /catalogues/{id} Get a catalogue #
PUT /catalogues/{id} Create or Update a catalogue #
PATCH /catalogues/{id} Modify a catalogue #
DELETE /catalogues/{id} Delete a catalogue #
GET /vocabularies Get list of indexed vocabularies #
GET /vocabularies/{vocabulary} Get a vocabulary #
PUT /vocabularies/{vocabulary} Create or Update a vocabulary #
DELETE /vocabularies/{vocabulary} Delete a vocabulary #
POST /vocabularies/{vocabulary} Create a vocable #
GET /vocabularies/{vocabulary}/vocable Get a vocable by URI #
GET /vocabularies/{vocabulary}/{id} Get a vocable #
PUT /vocabularies/{vocabulary}/{id} Create or Update a vocable #
PATCH /vocabularies/{vocabulary}/{id} Modify a vocable #
DELETE /vocabularies/{vocabulary}/{id} Delete a vocable #
GET /gazetteer/autocomplete Gazetteer #
GET /ckan/package_list Package list #
GET /ckan/package_search Package search #
GET /ckan/package_show Package show #
GET /organizations List organizations #
POST /organizations Create an organization #
GET /organizations/{id} Get an organization #
PUT /organizations/{id} Create or Update an Organization #
DELETE /organizations/{id} Delete an organization #
GET /resources List resource types #
GET /resources/editorial-content List EditorialContents #
GET /resources/editorial-content/{id} Get a EditorialContent #
DELETE /resources/editorial-content/{id} Delete a EditorialContent #
PUT /resources/editorial-content/{id} Create or Update a EditorialContent #
PUT /bulk/resources/editorial-content Bulk-create/update of EditorialContent #

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/eu-open-data-portal-search-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

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

eu-open-data-portal-hub-search-openapi.yaml Raw ↑
openapi: 3.0.3
info:
  version: 5.3.11
  title: hub-search
  description: 'Hub-Search is a powerful search solution designed to function as a Metadata Search Service
    for the Open Data Portal. This API facilitates the discovery and retrieval of metadata, making it
    easier for users to find datasets and resources. Hub-Search seamlessly integrates with Elastic Search
    to provide robust and precise search capabilities.

    Hub-Search API not only simplifies searching but also fosters transparency and knowledge sharing.
    It empowers users to easily discover valuable data resources, improving data accessibility and utilization.

    This introduction sets the stage for exploring the Hub-Search Open API. Detailed information on authentication,
    API endpoints, error handling, and practical examples can be found in the subsequent sections.

    '
  x-logo:
    url: images/logo
servers:
- url: https://data.europa.eu/api/hub/search
  description: EU Open Data Portal Search API (hub-search)
x-tagGroups:
- name: Resources
  tags:
  - Resources
  - EditorialContent
- name: Searching
  tags:
  - Search
  - Feeds
- name: DCAT-AP
  tags:
  - Datasets
  - Data Services
  - Dataset Series
  - Catalogues
  - Vocabularies
- name: Misc
  tags:
  - Gazetteer
  - Ckan
  - Organizations
paths:
  /search:
    get:
      description: To retrieve the data, send a GET request to the specified URL of the API endpoint with
        the resource path "/search" at the end of the URL. See the example here right. To obtain the desired
        result, use one or more of the parameters listed below. The parameters are pairs of names and
        their corresponding values, so-called name-value pairs. These are added to the URL with a "?"
        sign, the name and value are always separated using a '=' sign, the pairs are separated using
        a '&' sign. A syntactically correct request looks like the following example https://example.org/api/hub/search/search?q=cat&filters=dataset
      summary: Search
      operationId: searchGet
      tags:
      - Search
      parameters:
      - in: query
        name: q
        description: The query
        schema:
          type: string
      - in: query
        name: filter
        description: Filter queries by document type
        deprecated: true
        schema:
          type: string
      - in: query
        name: filters
        description: Filters queries by one or multiple document types
        schema:
          type: array
          items:
            type: string
            enum:
            - catalogue
            - dataset
            - dataservice
            - datasetseries
            - series
            - resource
            - vocabulary
            - organization
            - resource_editorial-content
          example:
          - catalogue
          - dataset
        explode: false
      - in: query
        name: facets
        description: Filter queries by facets (json as string, e.g. 'facets={"catalog":["catalog-x"]}')
        schema:
          type: string
      - in: query
        name: includeChildren
        description: Include datasets assigned to child organizations when filtering by the organization
          facet
        schema:
          type: boolean
          default: false
      - in: query
        name: page
        description: The page number of matching results
        schema:
          type: integer
          minimum: 0
          default: 0
      - in: query
        name: limit
        description: The maximum number of matching datasets per page
        schema:
          type: integer
          minimum: 0
          maximum: 1000
          default: 10
      - in: query
        name: fields
        description: Filter queries by document fields (e.g. 'fields=title')
        schema:
          type: array
          items:
            type: string
        explode: false
      - in: query
        name: minDate
        description: Filter queries by minimum Date
        schema:
          type: string
          format: date-time
      - in: query
        name: maxDate
        description: Filter queries by maximum Date
        schema:
          type: string
          format: date-time
      - in: query
        name: dateType
        description: To be used with `minDate` and `maxDate` query parameters. The default value is defined
          in the configuration.
        schema:
          type: string
          enum:
          - issued
          - modified
          - temporal
      - in: query
        name: boost
        description: Boost document fields (boost.field=1.0 or boost.field.subfield=1.0, e.g. boost.title=3.0)
        schema:
          type: object
      - in: query
        name: globalAggregation
        description: Counting of facets globally or locally (default true)
        schema:
          type: boolean
      - in: query
        name: facetOperator
        description: Filtering queries by facets are combined with "AND" or "OR" (default "OR")
        schema:
          type: string
          enum:
          - AND
          - OR
      - in: query
        name: facetGroupOperator
        description: Filtering queries by facetgroups are combined with "AND" or "OR" (default "AND")
        schema:
          type: string
          enum:
          - AND
          - OR
      - in: query
        name: bboxMinLon
        description: Filter queries by bounding box minimum longitude
        schema:
          type: number
          format: float
          minimum: -180
          maximum: 180
      - in: query
        name: bboxMaxLon
        description: Filter queries by bounding box maximum longitude
        schema:
          type: number
          format: float
          minimum: -180
          maximum: 180
      - in: query
        name: bboxMaxLat
        description: Filter queries by bounding box maximum latitude
        schema:
          type: number
          format: float
          minimum: -90
          maximum: 90
      - in: query
        name: bboxMinLat
        description: Filter queries by bounding box minimum latitude
        schema:
          type: number
          format: float
          minimum: -90
          maximum: 90
      - in: query
        name: sort
        description: Sorting of the search result (usage "field+asc" or "field+desc", default is desc)
        schema:
          type: array
          items:
            type: string
        explode: false
      - in: query
        name: filterDistributions
        description: If datasets are searched by facets distributions are returned filtered (default false)
        schema:
          type: boolean
      - in: query
        name: aggregation
        description: Enables aggregation of facets (default true)
        schema:
          type: boolean
      - in: query
        name: includes
        description: Descides which fields are included in the response (default all)
        schema:
          type: array
          items:
            type: string
        explode: false
      - in: query
        name: scroll
        description: Enable scroll and return a scroll id
        schema:
          type: boolean
          default: false
      - in: query
        name: searchAfter
        description: Enable searching page by page. Ideal for efficiently navigating through large result
          sets. Must be set to `true` to get the first page.
        schema:
          type: boolean
          default: false
      - in: query
        name: searchAfterSort
        description: Sort values from the last result. Required to retrieve the next page. Must be combined
          with `pitId`, otherwise it will be ignored.
        schema:
          type: array
          items:
            type: string
        explode: false
      - in: query
        name: pitId
        description: Point-in-Time ID from the previous response. Required to retrieve the next page.
          Must be combined with `searchAfterSort`, otherwise it will be ignored.
        schema:
          type: string
      - in: query
        name: minScoring
        description: Filter by minimum quality measurement scoring value
        schema:
          type: integer
      - in: query
        name: maxScoring
        description: Filter by maximum quality measurement scoring value
        schema:
          type: integer
      - in: query
        name: aggregationAllFields
        description: Aggregate all facets
        schema:
          type: boolean
          default: true
      - in: query
        name: aggregationFields
        description: Aggregate selected facets (ignored if aggregationAllFields is set true)
        schema:
          type: array
          items:
            type: string
        explode: false
      - in: query
        name: countryData
        description: If enabled only datasets from country catalogues are returned. If disabled only datasets
          from non-country catalogues are returned. If not specified (null), no filtering is performed.
        schema:
          type: boolean
      - in: query
        name: showScore
        description: If enabled the score is returned for each result. Disabled as default.
        schema:
          type: boolean
      - in: query
        name: vocabulary
        description: Filter by vocabulary id. Only effective when `filters` contains `vocabulary`. For
          example, `filters=dataset,vocabulary` or `filters=vocabulary`.
        schema:
          type: array
          items:
            type: string
        explode: false
      - in: query
        name: resource
        description: Filter by resource types. Only effective when `filters` contains `resource`, for
          example, `filters=catalogue,resource` or `filters=resource`.
        schema:
          type: array
          items:
            type: string
        explode: false
      - in: query
        name: dataServices
        description: Only show datasets which have a distribution with at least one access service (true).
          Default show all (false).
        schema:
          type: boolean
      - in: query
        name: autocomplete
        description: Search with autocomplete style via title field. Default false.
        schema:
          type: boolean
      - in: query
        name: superCatalogue
        description: Deprecated. Please use "superCatalog" in the "facets" for filtering datasets or catalogues
          search result.
        deprecated: true
        schema:
          type: string
      - in: query
        name: countOnly
        description: When set to true, the search result contains only the count of the search result.
        schema:
          type: boolean
          default: false
      - in: query
        name: accessControlPermissions
        description: Filter by access control permissions. Specify the access control permissions (view,
          edit, publish, delete) required for resources to be returned. If multiple permissions are specified,
          the resources must have at least one of the specified permissions.
        schema:
          type: array
          items:
            type: string
            enum:
            - view
            - edit
            - publish
            - delete
        explode: false
      responses:
        '200':
          $ref: '#/components/responses/QuerySuccess'
        '400':
          $ref: '#/components/responses/BadRequest'
        '500':
          $ref: '#/components/responses/InternalServerError'
    post:
      description: To retrieve the data, send a POST request to the specified URL of the API endpoint
        with the resource path "/search" at the end of the URL. See the example here right. To obtain
        the desired result, use one or more of the parameters listed below. The parameters are pairs of
        names and their corresponding values, so-called name-value pairs. The request sent to the server
        with POST is stored in the request body according to Request Body Schema below. See the syntax
        of the request here on the right.
      summary: Search
      operationId: searchPost
      tags:
      - Search
      requestBody:
        description: Query
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Query'
      responses:
        '200':
          $ref: '#/components/responses/QuerySuccess'
        '400':
          $ref: '#/components/responses/BadRequest'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /scroll:
    get:
      description: Make a GET request to the specified URL of the API endpoint with the resource path
        "/scroll" at the end of the URL if you want to retrieve large number of results (or even all results)
        from a single search request. First you have to obtain the required parameter ScrollID (do so
        using method GET to the specified URL of the API endpoint with the resource path "search" at the
        end of the URL). Use SCROLL the same way you use cursor on a traditional database.
      summary: Scroll
      operationId: scrollGet
      tags:
      - Search
      parameters:
      - in: query
        name: scrollId
        description: The scroll id
        required: true
        schema:
          type: string
      responses:
        '200':
          $ref: '#/components/responses/QuerySuccess'
        '400':
          $ref: '#/components/responses/BadRequest'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /{lang}/feeds/datasets.atom:
    get:
      description: Make a GET request to the specified URL of the API endpoint with the resource path
        "/{lang}/feeds/datasets.atom" at the end of the URL to get datasets' feeds in Atom format. Set
        the language element {lang} in the URL to preferred language (see path parameters here below,
        the languages abbreviation are made according to the standards). A syntactically correct request
        looks like the following example https://example.org/api/de/feeds/datasets.atom?q=hund
      summary: Atom
      operationId: datasets.atom
      tags:
      - Feeds
      parameters:
      - in: query
        name: q
        description: The query
        schema:
          type: string
      - in: query
        name: facets
        description: Filter queries by facets (string as json, e.g. 'facets={"catalog":["catalog-x"]}')
        schema:
          type: string
      - in: query
        name: page
        description: The page number of matching results
        schema:
          type: integer
          minimum: 0
      - in: query
        name: limit
        description: The maximum number of matching datasets per page
        schema:
          type: integer
          minimum: 1
          maximum: 1000
      - in: query
        name: fields
        description: Filter queries by document fields (e.g. 'fields=title')
        schema:
          type: array
          items:
            type: string
      - in: query
        name: minDate
        description: Filter queries by minimum Date
        schema:
          type: string
          format: date-time
      - in: query
        name: maxDate
        description: Filter queries by maximum Date
        schema:
          type: string
          format: date-time
      - in: query
        name: boost
        description: Boost document fields (boost.field=1.0 or boost.field.subfield=1.0, e.g. boost.title=3.0)
        schema:
          type: object
      - in: query
        name: globalAggregation
        description: Counting of facets globally or locally (default true)
        schema:
          type: boolean
      - in: query
        name: facetOperator
        description: Filtering queries by facets are combined with "AND" or "OR" (default "OR")
        schema:
          type: string
          enum:
          - AND
          - OR
      - in: query
        name: facetGroupOperator
        description: Filtering queries by facetgroups are combined with "AND" or "OR" (default "AND")
        schema:
          type: string
          enum:
          - AND
          - OR
      - in: query
        name: bboxMinLon
        description: Filter queries by bounding box minimum longitude
        schema:
          type: number
          format: float
          minimum: -180
          maximum: 180
      - in: query
        name: bboxMaxLon
        description: Filter queries by bounding box maximum longitude
        schema:
          type: number
          format: float
          minimum: -180
          maximum: 180
      - in: query
        name: bboxMaxLat
        description: Filter queries by bounding box maximum latitude
        schema:
          type: number
          format: float
          minimum: -90
          maximum: 90
      - in: query
        name: bboxMinLat
        description: Filter queries by bounding box minimum latitude
        schema:
          type: number
          format: float
          minimum: -90
          maximum: 90
      - in: query
        name: sort
        description: Sorting of the search result (usage "field+asc" or "field+desc", default is desc)
        schema:
          type: array
          items:
            type: string
      - in: query
        name: filterDistributions
        description: If datasets are searched by facets distributions are returned filtered (default false)
        schema:
          type: boolean
      - in: path
        name: lang
        description: The feed is returned in the requested language
        required: true
        schema:
          type: string
          enum:
          - bg
          - es
          - cs
          - da
          - et
          - el
          - en
          - fr
          - ga
          - hr
          - it
          - lv
          - lt
          - hu
          - mt
          - nl
          - pl
          - pt
          - ro
          - sk
          - sl
          - fi
          - sv
          - 'no'
          - de
      - in: query
        name: minScoring
        description: Filter by minimum quality measurement scoring value
        schema:
          type: integer
      - in: query
        name: maxScoring
        description: Filter by maximum quality measurement scoring value
        schema:
          type: integer
      - in: query
        name: countryData
        description: If enabled only datasets from country catalogues are returned. If disabled only datasets
          from non-country catalogues are returned. If not specified (null), no filtering is performed.
        schema:
          type: boolean
      - in: query
        name: vocabulary
        description: Filter by vocabulary id. Only effective when filter=vocabulary.
        schema:
          type: array
          items:
            type: string
      responses:
        '200':
          $ref: '#/components/responses/QuerySuccess'
        '400':
          $ref: '#/components/responses/BadRequest'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /{lang}/feeds/datasets.rss:
    get:
      description: Make a GET request to the specified URL of the API endpoint with the resource path
        "/{lang}/feeds/datasets.rss" at the end of the URL to get datasets' feeds in RSS format. Set the
        language element {lang} in the URL to preferred  language (see path parameters here below, the
        languages abbreviation are made according to the standards). A syntactically correct request looks
        like the following example https://example.org/api/de/feeds/datasets.rss?q=hund
      summary: RSS
      operationId: datasets.rss
      tags:
      - Feeds
      parameters:
      - in: query
        name: q
        description: The query
        schema:
          type: string
      - in: query
        name: facets
        description: Filter queries by facets (string as json, e.g. 'facets={"catalog":["catalog-x"]}')
        schema:
          type: string
      - in: query
        name: page
        description: The page number of matching results
        schema:
          type: integer
          minimum: 0
      - in: query
        name: limit
        description: The maximum number of matching datasets per page
        schema:
          type: integer
          minimum: 1
          maximum: 1000
      - in: query
        name: fields
        description: Filter queries by document fields (e.g. 'fields=title')
        schema:
          type: array
          items:
            type: string
      - in: query
        name: minDate
        description: Filter queries by minimum Date
        schema:
          type: string
          format: date-time
      - in: query
        name: maxDate
        description: Filter queries by maximum Date
        schema:
          type: string
          format: date-time
      - in: query
        name: boost
        description: Boost document fields (boost.field=1.0 or boost.field.subfield=1.0, e.g. boost.title=3.0)
        schema:
          type: object
      - in: query
        name: globalAggregation
        description: Counting of facets globally or locally (default true)
        schema:
          type: boolean
      - in: query
        name: facetOperator
        description: Filtering queries by facets are combined with "AND" or "OR" (default "OR")
        schema:
          type: string
          enum:
          - AND
          - OR
      - in: query
        name: facetGroupOperator
        description: Filtering queries by facetgroups are combined with "AND" or "OR" (default "AND")
        schema:
          type: string
          enum:
          - AND
          - OR
      - in: query
        name: bboxMinLon
        description: Filter queries by bounding box minimum longitude
        schema:
          type: number
          format: float
          minimum: -180
          maximum: 180
      - in: query
        name: bboxMaxLon
        description: Filter queries by bounding box maximum longitude
        schema:
          type: number
          format: float
          minimum: -180
          maximum: 180
      - in: query
        name: bboxMaxLat
        description: Filter queries by bounding box maximum latitude
        schema:
          type: number
          format: float
          minimum: -90
          maximum: 90
      - in: query
        name: bboxMinLat
        description: Filter queries by bounding box minimum latitude
        schema:
          type: number
          format: float
          minimum: -90
          maximum: 90
      - in: query
        name: sort
        description: Sorting of the search result (usage "field+asc" or "field+desc", default is desc)
        schema:
          type: array
          items:
            type: string
      - in: query
        name: filterDistributions
        description: If datasets are searched by facets distributions are returned filtered (default false)
        schema:
          type: boolean
      - in: path
        name: lang
        description: The feed is returned in the requested language
        required: true
        schema:
          type: string
          enum:
          - bg
          - es
          - cs
          - da
          - et
          - el
          - en
          - fr
          - ga
          - hr
          - it
          - lv
          - lt
          - hu
          - mt
          - nl
          - pl
          - pt
          - ro
          - sk
          - sl
          - fi
          - sv
          - 'no'
          - de
      - in: query
        name: minScoring
        description: Filter by minimum quality measurement scoring value
        schema:
          type: integer
      - in: query
        name: maxScoring
        description: Filter by maximum quality measurement scoring value
        schema:
          type: integer
      - in: query
        name: countryData
        description: If enabled only datasets from country catalogues are returned. If disabled only datasets
          from non-country catalogues are returned. If not specified (null), no filtering is performed.
        schema:
          type: boolean
      responses:
        '200':
          $ref: '#/components/responses/QuerySuccess'
        '400':
          $ref: '#/components/responses/BadRequest'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /{lang}/feeds/datasets/{id}:
    get:
      description: Make a GET request to the specified URL of the API endpoint with the resource path
        "{lang}/feeds/datasets/{id}.rss" to retrieve the RSS feed of a dataset with an exact ID.  Set
        the language element {lang} in the URL to preferred language (see path parameters here below,
        the languages abbreviation are made according to the standards), set the unique identifier of
        the dataset as {id} element of the URL.
      summary: RSS for a single dataset
      operationId: datasetrevisions.rss
      tags:
      - Feeds
      parameters:
      - in: path
        name: lang
        description: The feed is returned in the requested language
        required: true
        schema:
          type: string
          enum:
          - bg
          - es
          - cs
          - da
          - et
          - el
          - en
          - fr
          - ga
          - hr
          - it
          - lv
          - lt
          - hu
          - mt
          - nl
          - pl
          - pt
          - ro
          - sk
          - sl
          - fi
          - sv
          - 'no'
          - de
      - in: path
        name: id
        description: Id of the requested dataset
        required: true
        schema:
          type: string
      responses:
        '200':
          $ref: '#/components/responses/QuerySuccess'
        '400':
          $ref: '#/components/responses/BadRequest'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /sitemap:
    get:
      description: Make a GET request to the specified URL of the API endpoint with the resource path
        "/sitemap" at the end of the URL to get the Sitemap index that lists all existing Sitemaps with
        IDs. If successful, the response contains an XML file, grouping multiple Sitemap files.
      summary: Sitemap Meta
      operationId: readSitemapIndex
      tags:
      - Sitemap
      responses:
        '200':
          $ref: '#/components/responses/QuerySuccess'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /sitemap/{id}:
    get:
      description: Make a GET request to the specified URL of the API endpoint with the resource path
        "sitemap/{id}" at the end of the URL to get a Sitemap in XML format. Set the unique identifier
        of the Sitemap as {id} element of the URL.
      summary: Sitemap Datasets
      operationId: readSitemap
      tags:
      - Sitemap
      parameters:
      - name: id
        in: path
        description: Id of the requested sitemap
        required: true
        schema:
          type: integer
          minimum: 1
      responses:
        '200':
          $ref: '#/components/responses/QuerySuccess'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /datasets:
    get:
      description: You can get a list of datasets of an exact catalogue making a GET request to the specified
        URL of the API endpoint with the resource path "/datasets" at the end of the URL and required
        query parameter 'catalogue'. The value of the query parameter is the unique ID of the catalog
        (you can get the IDs of all existing catalogs using the 'List Catalogues' operation).  If successful,
        the response will contain an array with the IDs of all records in the catalog.
      summary: List datasets
      operationId: listDatasets
      tags:
      - Datasets
      parameters:
      - in: query
        name: catalogue
        required: true
        description: Catalogue to which the datasets belong.
        schema:
          type: string
      - in: query
        name: alias
        description: Alias, default 'read'
        schema:
          type: string
          default: read
      security:
      - BearerAuth: []
      responses:
        '200':
          $ref: '#/components/responses/DatasetSuccess'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          description: Invalid or expired bearer token
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
    post:
      description: This function is reserved for internal use only and is not part of our public API offerings
      summary: Create a dataset
      operationId: createDataset
      tags:
      - Datasets
      parameters:
      - in: query
        name: synchronous
        description: If disabled the execution is asynchronous (response code 202)
        schema:
          type: boolean
          default: true
      security:
      - ApiKeyAuth: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Dataset'
      responses:
        '201':
          $ref: '#/components/responses/DatasetSuccessId'
        '202':
          description: Accepted
        '400':
          $ref: '#/components/responses/BadRequest'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /datasets/{id}:
    get:
      description: You can get a dataset making GET request to the specified URL of the API endpoint with
        the resource path "datasets/{id}" at the end of the URL. Set the unique ID  of the dataset as
        {id} element of the  URL.
      summary: Get a dataset
      operationId: readDataset
      security:
      - BearerAuth: []
      tags:
      - Datasets
      parameters:
      - name: id
        in: path
        description: Id of the requested dataset
        required: true
        schema:
          type: string
      responses:
        '200':
          $ref: '#/components/responses/DatasetSuccess'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          description: Invalid or expired bearer token
        '403':
          description: Access to the requested dataset was denied by access control
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
    put:
      description: This function is reserved for internal use only and is not part of our public API offerings.
        You must be authorized to create or update a dataset. As an authorized user, you make a PUT request
        to the specified URL of the API endpoint with the resource path "datasets/{id}" and specify the
        unique ID of the dataset as the {id} element of the URL.
      summary: Create or Update a dataset
      operationId: createOrUpdateDataset
      tags:
      - Datasets
      security:
      - ApiKeyAuth: []
      parameters:
      - name: id
        in: path
        description: Id of the created or updated dataset
        required: true
        schema:
          type: string
      - in: query
        name: synchronous
        description: If disabled the execution is asynchronous (response code 202)
        schema:
          type: boolean
          default: true
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Dataset'
        required: true
      responses:
        '200':
          $ref: '#/components/responses/DatasetSuccessId'
        '201':
          $ref: '#/components/responses/DatasetSuccessId'
        '202':
          description: Accepted
        '400':
          $ref: '#/components/responses/BadRequest'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
    patch:
      description: This function is reserved for internal use only and is not part of our public API offerings.
        You must be authorized to edit a dataset. As an authorized user, you make a PATCH request to the
        specified URL of the API endpoint adding the resource path "datasets/{id}" to the end of the URL.
        Specify the unique ID of the dataset as the {id} element of the URL.
      summary: Modify a dataset
      operationId: modifyDataset
      tags:
      - Datasets
      security:
      - ApiKeyAuth: []
      parameters:
      - name: id
        in: path
        description: Id of the modified dataset
        required: true
        schema:
          type: string
      - in: query
        na

# --- truncated at 32 KB (130 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/eu-open-data-portal/refs/heads/main/openapi/eu-open-data-portal-hub-search-openapi.yaml