digna REST API 2026.11¶
The digna REST API lets your own tools and pipelines work with digna over HTTP and JSON: read projects and inspection results, manage data sources, datasets and attributes, and start inspections, for example at the end of a data load. The Python SDK uses the same API.
This page covers what every request has in common. The resource pages list each endpoint with its parameters, request body, responses and schemas:
| Resource | Endpoints |
|---|---|
| Projects | Read projects |
| DB Connections | Read database connections |
| Data Sources | Create, read, update and delete data sources |
| Data Sets | Create, read, update and delete datasets |
| Attributes | Create, read, update and delete attributes |
| Check Definitions | Read check definitions |
| Inspection Requests | Start inspections and follow their progress |
| Inspection Statuses | Read inspection results per project, data source and dataset |
Base URL¶
The API is part of the digna backend. Every path starts with /v1, after the backend's address:
The backend's address is the one the dashboard uses, baseUrl in the [api] section of dashboard/dashboard_config.toml. Use HTTPS whenever the caller and digna are not on the same machine, because every request carries an API key.
Authentication¶
Every request sends the API key of a digna user in the Authorization header:
To create a key, open your user profile in the bottom-left corner of the dashboard, click API Keys, then Add API Key, and copy the key. It is shown only once. The same keys work for the digna MCP Server.
A request runs with the permissions of the key's user. Creating, changing and deleting needs the editor role in the project; otherwise the request is refused with 403 and the message You don't have permission to edit this project.
Use a dedicated user for automation
Create a digna user for each integration, give it only the projects and roles it needs, and create its key with an expiry date. Then you can revoke one integration's access by deleting its key, without affecting anyone else.
Making a Request¶
export DIGNA_API_KEY='<api key>'
curl https://digna.example.com/v1/projects -H "Authorization: Bearer $DIGNA_API_KEY"
Responses are JSON. Lists are returned as a JSON array. Request bodies are JSON as well, sent with Content-Type: application/json.
Limits and Filters¶
List endpoints return at most limit items: 200 by default, and up to 5000. A value outside that range is rejected with 400. There is no offset or page token, so narrow a list with its filters instead, for example project_id, data_source_id, or start_date and end_date on the inspection statuses.
A request that takes longer than 60 seconds is cancelled with 408 Request Timeout.
Errors¶
An error response has a JSON body with a code and a message:
| Status | Code | Meaning |
|---|---|---|
400 | BAD_REQUEST | The request is invalid, for example a limit out of range |
401 | NOT_AUTHENTICATED | The API key is missing, malformed, unknown or expired |
403 | NOT_AUTHORIZED | The key's user lacks the role this request needs |
403 | INVALID_LICENSE | The digna license has expired |
404 | NOT_FOUND | The project, data source or other item doesn't exist |
500 | INTERNAL_ERROR | An unexpected error in digna. The backend log has the details |
The message of a 401 says what is wrong with the key:
| Message | Cause |
|---|---|
Missing Authorization header | No Authorization header was sent |
Invalid Authorization header format | The value doesn't start with Bearer |
Invalid API key | The key is wrong, or it was deleted |
API key expired | The key has expired. Create a new one |
Running an Inspection¶
A typical integration starts an inspection when a data load has finished, waits for it, and reads the result:
- Start the inspection with
POST /v1/inspection-requests. The response holds the request'sid. - Follow its progress with
GET /v1/inspection-requests/{inspection_request_id}. Itsstatusmoves fromPENDINGthroughRUNNINGtoCOMPLETED, or ends asFAILED,ABORTEDorCANCELLED. Ask again every few seconds until it no longer changes. - Read the result with
GET /v1/inspection-statuses/data-sourcesfor the inspected dates. Each item has an overallstatus:0(OK),1(warning),2(critical) or-1(no status), and a status per module with the number of passed, uncertain and failed checks.
curl -X POST https://digna.example.com/v1/inspection-requests \
-H "Authorization: Bearer $DIGNA_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
"project_id": 1,
"include_all_data_sources": true,
"data_source_ids": [],
"start_date": "2026-11-06",
"end_date": "2026-11-06",
"mode": "DAILY",
"weekly_mode_weekdays": [],
"monthly_mode_days": [],
"use_notification": true
}'
OpenAPI Document¶
Every digna installation describes this API in an OpenAPI 3.1 document, and offers an interactive Swagger UI to try requests against it:
| What | Address |
|---|---|
| OpenAPI document | https://digna.example.com/api-docs/stable/v1/openapi.json |
| Swagger UI | https://digna.example.com/v1/swagger-ui |
The document of Release 2026.11 is also available here: openapi.json. Use it to generate a client in another language.
Only the /v1 endpoints are covered
The dashboard also talks to the backend through other, internal endpoints. They are not part of this API and can change with any release, so build integrations on the /v1 endpoints only.