Transparency API
The Transparency API tracks EU AI Act transparency notices for AI products and exposes a space-level compliance dashboard.
All endpoints below use the public API base path:
/api/v1.0
Scope And Access
Transparency routes are space-scoped and require access to the target space. Product-scoped routes also verify that the product belongs to the requested space.
The API manages notice records only. The Product Detail UI pairs these records with content templates from the Templates API using category transparency_notice, but templates are not required by the Transparency API.
Endpoint Overview
| Method | Endpoint | Description |
|---|---|---|
GET | /catalog/spaces/{space_slug}/products/{product_id}/transparency-notices | List transparency notices for one product. |
PUT | /catalog/spaces/{space_slug}/products/{product_id}/transparency-notices | Replace the product's full transparency notice set. |
GET | /catalog/spaces/{space_slug}/transparency-dashboard | List transparency compliance summaries for AI products in the space. |
Notice Types
notice_type must be one of:
| Value | Obligation area |
|---|---|
ai_interaction | Disclosure that users are interacting with an AI system. |
generated_content | Disclosure or labeling for AI-generated content. |
emotion_recognition | Disclosure for emotion-recognition systems. |
biometric_categorization | Disclosure for biometric-categorization systems. |
deepfake | Disclosure for deepfake or synthetic/manipulated content. |
Notice Statuses
status must be one of:
| Value | Meaning |
|---|---|
implemented | The notice is in place. |
planned | The notice is applicable but not yet implemented. |
not_applicable | The obligation does not apply to the product. |
not_set | No implementation decision has been recorded. |
The Product Detail UI defaults missing notice rows to not_applicable before saving so users can explicitly choose which obligations apply.
List Notices
GET /api/v1.0/catalog/spaces/{space_slug}/products/{product_id}/transparency-notices
Returns the persisted transparency notices for the product. The API does not synthesize missing notice types; clients that want a full five-notice form should merge the response with the known notice-type list.
[
{
"id": "24998731-2492-4e8b-8b52-f376d6c70412",
"product_id": "8da2bc25-6358-4be6-af9a-5e545f00517f",
"notice_type": "ai_interaction",
"status": "implemented",
"url": "https://example.com/customer-risk-ai-notice",
"notes": "Displayed before the user starts the assistant workflow.",
"created_at": "2026-06-29T08:30:00Z",
"updated_at": "2026-06-29T08:35:00Z"
}
]
Replace Notices
PUT /api/v1.0/catalog/spaces/{space_slug}/products/{product_id}/transparency-notices
The update endpoint replaces all existing transparency notices for the product with the notices list in the request. Include every notice row that should remain after the save.
{
"notices": [
{
"notice_type": "ai_interaction",
"status": "implemented",
"url": "https://example.com/customer-risk-ai-notice",
"notes": "Displayed before the user starts the assistant workflow."
},
{
"notice_type": "generated_content",
"status": "planned",
"url": null,
"notes": "Watermarking is planned for the next release."
},
{
"notice_type": "deepfake",
"status": "not_applicable",
"url": null,
"notes": "The product does not generate image, audio, or video content."
}
]
}
Duplicate notice_type values in one request return 400.
On success, the API returns the newly persisted notice rows and emits an audit event with before and after snapshots for resource type transparency_notice.
Transparency Dashboard
GET /api/v1.0/catalog/spaces/{space_slug}/transparency-dashboard
Returns one summary item per AI product in the space. The backend dashboard currently includes products whose product_type is ml_model, llm_agent, or agent.
[
{
"product_id": "8da2bc25-6358-4be6-af9a-5e545f00517f",
"product_name": "Customer Risk Assistant",
"product_type": "llm_agent",
"risk_classification": "limited",
"compliance_status": "incomplete",
"total_notices": 5,
"implemented_count": 2,
"applicable_count": 3
}
]
Dashboard status is derived from applicable notices:
| Status | Rule |
|---|---|
not_set | The product has no applicable notices. This includes products with no persisted notices or only not_applicable notices. |
compliant | Every applicable notice is implemented. |
incomplete | At least one applicable notice is not implemented. |
The frontend computes progress as:
implemented_count / applicable_count
When applicable_count is 0, the progress bar shows 100%, while the compliance status remains not_set.
Failure Cases
| Status | Common cause |
|---|---|
400 | Duplicate notice types in a bulk update. |
403 | Caller does not have access to the requested space. |
404 | Space or product not found, or product does not belong to the space. |
422 | Invalid UUID, notice type, status, or payload shape. |