API Referenz¶
Die ODI-Plattform stellt mehrere REST-APIs bereit, die zusammen den vollständigen Lebenszyklus von Open-Data-Datensätzen abdecken – von der Schema-Verwaltung über den Datensatz-Upload bis zur Veröffentlichung im CKAN-Datenkatalog. Alle APIs folgen dem OpenAPI-Standard (OAS 3.0 / 3.1) und sind über eine interaktive Swagger-UI erreichbar.
Für den Zugriff auf schreibende Endpunkte ist eine JWT-Authentifizierung erforderlich. Siehe Authentifizierung & Keycloak.
Inhalt¶
- Übersicht
- Authentifizierung & Keycloak
- Konventionen
- Schema-Repository API
- Staging API
- Metadata API
- CKAN-Adapter API
- Frictionless API
Übersicht¶
| API | Version | Zweck | Swagger-Doku |
|---|---|---|---|
| Schema-Repository API | 2.8.2 | Schema-Verwaltung | /docs |
| Staging API | 1.23.10 | Datensatz-Upload & -Verwaltung | /docs |
| Metadata API | 1.0 | Metadaten-Referenzdaten | /docs |
| CKAN-Adapter API | 1.0.0 | CKAN-Kommunikation | /docs |
| Frictionless API | 0.1.0 | Validierung & Extraktion | /docs |
Authentifizierung & Keycloak¶
Alle ODI-APIs verwenden Keycloak als Identity Provider. Schreibende Endpunkte erfordern einen gültigen JWT-Token.
Für die Einrichtung eines Service Accounts für den programmatischen API-Zugriff siehe: Programmatischen API-Zugriff einrichten
Basis-URL: https://keycloak.odi.schleswig-holstein.de
Realm: open-data-infrastruktur
Client-ID: odi-api-client
Token anfordern (Password-Flow)¶
curl --request POST \
--url https://keycloak.odi.schleswig-holstein.de/realms/open-data-infrastruktur/protocol/openid-connect/token \
--header 'content-type: application/x-www-form-urlencoded' \
--data client_id=odi-api-client \
--data grant_type=password \
--data username=<BENUTZERNAME> \
--data 'password=<PASSWORT>'
Token erneuern¶
curl --request POST \
--url https://keycloak.odi.schleswig-holstein.de/realms/open-data-infrastruktur/protocol/openid-connect/token \
--header 'content-type: application/x-www-form-urlencoded' \
--data client_id=odi-api-client \
--data grant_type=refresh_token \
--data 'refresh_token=<REFRESH_TOKEN>'
Keycloak-Endpunkte¶
| Methode | Pfad | Beschreibung |
|---|---|---|
POST |
/realms/open-data-infrastruktur/protocol/openid-connect/token |
Access-Token anfordern (Password- oder Client-Credentials-Flow) |
POST |
/realms/open-data-infrastruktur/protocol/openid-connect/token |
Access-Token erneuern (grant_type=refresh_token) |
POST |
/realms/open-data-infrastruktur/protocol/openid-connect/logout |
Token / Session invalidieren |
Konventionen¶
- Alle APIs geben JSON zurück (
Content-Type: application/json) - Pfadparameter werden in
{geschweifte Klammern}angegeben - Datumsangaben folgen dem ISO-8601-Format (z. B.
2026-04-29oder2026-04-29T14:30:00Z) - Relevante HTTP-Statuscodes:
| Code | Bedeutung |
|---|---|
| 200 | OK – Anfrage erfolgreich |
| 201 | Created – Ressource erfolgreich angelegt |
| 400 | Bad Request – Validierungsfehler in der Anfrage |
| 401 | Unauthorized – Kein oder ungültiger Token |
| 403 | Forbidden – Fehlende Berechtigung |
| 404 | Not Found – Ressource nicht gefunden |
Schema-Repository API¶
Version 2.8.2 · OAS 3.0 · Lizenz: MIT
Swagger-UI: https://schema-repo-backend.odi.schleswig-holstein.de/docs
Verwaltung von Validierungsschemas: anlegen, abrufen und versionieren. Schemas werden im Staging-Backend zur Validierung von Datensätzen referenziert.
Authentifizierung: Lesende Endpunkte sind öffentlich zugänglich. Schreibende
Endpunkte (POST, PUT) erfordern einen gültigen JWT-Token. Den Token nach der
Anmeldung via Keycloak als Bearer-Token im Authorization-Header mitsenden:
Authorization: Bearer <access_token>
Endpunkte¶
| Methode | Pfad | Beschreibung |
|---|---|---|
GET |
/schemas |
Alle Schemas auflisten |
POST |
/schemas |
Neues Schema anlegen |
POST |
/schemas/synchronize |
Schemas synchronisieren |
GET |
/schemas/groups |
Schema-Gruppen abrufen |
POST |
/schemas/searchByHeader |
Schema per Header suchen |
GET |
/schemas/{id} |
Schema abrufen |
PUT |
/schemas/{id} |
Schema aktualisieren |
GET |
/schemas/{id}/tags |
Tags eines Schemas abrufen |
GET |
/schemas/{id}/{version} |
Bestimmte Version abrufen |
GET |
/schemas/{id}/{version}/{file} |
Bestimmte Datei einer Version abrufen |
Datenmodelle: Schema, SchemaCreateDto, GitFile, CreateSchemaRequest, UpdateSchemaRequest
Beispiel: Alle Schemas auflisten¶
curl --request GET \
--url https://schema-repo-backend.odi.schleswig-holstein.de/schemas \
--header 'accept: application/json'
Staging API¶
Version 1.23.10 · OAS 3.0 · Lizenz: MIT
Swagger-UI: https://staging-backend.odi.schleswig-holstein.de/docs
Zentraler Einstiegspunkt für das Hochladen, Aktualisieren und Fortführen von Datensätzen (CSV, GeoJSON, CSV mit Geo-Informationen). Verbindet intern die Schema-Repository API (Validierung) mit dem CKAN-Adapter API (Veröffentlichung).
Authentifizierung erforderlich
Alle Endpunkte erfordern einen gültigen JWT-Token. Den Token nach der
Anmeldung via Keycloak als Bearer-Token im Authorization-Header mitsenden:
Authorization: Bearer <access_token>
Endpunkte¶
CSV
| Methode | Pfad | Beschreibung |
|---|---|---|
POST |
/upload/csv |
Neuen CSV-Datensatz hochladen |
PUT |
/upload/csv/overwrite/{datasetId} |
CSV-Datensatz aktualisieren |
POST |
/upload/csv/append |
Datensatz fortführen (append) |
PUT |
/upload/csv/complete/{datasetId} |
CSV-Datensatz vervollständigen |
GeoJSON
| Methode | Pfad | Beschreibung |
|---|---|---|
POST |
/upload/geojson |
GeoJSON-Datensatz hochladen |
PUT |
/upload/geojson/overwrite/{datasetId} |
GeoJSON-Datensatz ersetzen |
Datenmodelle: NifiRequest, JsonValidationRequest, CsvUploadRequest, CsvUploadResult, CsvReplaceRequest, CsvCompleteRequest, AppendCsvRequest, GeoJsonRequest, GeoJsonReplaceRequest
Detaillierte Anleitungen: Datensatz hochladen per API · Datensatz aktualisieren per API · Datensatzserie fortführen per API
Metadata API¶
Version 1.0 · OAS 3.0 · Lizenz: MIT
Swagger-UI: https://metadata-service.odi.schleswig-holstein.de/docs
Bereitstellung von Referenzdaten im Open-Data-Kontext: Herausgeber, Kategorien, Datenkataloge, Lizenzen und Raumbezüge. Die zurückgegebenen IDs werden beim Datensatz-Upload im Staging-Backend als Metadatenfelder benötigt.
Authentifizierung: Lesende Endpunkte sind öffentlich zugänglich. Schreibende
und löschende Endpunkte (POST, DELETE) erfordern einen gültigen JWT-Token.
Den Token nach der Anmeldung via Keycloak als Bearer-Token im Authorization-Header mitsenden:
Authorization: Bearer <access_token>
Endpunkte¶
Herausgeber
| Methode | Pfad | Beschreibung |
|---|---|---|
GET |
/publisher |
Alle Herausgeber auflisten |
POST |
/publisher |
Neuen Herausgeber anlegen |
GET |
/publisher/{identifier} |
Herausgeber abrufen |
DELETE |
/publisher/{identifier} |
Herausgeber löschen |
Kategorien
| Methode | Pfad | Beschreibung |
|---|---|---|
GET |
/categories |
Alle Kategorien auflisten |
GET |
/categories/{identifier} |
Kategorie abrufen |
Datenkataloge
| Methode | Pfad | Beschreibung |
|---|---|---|
GET |
/catalogs |
Alle Kataloge auflisten |
GET |
/catalogs/{identifier} |
Katalog abrufen |
Lizenzen
| Methode | Pfad | Beschreibung |
|---|---|---|
GET |
/licenses |
Alle Lizenzen auflisten |
GET |
/licenses/{identifier} |
Lizenz abrufen |
Raumbezug
| Methode | Pfad | Beschreibung |
|---|---|---|
GET |
/places |
Alle Raumbezüge auflisten |
GET |
/places/{identifier} |
Raumbezug abrufen |
Datenmodelle: Publisher, PublisherCreateDto, Category, Catalog, Licence, Place
CKAN-Adapter API¶
Version 1.0.0 · OAS 3.0
Swagger-UI: https://ckan-service.odi.schleswig-holstein.de/docs
Abstraktionsschicht zur Kommunikation mit dem CKAN-Datenkatalog. Verwaltet Datensätze, Distributionen, Datensatzserien, Kataloge und kontrollierte Vokabulare. Wird in der Regel vom Staging-Backend intern aufgerufen.
Authentifizierung: Alle schreibenden Endpunkte erfordern einen gültigen JWT-Token.
Den Token nach der Anmeldung via Keycloak als Bearer-Token im Authorization-Header mitsenden:
Authorization: Bearer <access_token>
Endpunkte¶
Datensatz
| Methode | Pfad | Beschreibung |
|---|---|---|
POST |
/dataset/{catalogue} |
Datensatz anlegen |
PUT |
/dataset/publish/{catalogue}/{datasetId} |
Datensatz veröffentlichen |
PUT |
/dataset/{datasetId} |
Datensatz aktualisieren |
GET |
/dataset/{datasetId} |
Datensatz abrufen |
GET |
/dataset/{datasetId}/distributions |
Distributionen eines Datensatzes abrufen |
GET |
/dataset |
Alle Datensätze auflisten |
Distribution
| Methode | Pfad | Beschreibung |
|---|---|---|
POST |
/distribution/{catalogue}/{datasetId} |
Datei als Distribution hochladen |
POST |
/distribution/{catalogue}/{datasetId}/link-to |
Link als Distribution anlegen |
PUT |
/distribution/{catalogue}/{distributionId} |
Distribution aktualisieren |
PUT |
/distribution/{catalogue}/{distributionId}/file |
Datei einer Distribution ersetzen |
PUT |
/distribution/{catalogue}/{distributionId}/link-to |
Link einer Distribution ersetzen |
Datensatzserie
| Methode | Pfad | Beschreibung |
|---|---|---|
POST |
/dataseries/{catalogue} |
Datensatzserie anlegen |
GET |
/dataseries/{catalogue}/{dataSeriesId} |
Datensatzserie abrufen |
POST |
/dataseries/{catalogue}/{dataSeriesId}/add |
Datensatz zur Serie hinzufügen |
PUT |
/dataseries/{catalogue}/{dataSeriesId}/dataset/{id} |
Datensatz in Serie aktualisieren |
Vokabular & Kataloge
| Methode | Pfad | Beschreibung |
|---|---|---|
GET |
/vocabulary/{id} |
Vokabular abrufen |
GET |
/catalogue |
Alle Kataloge auflisten |
Datenmodelle: CreateDatasetRequest, CreateDatasetResponse, PublishDatasetResponse, UpdateDatasetRequest, DistributionCreateFileUploadDto, DataseriesResponse
Frictionless API¶
Version 0.1.0 · OAS 3.1 · FastAPI
Swagger-UI: https://frictionless.odi.schleswig-holstein.de/docs
Validierung und Extraktion von Datensätzen auf Basis des Frictionless-Data-Standards. Wird vom Staging-Backend intern für die Datenvalidierung genutzt, kann aber auch direkt angesprochen werden.
Authentifizierung: Für den direkten Aufruf den JWT-Token als Bearer-Token
im Authorization-Header mitsenden:
Authorization: Bearer <access_token>
Endpunkte¶
| Methode | Pfad | Beschreibung |
|---|---|---|
GET |
/ |
Healthcheck |
POST |
/validate |
Datensatz (Datei-Upload) validieren |
POST |
/uploadCsv |
CSV-Datei hochladen |
POST |
/getJson |
JSON aus einer Ressource abrufen |
POST |
/validate_resource |
Ressource per URL validieren |
GET |
/validate_resource |
Ressource per URL validieren (GET) |
GET |
/extract/{resource_url} |
Daten aus einer Ressource extrahieren |
Datenmodelle: ValidationRequest, HTTPValidationError, ValidationError
Beispiel: Ressource per URL validieren¶
Der Parameter resource_url erwartet eine HTTP-URL zu einer tabellarischen Datenressource
(z. B. eine CSV-Datei), die öffentlich erreichbar ist.
curl --request GET \
--url 'https://frictionless.odi.schleswig-holstein.de/validate_resource?resource_url=https%3A%2F%2Fexample.com%2Fdatei.csv' \
--header 'accept: application/json'