Skip to main content

Service APIs reference

The GDI platform services communicate via REST APIs. Each service exposes OpenAPI specifications documenting available endpoints.

Service

Explore the APIs of the different services in the GDI platform for dataset management:

Dataset Discovery Service (DDS)

  • OpenAPI: Access at <base-url>/q/swagger-ui/
  • Example: http://localhost:8080/q/swagger-ui/ for local development
  • Endpoints:
    • GET /api/v1/datasets: Search datasets
    • GET /api/v1/datasets/{id}: Retrieve dataset details
    • GET /api/v1/facets: Get available search facets

Access Management Service (AMS)

  • OpenAPI: Access at <base-url>/q/swagger-ui/
  • Example: http://localhost:8081/q/swagger-ui/ for local development
  • Endpoints:
    • POST /api/v1/applications: Create access request application
    • GET /api/v1/applications: List user's applications
    • GET /api/v1/applications/{id}: Retrieve application status

CKAN API

  • Documentation: https://docs.ckan.org/en/latest/api/ access at <ckan-base-url>/api/3/action/
  • Example: http://localhost:5000/api/3/action/ for local development
  • Endpoints:
    • GET /api/3/action/enhanced_package_search: Search datasets with GDI User Portal field translations
    • GET /api/3/action/enhanced_package_show: Get dataset details with GDI User Portal field translations

Authentication

All endpoints require authentication except public dataset search:

  • Frontend ↔ Services: Bearer token from Keycloak OIDC flow
  • Service ↔ REMS: API key with user impersonation

Response formats

All services return JSON. Below are examples of typical responses.

{
"data": {...},
"metadata": {
"total": 100,
"page": 1,
"pageSize": 20
}
}

Error responses follow RFC 7807 Problem Details. Example:

{
"type": "about:blank",
"title": "Not Found",
"status": 404,
"detail": "Dataset with ID 'xyz' not found"
}

Testing APIs

Use curl, Postman, or HTTPie to test endpoints:

# Search datasets - Full example
curl -X POST "http://localhost:8080/api/v1/datasets/search" \
-H "Content-Type: application/json" \
-d '{
"query": "genomics",
"rows": 10,
"start": 0,
"operator": "OR",
"includeBeacon": true
}'

# Search datasets - Minimal version
curl -X POST "http://localhost:8080/api/v1/datasets/search" \
-H "Content-Type: application/json" \
-d '{
"query": "genomics"
}'