openapi: 3.0.0
info:
title: 'VerifyWise API'
description: 'AI Governance Platform API'
version: 2.0.0
servers:
-
url: /api
description: 'Main API server'
components:
securitySchemes:
bearerAuth:
type: http
scheme: bearer
bearerFormat: JWT
parameters:
ProjectId:
name: id
in: path
required: true
description: 'The numeric project ID'
schema:
type: integer
example: 1
PolicyId:
name: id
in: path
required: true
description: 'Numeric ID of the policy'
schema:
type: integer
example: 42
schemas:
Error:
type: object
properties:
data:
type: string
AiRiskClassification:
type: string
enum:
- Prohibited
- 'High risk'
- 'Limited risk'
- 'Minimal risk'
description: 'EU AI Act risk classification level'
HighRiskRole:
type: string
enum:
- Deployer
- Provider
- Distributor
- Importer
- 'Product manufacturer'
- 'Authorized representative'
description: 'Role of the organization under the EU AI Act for high-risk systems'
ProjectStatus:
type: string
enum:
- 'Not started'
- 'In progress'
- 'Under review'
- Completed
- Closed
- 'On hold'
- Rejected
description: 'Current lifecycle status of the project'
CreateProjectRequest:
type: object
required:
- project_title
- owner
- start_date
- framework
properties:
project_title:
type: string
example: 'Customer Support Chatbot'
owner:
type: integer
example: 1
start_date:
type: string
format: date-time
example: '2026-01-15T00:00:00.000Z'
geography:
type: integer
default: 1
example: 1
ai_risk_classification:
$ref: '#/components/schemas/AiRiskClassification'
type_of_high_risk_role:
$ref: '#/components/schemas/HighRiskRole'
goal:
type: string
nullable: true
example: 'Automate tier-1 support queries'
target_industry:
type: string
nullable: true
example: 'Financial Services'
description:
type: string
nullable: true
example: 'An LLM-powered chatbot for handling customer inquiries'
status:
$ref: '#/components/schemas/ProjectStatus'
is_organizational:
type: boolean
default: false
members:
type: array
items:
type: integer
example:
- 2
- 3
- 5
framework:
type: array
items:
type: integer
example:
- 1
- 2
approval_workflow_id:
type: integer
nullable: true
example: null
enable_ai_data_insertion:
type: boolean
default: false
UpdateProjectRequest:
type: object
properties:
project_title:
type: string
owner:
type: integer
start_date:
type: string
format: date-time
geography:
type: integer
ai_risk_classification:
$ref: '#/components/schemas/AiRiskClassification'
type_of_high_risk_role:
$ref: '#/components/schemas/HighRiskRole'
goal:
type: string
nullable: true
target_industry:
type: string
nullable: true
description:
type: string
nullable: true
status:
$ref: '#/components/schemas/ProjectStatus'
last_updated:
type: string
format: date-time
last_updated_by:
type: integer
members:
type: array
items:
type: integer
example:
- 2
- 3
- 5
ProjectFramework:
type: object
properties:
project_framework_id:
type: integer
framework_id:
type: integer
name:
type: string
example: 'EU AI Act'
Project:
type: object
properties:
id:
type: integer
example: 42
uc_id:
type: string
example: UC-7
project_title:
type: string
example: 'Customer Support Chatbot'
owner:
type: integer
example: 1
start_date:
type: string
format: date-time
geography:
type: integer
example: 1
ai_risk_classification:
$ref: '#/components/schemas/AiRiskClassification'
type_of_high_risk_role:
$ref: '#/components/schemas/HighRiskRole'
goal:
type: string
nullable: true
target_industry:
type: string
nullable: true
description:
type: string
nullable: true
status:
$ref: '#/components/schemas/ProjectStatus'
last_updated:
type: string
format: date-time
last_updated_by:
type: integer
created_at:
type: string
format: date-time
is_organizational:
type: boolean
is_demo:
type: boolean
approval_workflow_id:
type: integer
nullable: true
pending_frameworks:
type: string
nullable: true
enable_ai_data_insertion:
type: boolean
organization_id:
type: integer
framework:
type: array
items:
$ref: '#/components/schemas/ProjectFramework'
members:
type: array
items:
type: integer
ProjectListItem:
allOf:
-
$ref: '#/components/schemas/Project'
-
type: object
properties:
has_pending_approval:
type: boolean
approval_status:
type: string
nullable: true
enum:
- pending
- rejected
- null
_source:
type: string
nullable: true
example: jira-assets
ProjectDetail:
allOf:
-
$ref: '#/components/schemas/Project'
-
type: object
properties:
owner_name:
type: string
example: 'John Doe'
has_pending_approval:
type: boolean
approval_status:
type: string
nullable: true
enum:
- pending
- rejected
- null
ProjectWithMembers:
allOf:
-
$ref: '#/components/schemas/Project'
-
type: object
properties:
members:
type: array
items:
type: integer
ProjectStats:
type: object
properties:
user:
type: object
properties:
name:
type: string
surname:
type: string
email:
type: string
format: email
project_last_updated:
type: string
format: date-time
userWhoUpdated:
type: object
properties:
id:
type: integer
name:
type: string
surname:
type: string
email:
type: string
format: email
ProjectRiskCount:
type: object
properties:
risk_level_autocalculated:
type: string
example: High
count:
type: string
example: '3'
VendorRiskCount:
type: object
properties:
risk_level:
type: string
example: Critical
count:
type: string
example: '2'
ComplianceProgress:
type: object
properties:
allsubControls:
oneOf:
-
type: string
-
type: integer
example: '45'
allDonesubControls:
oneOf:
-
type: string
-
type: integer
example: '12'
AssessmentProgress:
type: object
properties:
totalQuestions:
oneOf:
-
type: string
-
type: integer
example: '80'
answeredQuestions:
oneOf:
-
type: string
-
type: integer
example: '35'
ControlCategory:
type: object
properties:
id:
type: integer
project_id:
type: integer
name:
type: string
organization_id:
type: integer
controls:
type: array
items:
type: object
properties:
id:
type: integer
control_category_id:
type: integer
title:
type: string
description:
type: string
status:
type: string
numberOfSubcontrols:
type: integer
numberOfDoneSubcontrols:
type: integer
subControls:
type: array
items:
type: object
properties: {id: {type: integer}, control_id: {type: integer}, title: {type: string}, description: {type: string}, status: {type: string, enum: [Draft, 'In progress', Done]}, organization_id: {type: integer}}
ErrorResponse:
type: object
properties:
message:
type: string
example: 'Not Found'
data:
example: {}
ServerError:
type: object
properties:
message:
type: string
example: 'Internal Server Error'
error:
type: string
example: 'Unexpected error occurred'
UserSafe:
type: object
description: 'User object with password_hash excluded'
properties:
id:
type: integer
example: 1
name:
type: string
example: John
surname:
type: string
example: Doe
email:
type: string
format: email
example: john@example.com
role_id:
type: integer
description: '1=Admin, 2=Reviewer, 3=Editor, 4=Auditor, 5=SuperAdmin'
example: 1
created_at:
type: string
format: date-time
last_login:
type: string
format: date-time
updated_at:
type: string
format: date-time
is_demo:
type: boolean
default: false
organization_id:
type: integer
nullable: true
example: 1
profile_photo_id:
type: integer
nullable: true
required:
- id
- name
- surname
- email
- role_id
- created_at
StatusEnvelope:
type: object
properties:
message:
type: string
description: 'HTTP status text (e.g. "OK", "Created", "Accepted")'
data:
description: 'Response payload (varies by endpoint)'
ErrorEnvelope:
type: object
properties:
message:
type: string
description: 'HTTP status text or error category'
data:
type: string
description: 'Error detail message'
ProgressResponse:
type: object
properties:
assessmentsMetadata:
type: array
items:
type: object
properties:
projectId:
type: integer
totalAssessments:
type: integer
doneAssessments:
type: integer
controlsMetadata:
type: array
items:
type: object
properties:
projectId:
type: integer
totalSubControls:
type: integer
doneSubControls:
type: integer
allTotalAssessments:
type: integer
allDoneAssessments:
type: integer
allTotalSubControls:
type: integer
allDoneSubControls:
type: integer
Vendor:
type: object
properties:
id:
type: integer
description: 'Auto-generated primary key'
example: 42
order_no:
type: integer
nullable: true
description: 'Display order number'
vendor_name:
type: string
description: 'Name of the vendor'
example: 'Acme Corp'
vendor_provides:
type: string
description: 'What the vendor provides'
example: 'Cloud hosting services'
assignee:
type: integer
description: 'User ID of the assigned owner'
example: 5
website:
type: string
description: 'Vendor website URL'
example: 'https://acme.example.com'
vendor_contact_person:
type: string
description: 'Name of the vendor contact'
example: 'Jane Doe'
review_result:
type: string
nullable: true
description: 'Free-text review result summary'
review_status:
type: string
nullable: true
enum:
- 'Not started'
- 'In review'
- Reviewed
- 'Requires follow-up'
default: 'Not started'
description: 'Current review lifecycle status'
reviewer:
type: integer
nullable: true
description: 'User ID of the reviewer'
review_date:
type: string
format: date-time
nullable: true
description: 'Date the review was performed (ISO 8601)'
is_demo:
type: boolean
default: false
description: 'Whether this is a demo vendor (read-only after creation)'
projects:
type: array
items:
type: integer
description: 'Array of associated project IDs'
data_sensitivity:
type: string
nullable: true
enum:
- None
- 'Internal only'
- 'Personally identifiable information (PII)'
- 'Financial data'
- 'Health data (e.g. HIPAA)'
- 'Model weights or AI assets'
- 'Other sensitive data'
description: 'Scorecard - type of data the vendor accesses'
business_criticality:
type: string
nullable: true
enum:
- 'Low (vendor supports non-core functions)'
- 'Medium (affects operations but is replaceable)'
- 'High (critical to core services or products)'
description: 'Scorecard - how critical the vendor is to operations'
past_issues:
type: string
nullable: true
enum:
- None
- 'Minor incident (e.g. small delay, minor bug)'
- 'Major incident (e.g. data breach, legal issue)'
description: 'Scorecard - history of past incidents'
regulatory_exposure:
type: string
nullable: true
enum:
- None
- 'GDPR (EU)'
- 'HIPAA (US)'
- 'SOC 2'
- 'ISO 27001'
- 'EU AI act'
- 'CCPA (california)'
- Other
description: 'Scorecard - applicable regulatory framework'
risk_score:
type: integer
nullable: true
description: 'Computed risk score for the vendor'
created_at:
type: string
format: date-time
description: 'Creation timestamp (ISO 8601)'
updated_at:
type: string
format: date-time
description: 'Last update timestamp (ISO 8601)'
required:
- vendor_name
- vendor_provides
- assignee
- website
- vendor_contact_person
VendorWithReviewerName:
allOf:
-
$ref: '#/components/schemas/Vendor'
-
type: object
properties:
reviewer_name:
type: string
description: 'Full name of the reviewer (joined from users table)'
example: 'John Smith'
VendorInput:
type: object
required:
- vendor_name
- vendor_provides
- assignee
- website
- vendor_contact_person
properties:
vendor_name:
type: string
description: 'Name of the vendor (required, non-empty)'
vendor_provides:
type: string
description: 'What the vendor provides (required, non-empty)'
assignee:
type: integer
minimum: 1
description: 'User ID of the assigned owner (required, >= 1)'
website:
type: string
description: 'Vendor website URL (required, non-empty)'
vendor_contact_person:
type: string
description: 'Name of the vendor contact (required, non-empty)'
review_result:
type: string
description: 'Free-text review result summary'
review_status:
type: string
enum:
- 'Not started'
- 'In review'
- Reviewed
- 'Requires follow-up'
description: 'Current review lifecycle status'
reviewer:
type: integer
minimum: 1
description: 'User ID of the reviewer'
review_date:
type: string
format: date-time
description: 'Date of the review (ISO 8601)'
order_no:
type: integer
description: 'Display order number'
is_demo:
type: boolean
default: false
description: 'Mark as demo vendor'
projects:
type: array
items:
type: integer
description: 'Array of project IDs to associate'
data_sensitivity:
type: string
enum:
- None
- 'Internal only'
- 'Personally identifiable information (PII)'
- 'Financial data'
- 'Health data (e.g. HIPAA)'
- 'Model weights or AI assets'
- 'Other sensitive data'
business_criticality:
type: string
enum:
- 'Low (vendor supports non-core functions)'
- 'Medium (affects operations but is replaceable)'
- 'High (critical to core services or products)'
past_issues:
type: string
enum:
- None
- 'Minor incident (e.g. small delay, minor bug)'
- 'Major incident (e.g. data breach, legal issue)'
regulatory_exposure:
type: string
enum:
- None
- 'GDPR (EU)'
- 'HIPAA (US)'
- 'SOC 2'
- 'ISO 27001'
- 'EU AI act'
- 'CCPA (california)'
- Other
risk_score:
type: integer
description: 'Computed risk score'
VendorUpdate:
type: object
description: 'All fields are optional. Only provided fields are updated. Review and scorecard fields can be set to null to clear them.'
properties:
vendor_name:
type: string
vendor_provides:
type: string
assignee:
type: integer
minimum: 1
website:
type: string
vendor_contact_person:
type: string
review_result:
type: string
nullable: true
review_status:
type: string
nullable: true
enum:
- 'Not started'
- 'In review'
- Reviewed
- 'Requires follow-up'
reviewer:
type: integer
nullable: true
review_date:
type: string
format: date-time
nullable: true
order_no:
type: integer
projects:
type: array
items:
type: integer
data_sensitivity:
type: string
nullable: true
enum:
- None
- 'Internal only'
- 'Personally identifiable information (PII)'
- 'Financial data'
- 'Health data (e.g. HIPAA)'
- 'Model weights or AI assets'
- 'Other sensitive data'
business_criticality:
type: string
nullable: true
enum:
- 'Low (vendor supports non-core functions)'
- 'Medium (affects operations but is replaceable)'
- 'High (critical to core services or products)'
past_issues:
type: string
nullable: true
enum:
- None
- 'Minor incident (e.g. small delay, minor bug)'
- 'Major incident (e.g. data breach, legal issue)'
regulatory_exposure:
type: string
nullable: true
enum:
- None
- 'GDPR (EU)'
- 'HIPAA (US)'
- 'SOC 2'
- 'ISO 27001'
- 'EU AI act'
- 'CCPA (california)'
- Other
risk_score:
type: integer
nullable: true
ModelInventoryStatus:
type: string
enum:
- Approved
- Restricted
- Pending
- Blocked
- Rejected
description: 'Current approval/review status of the model'
Filedata:
type: object
description: 'Metadata for an uploaded security-assessment file'
properties:
id:
type: integer
description: 'File record ID'
filename:
type: string
description: 'Original file name'
size:
type: integer
description: 'File size in bytes'
mimetype:
type: string
description: 'MIME type (e.g. application/pdf)'
upload_date:
type: string
format: date-time
description: 'ISO 8601 upload timestamp'
uploaded_by:
type: integer
description: 'User ID who uploaded the file'
required:
- id
- filename
- size
- mimetype
- upload_date
- uploaded_by
ModelInventoryResponse:
type: object
description: 'Model inventory record as returned by the API'
properties:
id:
type: integer
description: 'Auto-generated primary key'
example: 42
provider_model:
type: string
nullable: true
description: 'Legacy combined provider+model field (backward compatibility)'
example: 'OpenAI / GPT-4'
provider:
type: string
description: 'Model provider name'
example: OpenAI
model:
type: string
description: 'Model name'
example: GPT-4
version:
type: string
description: 'Model version identifier'
example: turbo-2024-04-09
approver:
type: integer
nullable: true
description: 'User ID of the assigned approver'
example: 7
capabilities:
type: array
items:
type: string
description: "List of capability strings. Stored as comma-separated text in the DB, returned as an array.\n"
example:
- 'Text Generation'
- 'Code Generation'
- Reasoning
security_assessment:
type: boolean
description: 'Whether a security assessment has been completed'
example: false
status:
$ref: '#/components/schemas/ModelInventoryStatus'
status_date:
type: string
format: date-time
description: 'ISO 8601 timestamp of the last status change'
example: '2026-04-15T10:30:00.000Z'
reference_link:
type: string
nullable: true
description: 'URL to external model documentation or model card'
example: 'https://platform.openai.com/docs/models/gpt-4'
biases:
type: string
description: 'Known biases of the model'
example: 'May reflect biases present in training data'
limitations:
type: string
description: 'Known limitations of the model'
example: 'Knowledge cutoff, potential hallucinations'
hosting_provider:
type: string
description: 'Where the model is hosted'
example: 'Azure OpenAI'
security_assessment_data:
type: array
items:
$ref: '#/components/schemas/Filedata'
description: 'Uploaded security assessment file metadata'
is_demo:
type: boolean
description: 'Whether this is a demo/sample record'
example: false
created_at:
type: string
format: date-time
description: 'ISO 8601 creation timestamp'
example: '2026-04-10T08:00:00.000Z'
updated_at:
type: string
format: date-time
description: 'ISO 8601 last-updated timestamp'
example: '2026-04-15T10:30:00.000Z'
projects:
type: array
items:
type: integer
description: 'IDs of projects this model is associated with'
example:
- 1
- 3
frameworks:
type: array
items:
type: integer
description: 'IDs of frameworks this model is associated with'
example:
- 5
ModelInventoryCreateRequest:
type: object
description: 'Request body for creating a new model inventory record'
required:
- provider
- model
- version
- capabilities
- status
- status_date
- reference_link
- biases
- limitations
- hosting_provider
properties:
provider_model:
type: string
description: 'Legacy combined provider+model field (optional, backward compatibility)'
example: 'OpenAI / GPT-4'
provider:
type: string
description: 'Model provider name'
example: OpenAI
model:
type: string
description: 'Model name'
example: GPT-4
version:
type: string
description: 'Model version identifier'
example: turbo-2024-04-09
approver:
type: integer
nullable: true
description: 'User ID of the assigned approver'
example: 7
capabilities:
oneOf:
-
type: string
description: 'Comma-separated capabilities'
-
type: array
items:
type: string
description: 'Array of capability strings'
description: "Accepted as either a comma-separated string or an array of strings. Arrays are joined with \", \" before storage.\n"
example:
- 'Text Generation'
- 'Code Generation'
security_assessment:
type: boolean
description: 'Whether a security assessment has been completed'
default: false
status:
$ref: '#/components/schemas/ModelInventoryStatus'
status_date:
type: string
format: date-time
description: 'ISO 8601 timestamp for the status'
example: '2026-04-15T10:30:00.000Z'
reference_link:
type: string
description: 'URL to external model documentation or model card'
example: 'https://platform.openai.com/docs/models/gpt-4'
biases:
type: string
description: 'Known biases of the model'
example: 'May reflect biases present in training data'
limitations:
type: string
description: 'Known limitations of the model'
example: 'Knowledge cutoff, potential hallucinations'
hosting_provider:
type: string
description: 'Where the model is hosted'
example: 'Azure OpenAI'
security_assessment_data:
type: array
items:
$ref: '#/components/schemas/Filedata'
description: 'Uploaded security assessment file metadata'
default: []
is_demo:
type: boolean
description: 'Whether this is a demo/sample record'
default: false
projects:
type: array
items:
type: integer
description: 'Project IDs to associate with this model'
default: []
example:
- 1
- 3
frameworks:
type: array
items:
type: integer
description: 'Framework IDs to associate with this model'
default: []
example:
- 5
ModelInventoryUpdateRequest:
type: object
description: "Request body for updating a model inventory record. All fields are optional; only provided fields are modified.\n"
properties:
provider_model:
type: string
description: 'Legacy combined provider+model field'
provider:
type: string
description: 'Model provider name'
model:
type: string
description: 'Model name'
version:
type: string
description: 'Model version identifier'
approver:
type: integer
nullable: true
description: 'User ID of the assigned approver'
capabilities:
oneOf:
-
type: string
-
type: array
items:
type: string
description: 'Capabilities (string or array)'
security_assessment:
type: boolean
description: 'Whether a security assessment has been completed'
status:
$ref: '#/components/schemas/ModelInventoryStatus'
status_date:
type: string
format: date-time
description: 'ISO 8601 timestamp for the status'
reference_link:
type: string
description: 'URL to external model documentation'
biases:
type: string
description: 'Known biases of the model'
limitations:
type: string
description: 'Known limitations of the model'
hosting_provider:
type: string
description: 'Where the model is hosted'
security_assessment_data:
type: array
items:
$ref: '#/components/schemas/Filedata'
description: 'Uploaded security assessment file metadata'
is_demo:
type: boolean
description: 'Whether this is a demo/sample record'
projects:
type: array
items:
type: integer
description: "Project IDs to associate. When provided (even empty), replaces all existing project associations.\n"
frameworks:
type: array
items:
type: integer
description: "Framework IDs to associate. When provided (even empty), replaces all existing framework associations.\n"
deleteProjects:
type: boolean
description: "When true, clears all project associations even if projects array is empty. Used to force-delete associations without providing replacements.\n"
default: false
deleteFrameworks:
type: boolean
description: "When true, clears all framework associations even if frameworks array is empty. Used to force-delete associations without providing replacements.\n"
default: false
PolicyWithReviewers:
type: object
description: 'A policy record with computed assigned reviewer IDs'
properties:
id:
type: integer
description: 'Auto-generated primary key'
example: 42
organization_id:
type: integer
description: 'Tenant organization ID'
example: 1
title:
type: string
description: 'Policy title'
example: 'AI Ethics Policy'
content_html:
type: string
description: 'Full policy content as HTML'
example: '
AI Ethics Policy
...
'
status:
type: string
description: 'Policy lifecycle status'
example: draft
tags:
type: array
items:
type: string
enum:
- 'AI ethics'
- Fairness
- Transparency
- Explainability
- 'Bias mitigation'
- Privacy
- 'Data governance'
- 'Model risk'
- Accountability
- Security
- LLM
- 'Human oversight'
- 'EU AI Act'
- 'ISO 42001'
- 'NIST RMF'
- 'Red teaming'
- Audit
- Monitoring
- 'Vendor management'
description: 'Categorization tags'
next_review_date:
type: string
format: date-time
nullable: true
description: 'Scheduled next review date'
author_id:
type: integer
description: 'User ID of the policy creator'
example: 1
last_updated_by:
type: integer
description: 'User ID of the last editor'
example: 1
last_updated_at:
type: string
format: date-time
description: 'Timestamp of last update'
review_status:
type: string
nullable: true
enum:
- pending_review
- approved
- changes_requested
- null
description: 'Current review workflow status'
review_comment:
type: string
nullable: true
description: 'Most recent review comment'
reviewed_by:
type: integer
nullable: true
description: 'User ID of the last reviewer'
reviewed_at:
type: string
format: date-time
nullable: true
description: 'Timestamp of last review action'
is_demo:
type: boolean
description: 'Whether this is a demo/seed policy'
default: false
created_at:
type: string
format: date-time
description: 'Row creation timestamp (set by database)'
assigned_reviewer_ids:
type: array
items:
type: integer
description: 'User IDs of assigned reviewers (aggregated from mapping table)'
example:
- 2
- 5
PolicyCreateRequest:
type: object
required:
- title
- content_html
- status
properties:
title:
type: string
description: 'Policy title'
example: 'Data Governance Policy'
content_html:
type: string
description: 'Full policy content as HTML'
example: 'Data Governance
This policy outlines...
'
status:
type: string
description: 'Initial policy status'
example: draft
tags:
type: array
items:
type: string
description: 'Categorization tags (must be from the allowed tag list)'
example:
- 'Data governance'
- Privacy
next_review_date:
type: string
format: date-time
nullable: true
description: 'Scheduled next review date'
example: '2026-07-01T00:00:00.000Z'
assigned_reviewer_ids:
type: array
items:
type: integer
description: 'User IDs to assign as reviewers'
example:
- 2
- 5
is_demo:
type: boolean
description: 'Mark as a demo policy'
default: false
PolicyUpdateRequest:
type: object
description: 'All fields are optional. Only provided fields are updated.'
properties:
title:
type: string
description: 'Updated policy title'
content_html:
type: string
description: 'Updated policy content as HTML'
status:
type: string
description: 'Updated policy status'
tags:
type: array
items:
type: string
description: 'Replacement tag list (must be from the allowed tag list)'
next_review_date:
type: string
format: date-time
nullable: true
description: 'Updated next review date'
assigned_reviewer_ids:
type: array
items:
type: integer
description: 'Replacement reviewer list (fully replaces existing reviewers)'
ProjectRiskInput:
type: object
required:
- risk_name
- risk_owner
- risk_description
properties:
risk_name:
type: string
description: 'Name/title of the risk.'
risk_owner:
type: integer
description: 'User ID of the risk owner (must be >= 1).'
ai_lifecycle_phase:
type: string
enum:
- 'Problem definition & planning'
- 'Data collection & processing'
- 'Model development & training'
- 'Model validation & testing'
- 'Deployment & integration'
- 'Monitoring & maintenance'
- 'Decommissioning & retirement'
risk_description:
type: string
description: 'Detailed description of the risk.'
risk_category:
type: array
items:
type: string
description: 'Array of category labels.'
impact:
type: string
assessment_mapping:
type: string
controls_mapping:
type: string
likelihood:
type: string
enum:
- Rare
- Unlikely
- Possible
- Likely
- 'Almost Certain'
severity:
type: string
enum:
- Negligible
- Minor
- Moderate
- Major
- Catastrophic
risk_level_autocalculated:
type: string
enum:
- 'No risk'
- 'Very low risk'
- 'Low risk'
- 'Medium risk'
- 'High risk'
- 'Very high risk'
review_notes:
type: string
mitigation_status:
type: string
enum:
- 'Not Started'
- 'In Progress'
- Completed
- 'On Hold'
- Deferred
- Canceled
- 'Requires review'
current_risk_level:
type: string
enum:
- 'Very Low risk'
- 'Low risk'
- 'Medium risk'
- 'High risk'
- 'Very high risk'
deadline:
type: string
format: date-time
mitigation_plan:
type: string
implementation_strategy:
type: string
mitigation_evidence_document:
type: string
likelihood_mitigation:
type: string
enum:
- Rare
- Unlikely
- Possible
- Likely
- 'Almost Certain'
risk_severity:
type: string
enum:
- Negligible
- Minor
- Moderate
- Major
- Critical
final_risk_level:
type: string
risk_approval:
type: integer
description: 'User ID of the approver.'
approval_status:
type: string
date_of_assessment:
type: string
format: date-time
is_demo:
type: boolean
default: false
projects:
type: array
items:
type: integer
description: 'Array of project IDs to link this risk to.'
frameworks:
type: array
items:
type: integer
description: 'Array of framework IDs to link this risk to.'
event_frequency_min:
type: number
nullable: true
event_frequency_likely:
type: number
nullable: true
event_frequency_max:
type: number
nullable: true
loss_regulatory_min:
type: number
nullable: true
loss_regulatory_likely:
type: number
nullable: true
loss_regulatory_max:
type: number
nullable: true
loss_operational_min:
type: number
nullable: true
loss_operational_likely:
type: number
nullable: true
loss_operational_max:
type: number
nullable: true
loss_litigation_min:
type: number
nullable: true
loss_litigation_likely:
type: number
nullable: true
loss_litigation_max:
type: number
nullable: true
loss_reputational_min:
type: number
nullable: true
loss_reputational_likely:
type: number
nullable: true
loss_reputational_max:
type: number
nullable: true
control_effectiveness:
type: number
nullable: true
description: 'Percentage 0-100.'
mitigation_cost_annual:
type: number
nullable: true
benchmark_id:
type: integer
nullable: true
currency:
type: string
nullable: true
default: USD
maxLength: 3
ProjectRiskResponse:
allOf:
-
$ref: '#/components/schemas/ProjectRiskInput'
-
type: object
properties:
id:
type: integer
created_at:
type: string
format: date-time
updated_at:
type: string
format: date-time
total_loss_likely:
type: number
nullable: true
ale_estimate:
type: number
nullable: true
residual_ale:
type: number
nullable: true
roi_percentage:
type: number
nullable: true
projects:
type: array
items:
type: integer
frameworks:
type: array
items:
type: integer
subClauses:
type: array
items:
type: object
annexCategories:
type: array
items:
type: object
controls:
type: array
items:
type: object
assessments:
type: array
items:
type: object
annexControls_27001:
type: array
items:
type: object
subClauses_27001:
type: array
items:
type: object
VendorRiskInput:
type: object
required:
- vendor_id
- risk_description
- impact_description
- likelihood
- risk_severity
- action_plan
- action_owner
- risk_level
properties:
vendor_id:
type: integer
description: 'ID of the vendor this risk belongs to.'
order_no:
type: integer
nullable: true
description: 'Optional ordering number.'
risk_description:
type: string
impact_description:
type: string
likelihood:
type: string
enum:
- Rare
- Unlikely
- Possible
- Likely
- 'Almost certain'
risk_severity:
type: string
enum:
- Negligible
- Minor
- Moderate
- Major
- Catastrophic
action_plan:
type: string
action_owner:
type: integer
description: 'User ID of the action owner.'
risk_level:
type: string
description: 'Free-text risk level.'
is_demo:
type: boolean
default: false
VendorRiskResponse:
type: object
properties:
id:
type: integer
vendor_id:
type: integer
order_no:
type: integer
nullable: true
risk_description:
type: string
impact_description:
type: string
impact:
type: string
nullable: true
likelihood:
type: string
enum:
- Rare
- Unlikely
- Possible
- Likely
- 'Almost certain'
risk_severity:
type: string
enum:
- Negligible
- Minor
- Moderate
- Major
- Catastrophic
action_plan:
type: string
action_owner:
type: integer
risk_level:
type: string
is_demo:
type: boolean
created_at:
type: string
format: date-time
updated_at:
type: string
format: date-time
VendorRiskAllProjectsResponse:
description: 'Extended vendor risk with joined vendor/project info.'
type: object
properties:
risk_id:
type: integer
vendor_id:
type: integer
order_no:
type: integer
nullable: true
risk_description:
type: string
impact_description:
type: string
likelihood:
type: string
risk_severity:
type: string
action_plan:
type: string
action_owner:
type: integer
risk_level:
type: string
is_demo:
type: boolean
created_at:
type: string
format: date-time
updated_at:
type: string
format: date-time
is_deleted:
type: boolean
deleted_at:
type: string
format: date-time
nullable: true
vendor_name:
type: string
project_id:
type: integer
nullable: true
project_title:
type: string
nullable: true
ModelRiskInput:
type: object
required:
- risk_name
- risk_category
- risk_level
- owner
- target_date
properties:
risk_name:
type: string
risk_category:
type: string
enum:
- Performance
- 'Bias & Fairness'
- Security
- 'Data Quality'
- Compliance
risk_level:
type: string
enum:
- Low
- Medium
- High
- Critical
status:
type: string
enum:
- Open
- 'In Progress'
- Resolved
- Accepted
default: Open
owner:
type: string
description: 'Name or identifier of the risk owner.'
target_date:
type: string
format: date
description: 'Next review / target date.'
description:
type: string
mitigation_plan:
type: string
impact:
type: string
likelihood:
type: string
key_metrics:
type: string
current_values:
type: string
threshold:
type: string
model_id:
type: integer
nullable: true
description: 'ID of the model inventory entry this risk is linked to.'
is_demo:
type: boolean
default: false
ModelRiskResponse:
type: object
properties:
id:
type: integer
risk_name:
type: string
risk_category:
type: string
enum:
- Performance
- 'Bias & Fairness'
- Security
- 'Data Quality'
- Compliance
risk_level:
type: string
enum:
- Low
- Medium
- High
- Critical
status:
type: string
enum:
- Open
- 'In Progress'
- Resolved
- Accepted
owner:
type: string
target_date:
type: string
format: date
description:
type: string
mitigation_plan:
type: string
impact:
type: string
likelihood:
type: string
key_metrics:
type: string
current_values:
type: string
threshold:
type: string
model_id:
type: integer
nullable: true
created_at:
type: string
format: date-time
updated_at:
type: string
format: date-time
SuccessResponse:
type: object
properties:
status:
type: string
example: success
data:
description: 'Response payload (type varies per endpoint)'
ValidationErrorResponse:
type: object
properties:
status:
type: string
example: error
message:
type: string
example: 'Dataset creation validation failed'
errors:
type: array
items:
type: object
properties:
field:
type: string
message:
type: string
code:
type: string
Evidence:
type: object
properties:
id:
type: integer
evidence_name:
type: string
evidence_type:
type: string
description:
type: string
nullable: true
evidence_files:
type: array
items:
$ref: '#/components/schemas/FileResponse'
expiry_date:
type: string
format: date-time
nullable: true
mapped_model_ids:
type: array
items:
type: integer
nullable: true
created_at:
type: string
format: date-time
updated_at:
type: string
format: date-time
FileResponse:
type: object
properties:
id:
oneOf:
-
type: string
-
type: integer
filename:
type: string
size:
oneOf:
-
type: number
-
type: string
mimetype:
type: string
uploaded_by:
type: integer
upload_date:
type: string
EvidenceCreateRequest:
type: object
required:
- evidence_name
- evidence_type
properties:
evidence_name:
type: string
maxLength: 255
evidence_type:
type: string
maxLength: 100
description:
type: string
nullable: true
evidence_files:
type: array
items:
type: object
properties:
id:
oneOf:
- {type: string}
- {type: integer}
description: 'Array of file references (by ID) to link'
expiry_date:
type: string
format: date-time
nullable: true
mapped_model_ids:
type: array
items:
type: integer
description: 'Model inventory IDs to map this evidence to'
EvidenceUpdateRequest:
type: object
properties:
evidence_name:
type: string
maxLength: 255
evidence_type:
type: string
maxLength: 100
description:
type: string
nullable: true
evidence_files:
type: array
items:
type: object
properties:
id:
oneOf:
- {type: string}
- {type: integer}
description: 'New files to link'
deleteFiles:
type: array
items:
oneOf:
-
type: string
-
type: integer
description: 'File IDs to unlink'
expiry_date:
type: string
format: date-time
nullable: true
mapped_model_ids:
type: array
items:
type: integer
Dataset:
type: object
properties:
id:
type: integer
name:
type: string
description:
type: string
version:
type: string
owner:
type: string
type:
type: string
enum:
- training
- validation
- testing
- production
- reference
- synthetic
function:
type: string
source:
type: string
license:
type: string
nullable: true
format:
type: string
nullable: true
classification:
type: string
enum:
- public
- internal
- confidential
- restricted
contains_pii:
type: boolean
pii_types:
type: string
nullable: true
status:
type: string
enum:
- draft
- active
- deprecated
- archived
status_date:
type: string
format: date-time
known_biases:
type: string
nullable: true
bias_mitigation:
type: string
nullable: true
collection_method:
type: string
nullable: true
preprocessing_steps:
type: string
nullable: true
documentation_data:
type: array
items:
$ref: '#/components/schemas/DocumentationFile'
is_demo:
type: boolean
created_at:
type: string
format: date-time
updated_at:
type: string
format: date-time
models:
type: array
items:
type: integer
description: 'Related model inventory IDs'
projects:
type: array
items:
type: integer
description: 'Related project IDs'
DocumentationFile:
type: object
description: 'File metadata stored in JSONB documentation_data column'
properties:
id:
type: string
filename:
type: string
size:
type: number
mimetype:
type: string
DatasetCreateRequest:
type: object
required:
- name
- description
- version
- owner
- type
- function
- source
- classification
- contains_pii
- status
properties:
name:
type: string
maxLength: 255
description:
type: string
version:
type: string
maxLength: 50
owner:
type: string
maxLength: 255
type:
type: string
enum:
- training
- validation
- testing
- production
- reference
- synthetic
function:
type: string
source:
type: string
maxLength: 255
license:
type: string
maxLength: 255
format:
type: string
maxLength: 100
classification:
type: string
enum:
- public
- internal
- confidential
- restricted
contains_pii:
type: boolean
pii_types:
type: string
status:
type: string
enum:
- draft
- active
- deprecated
- archived
status_date:
type: string
format: date-time
description: 'Defaults to current time if omitted'
known_biases:
type: string
bias_mitigation:
type: string
collection_method:
type: string
preprocessing_steps:
type: string
documentation_data:
type: array
items:
$ref: '#/components/schemas/DocumentationFile'
is_demo:
type: boolean
default: false
models:
type: array
items:
type: integer
description: 'Model inventory IDs to associate'
projects:
type: array
items:
type: integer
description: 'Project IDs to associate'
DatasetUpdateRequest:
type: object
description: 'All fields optional. Only provided fields are updated.'
properties:
name:
type: string
maxLength: 255
description:
type: string
version:
type: string
maxLength: 50
owner:
type: string
maxLength: 255
type:
type: string
enum:
- training
- validation
- testing
- production
- reference
- synthetic
function:
type: string
source:
type: string
maxLength: 255
license:
type: string
maxLength: 255
format:
type: string
maxLength: 100
classification:
type: string
enum:
- public
- internal
- confidential
- restricted
contains_pii:
type: boolean
pii_types:
type: string
status:
type: string
enum:
- draft
- active
- deprecated
- archived
status_date:
type: string
format: date-time
known_biases:
type: string
bias_mitigation:
type: string
collection_method:
type: string
preprocessing_steps:
type: string
documentation_data:
type: array
items:
$ref: '#/components/schemas/DocumentationFile'
is_demo:
type: boolean
models:
type: array
items:
type: integer
description: 'Replace model associations (provide full list)'
projects:
type: array
items:
type: integer
description: 'Replace project associations (provide full list)'
deleteModels:
type: boolean
description: 'If true, remove all model associations (even if models array is empty)'
deleteProjects:
type: boolean
description: 'If true, remove all project associations (even if projects array is empty)'
DatasetChangeHistoryEntry:
type: object
properties:
id:
type: integer
dataset_id:
type: integer
change_type:
type: string
description: 'e.g. created, deleted, field_change'
field_name:
type: string
nullable: true
old_value:
type: string
nullable: true
new_value:
type: string
nullable: true
changed_by:
type: integer
nullable: true
created_at:
type: string
format: date-time
AutomationTrigger:
type: object
properties:
id:
type: integer
key:
type: string
description: 'Machine-readable trigger identifier'
label:
type: string
description: 'Human-readable name'
event_name:
type: string
description:
type: string
nullable: true
AutomationAction:
type: object
properties:
id:
type: integer
key:
type: string
description: 'Machine-readable action identifier'
label:
type: string
description: 'Human-readable name'
description:
type: string
nullable: true
default_params:
type: object
nullable: true
description: 'Default parameters for this action type'
Automation:
type: object
properties:
id:
type: integer
name:
type: string
trigger_id:
type: integer
params:
type: object
description: 'Trigger-specific parameters (JSON)'
is_active:
type: boolean
created_by:
type: integer
nullable: true
created_at:
type: string
format: date-time
updated_at:
type: string
format: date-time
AutomationWithActions:
allOf:
-
$ref: '#/components/schemas/Automation'
-
type: object
properties:
actions:
type: array
items:
$ref: '#/components/schemas/TenantAutomationAction'
TenantAutomationAction:
type: object
properties:
id:
type: integer
automation_id:
type: integer
action_type_id:
type: integer
params:
type: object
nullable: true
description: 'Action-specific parameters (JSON)'
order:
type: integer
description: 'Execution order (1-based)'
AutomationCreateRequest:
type: object
required:
- triggerId
- name
- actions
properties:
triggerId:
type: integer
description: 'ID of the automation trigger'
name:
type: string
description: 'Automation name'
params:
type: string
description: 'JSON-encoded trigger parameters (parsed server-side)'
default: '{}'
actions:
type: array
minItems: 1
items:
type: object
required:
- action_type_id
properties:
action_type_id:
type: integer
description: 'ID of the action type'
params:
type: object
nullable: true
description: 'Action-specific parameters'
AutomationUpdateRequest:
type: object
properties:
name:
type: string
triggerId:
type: integer
params:
type: string
description: 'JSON-encoded trigger parameters'
default: '{}'
is_active:
type: boolean
actions:
type: array
items:
type: object
required:
- action_type_id
properties:
action_type_id:
type: integer
params:
type: object
nullable: true
description: 'If provided, replaces all existing actions'
AutomationHistoryResponse:
type: object
properties:
logs:
type: array
items:
type: object
properties:
id:
type: integer
automation_id:
type: integer
status:
type: string
triggered_at:
type: string
format: date-time
completed_at:
type: string
format: date-time
nullable: true
actions:
type: array
items:
type: object
description: 'Per-action execution results'
total:
type: integer
description: 'Total number of log entries'
limit:
type: integer
offset:
type: integer
AutomationStats:
type: object
description: 'Aggregated execution statistics for an automation'
properties:
total_executions:
type: integer
successful:
type: integer
failed:
type: integer
last_executed_at:
type: string
format: date-time
ApiResponse:
type: object
properties:
statusCode:
type: integer
data:
description: 'Response payload (varies by endpoint)'
Pagination:
type: object
properties:
total:
type: integer
page:
type: integer
limit:
type: integer
total_pages:
type: integer
ScanStatus:
type: string
enum:
- pending
- cloning
- scanning
- completed
- failed
- cancelled
ScanMode:
type: string
enum:
- full
- incremental
FindingStatus:
type: string
enum:
- active
- fixed
- carried_forward
FindingType:
type: string
enum:
- library
- dependency
- api_call
- secret
- model_ref
- rag_component
- agent
- prompt_injection
- pii_exposure
- excessive_agency
- jailbreak_risk
- training_data_poisoning
- model_dos
- supply_chain
- insecure_plugin
- overreliance
- model_theft
ConfidenceLevel:
type: string
enum:
- high
- medium
- low
RiskLevel:
type: string
enum:
- high
- medium
- low
GovernanceStatus:
type: string
enum:
- reviewed
- approved
- flagged
nullable: true
LicenseRiskLevel:
type: string
enum:
- high
- medium
- low
- unknown
StartScanRequest:
type: object
required:
- repository_url
properties:
repository_url:
type: string
description: 'GitHub repository URL'
example: 'https://github.com/owner/repo'
scan_mode:
$ref: '#/components/schemas/ScanMode'
base_commit_sha:
type: string
pattern: '^[0-9a-fA-F]{7,40}$'
description: 'Required for incremental scans'
head_commit_sha:
type: string
pattern: '^[0-9a-fA-F]{7,40}$'
description: 'Required for incremental scans'
ScanStatusResponse:
type: object
properties:
id:
type: integer
status:
$ref: '#/components/schemas/ScanStatus'
progress:
type: number
format: float
current_file:
type: string
files_scanned:
type: integer
total_files:
type: integer
nullable: true
findings_count:
type: integer
error_message:
type: string
nullable: true
TriggeredByUser:
type: object
properties:
id:
type: integer
name:
type: string
surname:
type: string
ScanResponse:
type: object
properties:
scan:
type: object
properties:
id:
type: integer
repository_url:
type: string
repository_owner:
type: string
repository_name:
type: string
status:
$ref: '#/components/schemas/ScanStatus'
findings_count:
type: integer
files_scanned:
type: integer
started_at:
type: string
format: date-time
nullable: true
completed_at:
type: string
format: date-time
nullable: true
duration_ms:
type: integer
nullable: true
error_message:
type: string
nullable: true
triggered_by:
$ref: '#/components/schemas/TriggeredByUser'
risk_score:
type: number
nullable: true
risk_score_grade:
type: string
nullable: true
risk_score_details:
type: object
nullable: true
risk_score_calculated_at:
type: string
format: date-time
nullable: true
scan_mode:
$ref: '#/components/schemas/ScanMode'
base_commit_sha:
type: string
nullable: true
head_commit_sha:
type: string
nullable: true
baseline_scan_id:
type: integer
nullable: true
changed_files_count:
type: integer
nullable: true
created_at:
type: string
format: date-time
summary:
$ref: '#/components/schemas/ScanSummary'
ScanSummary:
type: object
properties:
total:
type: integer
by_confidence:
type: object
properties:
high:
type: integer
medium:
type: integer
low:
type: integer
by_provider:
type: object
additionalProperties:
type: integer
ScanListItem:
type: object
properties:
id:
type: integer
repository_url:
type: string
repository_owner:
type: string
repository_name:
type: string
status:
$ref: '#/components/schemas/ScanStatus'
findings_count:
type: integer
files_scanned:
type: integer
started_at:
type: string
format: date-time
nullable: true
completed_at:
type: string
format: date-time
nullable: true
duration_ms:
type: integer
nullable: true
triggered_by:
$ref: '#/components/schemas/TriggeredByUser'
risk_score:
type: number
nullable: true
risk_score_grade:
type: string
nullable: true
scan_mode:
$ref: '#/components/schemas/ScanMode'
baseline_scan_id:
type: integer
nullable: true
changed_files_count:
type: integer
nullable: true
created_at:
type: string
format: date-time
ScansResponse:
type: object
properties:
scans:
type: array
items:
$ref: '#/components/schemas/ScanListItem'
pagination:
$ref: '#/components/schemas/Pagination'
CancelScanResponse:
type: object
properties:
id:
type: integer
status:
type: string
enum:
- cancelled
message:
type: string
DeleteScanResponse:
type: object
properties:
message:
type: string
FilePath:
type: object
properties:
path:
type: string
line_number:
type: integer
nullable: true
matched_text:
type: string
Finding:
type: object
properties:
id:
type: integer
finding_type:
$ref: '#/components/schemas/FindingType'
category:
type: string
name:
type: string
provider:
type: string
confidence:
$ref: '#/components/schemas/ConfidenceLevel'
risk_level:
$ref: '#/components/schemas/RiskLevel'
description:
type: string
nullable: true
documentation_url:
type: string
nullable: true
file_count:
type: integer
file_paths:
type: array
items:
$ref: '#/components/schemas/FilePath'
governance_status:
$ref: '#/components/schemas/GovernanceStatus'
governance_updated_at:
type: string
format: date-time
nullable: true
governance_updated_by:
type: integer
nullable: true
license_id:
type: string
nullable: true
license_name:
type: string
nullable: true
license_risk:
$ref: '#/components/schemas/LicenseRiskLevel'
license_source:
type: string
enum:
- package
- huggingface
- pypi
- npm
- manual
nullable: true
mitigation:
type: string
nullable: true
data_flow_summary:
type: string
nullable: true
vulnerability_details:
type: object
nullable: true
finding_status:
$ref: '#/components/schemas/FindingStatus'
FindingsResponse:
type: object
properties:
findings:
type: array
items:
$ref: '#/components/schemas/Finding'
pagination:
$ref: '#/components/schemas/Pagination'
UpdateGovernanceStatusRequest:
type: object
properties:
governance_status:
type: string
enum:
- reviewed
- approved
- flagged
nullable: true
description: 'Set to null to clear governance status'
UpdateGovernanceStatusResponse:
type: object
properties:
id:
type: integer
governance_status:
type: string
nullable: true
governance_updated_at:
type: string
format: date-time
governance_updated_by:
type: integer
RiskScoreResponse:
type: object
properties:
score:
type: number
nullable: true
grade:
type: string
nullable: true
details:
type: object
nullable: true
calculated_at:
type: string
format: date-time
nullable: true
DimensionWeights:
type: object
properties:
data_sovereignty:
type: number
minimum: 0
maximum: 1
transparency:
type: number
minimum: 0
maximum: 1
security:
type: number
minimum: 0
maximum: 1
autonomy:
type: number
minimum: 0
maximum: 1
supply_chain:
type: number
minimum: 0
maximum: 1
description: 'All values must sum to 1.0'
VulnerabilityTypesEnabled:
type: object
properties:
prompt_injection:
type: boolean
pii_exposure:
type: boolean
excessive_agency:
type: boolean
jailbreak_risk:
type: boolean
training_data_poisoning:
type: boolean
model_dos:
type: boolean
supply_chain:
type: boolean
insecure_plugin:
type: boolean
overreliance:
type: boolean
model_theft:
type: boolean
RiskScoringConfig:
type: object
properties:
id:
type: integer
nullable: true
llm_enabled:
type: boolean
llm_key_id:
type: integer
nullable: true
dimension_weights:
$ref: '#/components/schemas/DimensionWeights'
vulnerability_scan_enabled:
type: boolean
vulnerability_types_enabled:
$ref: '#/components/schemas/VulnerabilityTypesEnabled'
updated_by:
type: integer
nullable: true
updated_at:
type: string
format: date-time
nullable: true
UpdateRiskScoringConfigRequest:
type: object
properties:
llm_enabled:
type: boolean
llm_key_id:
type: integer
nullable: true
dimension_weights:
$ref: '#/components/schemas/DimensionWeights'
vulnerability_scan_enabled:
type: boolean
vulnerability_types_enabled:
$ref: '#/components/schemas/VulnerabilityTypesEnabled'
DependencyGraphResponse:
type: object
properties:
nodes:
type: array
items:
type: object
properties:
id:
type: string
label:
type: string
type:
type: string
metadata:
type: object
edges:
type: array
items:
type: object
properties:
source:
type: string
target:
type: string
relationship:
type: string
metadata:
type: object
ComplianceMappingResponse:
type: object
properties:
mappings:
type: array
items:
type: object
checklist:
type: array
items:
type: object
summary:
type: object
Repository:
type: object
properties:
id:
type: integer
repository_url:
type: string
repository_owner:
type: string
repository_name:
type: string
display_name:
type: string
nullable: true
default_branch:
type: string
github_token_id:
type: integer
nullable: true
schedule_enabled:
type: boolean
schedule_frequency:
type: string
enum:
- daily
- weekly
- monthly
nullable: true
schedule_day_of_week:
type: integer
minimum: 0
maximum: 6
nullable: true
schedule_day_of_month:
type: integer
minimum: 1
maximum: 31
nullable: true
schedule_hour:
type: integer
minimum: 0
maximum: 23
schedule_minute:
type: integer
minimum: 0
maximum: 59
webhook_secret:
type: string
nullable: true
ci_enabled:
type: boolean
ci_min_score:
type: number
ci_max_critical:
type: integer
ci_post_comments:
type: boolean
ci_status_checks:
type: boolean
last_scan_id:
type: integer
nullable: true
last_scan_status:
type: string
nullable: true
last_scan_at:
type: string
format: date-time
nullable: true
next_scan_at:
type: string
format: date-time
nullable: true
is_enabled:
type: boolean
created_by:
type: integer
created_at:
type: string
format: date-time
updated_at:
type: string
format: date-time
CreateRepositoryRequest:
type: object
required:
- repository_url
properties:
repository_url:
type: string
description: 'GitHub repository URL'
example: 'https://github.com/owner/repo'
display_name:
type: string
nullable: true
default_branch:
type: string
default: main
github_token_id:
type: integer
nullable: true
schedule_enabled:
type: boolean
default: false
schedule_frequency:
type: string
enum:
- daily
- weekly
- monthly
description: 'Required when schedule_enabled is true'
schedule_day_of_week:
type: integer
minimum: 0
maximum: 6
description: 'Required for weekly schedule (0=Sunday)'
schedule_day_of_month:
type: integer
minimum: 1
maximum: 31
description: 'Required for monthly schedule'
schedule_hour:
type: integer
minimum: 0
maximum: 23
default: 2
schedule_minute:
type: integer
minimum: 0
maximum: 59
default: 0
UpdateRepositoryRequest:
type: object
properties:
display_name:
type: string
nullable: true
default_branch:
type: string
github_token_id:
type: integer
nullable: true
schedule_enabled:
type: boolean
schedule_frequency:
type: string
enum:
- daily
- weekly
- monthly
schedule_day_of_week:
type: integer
minimum: 0
maximum: 6
schedule_day_of_month:
type: integer
minimum: 1
maximum: 31
schedule_hour:
type: integer
minimum: 0
maximum: 23
schedule_minute:
type: integer
minimum: 0
maximum: 59
is_enabled:
type: boolean
ci_enabled:
type: boolean
ci_min_score:
type: number
ci_max_critical:
type: integer
ci_post_comments:
type: boolean
ci_status_checks:
type: boolean
RepositoryListResponse:
type: object
properties:
repositories:
type: array
items:
$ref: '#/components/schemas/Repository'
pagination:
$ref: '#/components/schemas/Pagination'
AITrustCentreOverview:
type: object
description: 'Full overview with all sections'
properties:
intro:
type: object
properties:
id:
type: integer
purpose_visible:
type: boolean
purpose_text:
type: string
our_statement_visible:
type: boolean
our_statement_text:
type: string
our_mission_visible:
type: boolean
our_mission_text:
type: string
compliance_badges:
type: object
properties:
id:
type: integer
soc2_type_i:
type: boolean
soc2_type_ii:
type: boolean
iso_27001:
type: boolean
iso_42001:
type: boolean
ccpa:
type: boolean
gdpr:
type: boolean
hipaa:
type: boolean
eu_ai_act:
type: boolean
company_description:
type: object
properties:
id:
type: integer
background_visible:
type: boolean
background_text:
type: string
core_benefits_visible:
type: boolean
core_benefits_text:
type: string
compliance_doc_visible:
type: boolean
compliance_doc_text:
type: string
terms_and_contact:
type: object
properties:
id:
type: integer
terms_visible:
type: boolean
terms_text:
type: string
privacy_visible:
type: boolean
privacy_text:
type: string
email_visible:
type: boolean
email_text:
type: string
info:
type: object
properties:
id:
type: integer
title:
type: string
header_color:
type: string
visible:
type: boolean
intro_visible:
type: boolean
compliance_badges_visible:
type: boolean
company_description_visible:
type: boolean
terms_and_contact_visible:
type: boolean
resources_visible:
type: boolean
subprocessor_visible:
type: boolean
updated_at:
type: string
format: date-time
AITrustCentreResource:
type: object
properties:
id:
type: integer
organization_id:
type: integer
name:
type: string
description:
type: string
file_id:
type: integer
visible:
type: boolean
filename:
type: string
AITrustCentreSubprocessor:
type: object
properties:
id:
type: integer
organization_id:
type: integer
name:
type: string
purpose:
type: string
location:
type: string
url:
type: string
CreateSubprocessorRequest:
type: object
required:
- name
- purpose
- location
properties:
name:
type: string
purpose:
type: string
location:
type: string
url:
type: string
UpdateSubprocessorRequest:
type: object
properties:
name:
type: string
purpose:
type: string
location:
type: string
url:
type: string
AITrustCentrePublicPage:
type: object
description: 'Conditionally includes sections based on visibility settings'
properties:
info:
type: object
properties:
title:
type: string
header_color:
type: string
logo:
type: integer
nullable: true
intro:
type: object
nullable: true
properties:
purpose:
type: string
nullable: true
statement:
type: string
nullable: true
mission:
type: string
nullable: true
compliance_badges:
type: object
nullable: true
properties:
soc2_type_i:
type: boolean
soc2_type_ii:
type: boolean
iso_27001:
type: boolean
iso_42001:
type: boolean
ccpa:
type: boolean
gdpr:
type: boolean
hipaa:
type: boolean
eu_ai_act:
type: boolean
company_description:
type: object
nullable: true
properties:
background:
type: string
nullable: true
core_benefits:
type: string
nullable: true
compliance_doc:
type: string
nullable: true
terms_and_contact:
type: object
nullable: true
properties:
terms:
type: string
nullable: true
privacy:
type: string
nullable: true
email:
type: string
nullable: true
resources:
type: array
nullable: true
items:
type: object
properties:
id:
type: integer
name:
type: string
description:
type: string
file_id:
type: integer
visible:
type: boolean
subprocessors:
type: array
nullable: true
items:
type: object
properties:
id:
type: integer
name:
type: string
purpose:
type: string
location:
type: string
url:
type: string
IncidentType:
type: string
enum:
- Malfunction
- 'Unexpected behavior'
- 'Model drift'
- Misuse
- 'Data corruption'
- 'Security breach'
- 'Performance degradation'
IncidentSeverity:
type: string
enum:
- Minor
- Serious
- 'Very serious'
IncidentStatus:
type: string
enum:
- Open
- Investigating
- Mitigated
- Closed
IncidentApprovalStatus:
type: string
enum:
- Approved
- Rejected
- Pending
- 'Not required'
Incident:
type: object
properties:
id:
type: integer
incident_id:
type: string
nullable: true
ai_project:
type: string
type:
$ref: '#/components/schemas/IncidentType'
severity:
$ref: '#/components/schemas/IncidentSeverity'
status:
$ref: '#/components/schemas/IncidentStatus'
occurred_date:
type: string
format: date-time
date_detected:
type: string
format: date-time
reporter:
type: string
categories_of_harm:
type: array
items:
type: string
affected_persons_groups:
type: string
nullable: true
description:
type: string
relationship_causality:
type: string
nullable: true
immediate_mitigations:
type: string
nullable: true
planned_corrective_actions:
type: string
nullable: true
model_system_version:
type: string
nullable: true
interim_report:
type: boolean
archived:
type: boolean
approval_status:
$ref: '#/components/schemas/IncidentApprovalStatus'
approved_by:
type: string
nullable: true
approval_date:
type: string
format: date-time
nullable: true
approval_notes:
type: string
nullable: true
created_at:
type: string
format: date-time
updated_at:
type: string
format: date-time
CreateIncidentRequest:
type: object
required:
- ai_project
- type
- severity
- status
- occurred_date
- date_detected
- reporter
- approval_status
- categories_of_harm
- description
- relationship_causality
properties:
ai_project:
type: string
type:
$ref: '#/components/schemas/IncidentType'
severity:
$ref: '#/components/schemas/IncidentSeverity'
status:
$ref: '#/components/schemas/IncidentStatus'
occurred_date:
type: string
format: date-time
date_detected:
type: string
format: date-time
reporter:
type: string
approval_status:
$ref: '#/components/schemas/IncidentApprovalStatus'
approved_by:
type: string
categories_of_harm:
oneOf:
-
type: array
items:
type: string
-
type: string
description: 'Comma-separated string (will be split)'
affected_persons_groups:
type: string
description:
type: string
relationship_causality:
type: string
immediate_mitigations:
type: string
planned_corrective_actions:
type: string
model_system_version:
type: string
interim_report:
type: boolean
default: false
archived:
type: boolean
default: false
approval_date:
type: string
format: date-time
approval_notes:
type: string
UpdateIncidentRequest:
type: object
description: 'All fields are optional; only provided fields are updated.'
properties:
ai_project:
type: string
type:
$ref: '#/components/schemas/IncidentType'
severity:
$ref: '#/components/schemas/IncidentSeverity'
status:
$ref: '#/components/schemas/IncidentStatus'
occurred_date:
type: string
format: date-time
date_detected:
type: string
format: date-time
reporter:
type: string
approval_status:
$ref: '#/components/schemas/IncidentApprovalStatus'
approved_by:
type: string
categories_of_harm:
oneOf:
-
type: array
items:
type: string
-
type: string
affected_persons_groups:
type: string
description:
type: string
relationship_causality:
type: string
immediate_mitigations:
type: string
planned_corrective_actions:
type: string
model_system_version:
type: string
interim_report:
type: boolean
archived:
type: boolean
approval_date:
type: string
format: date-time
approval_notes:
type: string
Framework:
type: object
properties:
id:
type: integer
name:
type: string
description:
type: string
organization_id:
type: integer
ISO27001Clause:
type: object
properties:
id:
type: integer
arrangement:
type: integer
title:
type: string
ISO27001ClauseWithSubClauses:
type: object
properties:
id:
type: integer
arrangement:
type: integer
title:
type: string
subClauses:
type: array
items:
$ref: '#/components/schemas/ISO27001SubClause'
ISO27001SubClause:
type: object
properties:
id:
type: integer
subclause_meta_id:
type: integer
projects_frameworks_id:
type: integer
organization_id:
type: integer
status:
type: string
enum:
- 'Not started'
- Draft
- 'In review'
- Done
owner:
type: integer
nullable: true
reviewer:
type: integer
nullable: true
approver:
type: integer
nullable: true
implementation_details:
type: string
nullable: true
evidence_links:
type: array
items:
type: object
risks_mitigated:
type: array
items:
type: integer
tags:
type: array
items:
type: string
ISO27001Annex:
type: object
properties:
id:
type: integer
arrangement:
type: string
order_no:
type: integer
title:
type: string
ISO27001AnnexWithControls:
type: object
properties:
id:
type: integer
arrangement:
type: string
order_no:
type: integer
title:
type: string
controls:
type: array
items:
$ref: '#/components/schemas/ISO27001AnnexControl'
ISO27001AnnexControl:
type: object
properties:
id:
type: integer
annexcontrol_meta_id:
type: integer
projects_frameworks_id:
type: integer
organization_id:
type: integer
status:
type: string
enum:
- 'Not started'
- Draft
- 'In review'
- Done
owner:
type: integer
nullable: true
reviewer:
type: integer
nullable: true
approver:
type: integer
nullable: true
implementation_details:
type: string
nullable: true
evidence_links:
type: array
items:
type: object
risks_mitigated:
type: array
items:
type: integer
tags:
type: array
items:
type: string
ISO27001SaveClauseRequest:
type: object
properties:
user_id:
type: string
description: 'User ID for file upload attribution'
project_id:
type: string
description: 'Project ID for file upload association'
status:
type: string
enum:
- 'Not started'
- Draft
- 'In review'
- Done
owner:
type: integer
nullable: true
reviewer:
type: integer
nullable: true
approver:
type: integer
nullable: true
implementation_details:
type: string
tags:
type: string
description: 'JSON-encoded array of tag strings'
delete:
type: string
description: 'JSON-encoded array of file IDs to unlink'
risksDelete:
type: string
description: 'JSON-encoded array of risk IDs to remove'
risksMitigated:
type: string
description: 'JSON-encoded array of risk IDs to add'
files:
type: array
items:
type: string
format: binary
description: 'Evidence files to upload'
ISO27001SaveAnnexRequest:
type: object
properties:
user_id:
type: string
description: 'User ID for file upload attribution'
project_id:
type: string
description: 'Project ID for file upload association'
status:
type: string
enum:
- 'Not started'
- Draft
- 'In review'
- Done
owner:
type: integer
nullable: true
reviewer:
type: integer
nullable: true
approver:
type: integer
nullable: true
implementation_details:
type: string
tags:
type: string
description: 'JSON-encoded array of tag strings'
delete:
type: string
description: 'JSON-encoded array of file IDs to unlink'
risksDelete:
type: string
description: 'JSON-encoded array of risk IDs to remove'
risksMitigated:
type: string
description: 'JSON-encoded array of risk IDs to add'
files:
type: array
items:
type: string
format: binary
description: 'Evidence files to upload'
ISO42001Clause:
type: object
properties:
id:
type: integer
clause_no:
type: integer
title:
type: string
ISO42001ClauseWithSubClauses:
type: object
properties:
id:
type: integer
clause_no:
type: integer
title:
type: string
subClauses:
type: array
items:
$ref: '#/components/schemas/ISO42001SubClause'
ISO42001SubClause:
type: object
properties:
id:
type: integer
subclause_meta_id:
type: integer
projects_frameworks_id:
type: integer
organization_id:
type: integer
status:
type: string
enum:
- 'Not started'
- Draft
- 'In review'
- Done
owner:
type: integer
nullable: true
reviewer:
type: integer
nullable: true
approver:
type: integer
nullable: true
implementation_details:
type: string
nullable: true
evidence_links:
type: array
items:
type: object
risks_mitigated:
type: array
items:
type: integer
tags:
type: array
items:
type: string
ISO42001Annex:
type: object
properties:
id:
type: integer
annex_no:
type: integer
title:
type: string
ISO42001AnnexWithCategories:
type: object
properties:
id:
type: integer
annex_no:
type: integer
title:
type: string
categories:
type: array
items:
$ref: '#/components/schemas/ISO42001AnnexCategory'
ISO42001AnnexCategory:
type: object
properties:
id:
type: integer
annexcategory_meta_id:
type: integer
projects_frameworks_id:
type: integer
organization_id:
type: integer
status:
type: string
enum:
- 'Not started'
- Draft
- 'In review'
- Done
owner:
type: integer
nullable: true
reviewer:
type: integer
nullable: true
approver:
type: integer
nullable: true
implementation_details:
type: string
nullable: true
evidence_links:
type: array
items:
type: object
risks_mitigated:
type: array
items:
type: integer
tags:
type: array
items:
type: string
ISO42001SaveClauseRequest:
type: object
properties:
user_id:
type: string
project_id:
type: string
status:
type: string
enum:
- 'Not started'
- Draft
- 'In review'
- Done
owner:
type: integer
nullable: true
reviewer:
type: integer
nullable: true
approver:
type: integer
nullable: true
implementation_details:
type: string
tags:
type: string
description: 'JSON-encoded array of tag strings'
delete:
type: string
description: 'JSON-encoded array of file IDs to unlink'
risksDelete:
type: string
description: 'JSON-encoded array of risk IDs to remove'
risksMitigated:
type: string
description: 'JSON-encoded array of risk IDs to add'
files:
type: array
items:
type: string
format: binary
ISO42001SaveAnnexRequest:
type: object
properties:
user_id:
type: string
project_id:
type: string
status:
type: string
enum:
- 'Not started'
- Draft
- 'In review'
- Done
owner:
type: integer
nullable: true
reviewer:
type: integer
nullable: true
approver:
type: integer
nullable: true
implementation_details:
type: string
tags:
type: string
description: 'JSON-encoded array of tag strings'
delete:
type: string
description: 'JSON-encoded array of file IDs to unlink'
risksDelete:
type: string
description: 'JSON-encoded array of risk IDs to remove'
risksMitigated:
type: string
description: 'JSON-encoded array of risk IDs to add'
files:
type: array
items:
type: string
format: binary
NISTFunction:
type: object
properties:
id:
type: integer
title:
type: string
example: GOVERN
description:
type: string
organization_id:
type: integer
NISTCategory:
type: object
properties:
id:
type: integer
title:
type: string
description:
type: string
function_id:
type: integer
organization_id:
type: integer
NISTSubcategory:
type: object
properties:
id:
type: integer
subcategory_meta_id:
type: integer
organization_id:
type: integer
status:
type: string
enum:
- 'Not started'
- Draft
- 'In review'
- Done
owner:
type: integer
nullable: true
reviewer:
type: integer
nullable: true
approver:
type: integer
nullable: true
implementation_details:
type: string
nullable: true
evidence_links:
type: array
items:
type: object
risks_mitigated:
type: array
items:
type: integer
tags:
type: array
items:
type: string
NISTSubcategoryUpdateRequest:
type: object
properties:
user_id:
type: string
description: 'User ID for file upload attribution'
project_id:
type: string
description: 'Project ID for file upload association'
status:
type: string
enum:
- 'Not started'
- Draft
- 'In review'
- Done
owner:
type: integer
nullable: true
reviewer:
type: integer
nullable: true
approver:
type: integer
nullable: true
implementation_details:
type: string
tags:
type: string
description: 'JSON-encoded array of tag strings'
delete:
type: string
description: 'JSON-encoded array of file IDs to unlink'
risksDelete:
type: string
description: 'JSON-encoded array of risk IDs to remove'
risksMitigated:
type: string
description: 'JSON-encoded array of risk IDs to add'
files:
type: array
items:
type: string
format: binary
description: 'Evidence files to upload'
NISTSubcategoryStatusUpdate:
type: object
required:
- status
properties:
status:
type: string
enum:
- 'Not started'
- Draft
- 'In review'
- Done
description: 'New status value'
NISTProgress:
type: object
properties:
totalSubcategories:
type: integer
doneSubcategories:
type: integer
NISTAssignments:
type: object
properties:
totalSubcategories:
type: integer
assignedSubcategories:
type: integer
ComplianceScore:
type: object
properties:
organizationId:
type: integer
overallScore:
type: integer
minimum: 0
maximum: 100
calculatedAt:
type: string
format: date-time
modules:
type: object
properties:
riskManagement:
$ref: '#/components/schemas/ModuleScore'
vendorManagement:
$ref: '#/components/schemas/ModuleScore'
projectGovernance:
$ref: '#/components/schemas/ModuleScore'
modelLifecycle:
$ref: '#/components/schemas/ModuleScore'
policyDocumentation:
$ref: '#/components/schemas/ModuleScore'
metadata:
$ref: '#/components/schemas/ComplianceMetadata'
ModuleScore:
type: object
properties:
score:
type: number
minimum: 0
maximum: 100
weight:
type: number
description: 'Module weight (sums to 1.0 across all modules)'
components:
type: array
items:
$ref: '#/components/schemas/ComponentScore'
totalDataPoints:
type: integer
qualityScore:
type: number
minimum: 0
maximum: 1
description: 'Data completeness indicator'
ComponentScore:
type: object
properties:
name:
type: string
score:
type: number
weight:
type: number
dataPoints:
type: integer
details:
type: object
description: 'Module-specific details'
ComplianceMetadata:
type: object
properties:
totalProjects:
type: integer
applicableProjects:
type: integer
lastUpdated:
type: string
format: date-time
dataFreshness:
type: object
properties:
risks:
type: string
format: date-time
vendors:
type: string
format: date-time
projects:
type: string
format: date-time
models:
type: string
format: date-time
policies:
type: string
format: date-time
calculationMethod:
type: string
enum:
- balanced_weighted_average
version:
type: string
ComplianceDetails:
allOf:
-
$ref: '#/components/schemas/ComplianceScore'
-
type: object
properties:
insights:
type: object
properties:
strongestModule:
type: object
properties: {name: {type: string}, score: {type: number}}
weakestModule:
type: object
properties: {name: {type: string}, score: {type: number}}
improvementPriority:
type: array
items: {type: object, properties: {module: {type: string}, score: {type: number}, weight: {type: number}, impact: {type: number, description: '(100 - score) * weight'}}}
overallTrend:
type: string
enum: [up, down, stable]
dataQuality:
type: object
properties: {riskManagement: {type: number}, vendorManagement: {type: number}, projectGovernance: {type: number}, modelLifecycle: {type: number}, policyDocumentation: {type: number}}
AssignmentResponse:
type: object
properties:
total:
type: integer
assigned:
type: integer
RisksResponse:
type: object
properties:
message:
type: string
data:
type: array
items:
$ref: '#/components/schemas/Risk'
Risk:
type: object
properties:
id:
type: integer
title:
type: string
description:
type: string
risk_level:
type: string
status:
type: string
organization_id:
type: integer
StatusCodeWrapper:
type: object
properties:
code:
type: integer
data:
description: 'Response payload'
ShareLinkSettings:
type: object
properties:
shareAllFields:
type: boolean
default: false
allowDataExport:
type: boolean
default: true
allowViewersToOpenRecords:
type: boolean
default: false
displayToolbar:
type: boolean
default: true
ShareLinkCreateRequest:
type: object
required:
- resource_type
- resource_id
properties:
resource_type:
type: string
enum:
- model
- vendor
- project
- policy
- risk
resource_id:
type: integer
minimum: 0
description: 'Use 0 for sharing the entire table/list view'
settings:
$ref: '#/components/schemas/ShareLinkSettings'
expires_at:
type: string
format: date-time
nullable: true
ShareLinkUpdateRequest:
type: object
properties:
settings:
$ref: '#/components/schemas/ShareLinkSettings'
is_enabled:
type: boolean
expires_at:
type: string
format: date-time
nullable: true
ShareLinkResponse:
type: object
properties:
id:
type: integer
share_token:
type: string
resource_type:
type: string
resource_id:
type: integer
settings:
$ref: '#/components/schemas/ShareLinkSettings'
is_enabled:
type: boolean
expires_at:
type: string
format: date-time
nullable: true
created_at:
type: string
format: date-time
updated_at:
type: string
format: date-time
shareable_url:
type: string
format: uri
ShareLinkListItem:
allOf:
-
$ref: '#/components/schemas/ShareLinkResponse'
-
properties:
is_valid:
type: boolean
description: 'Whether the link is currently active and not expired'
ShareLinkMetadata:
type: object
properties:
id:
type: integer
share_token:
type: string
resource_type:
type: string
resource_id:
type: integer
settings:
$ref: '#/components/schemas/ShareLinkSettings'
is_enabled:
type: boolean
expires_at:
type: string
format: date-time
nullable: true
created_at:
type: string
format: date-time
updated_at:
type: string
format: date-time
is_valid:
type: boolean
SharedDataResponse:
type: object
properties:
share_link:
type: object
properties:
resource_type:
type: string
settings:
$ref: '#/components/schemas/ShareLinkSettings'
data:
description: 'Resource data (object for single record, array for table view)'
oneOf:
-
type: object
-
type: array
items:
type: object
permissions:
type: object
properties:
allowDataExport:
type: boolean
allowViewersToOpenRecords:
type: boolean
NoteCreateRequest:
type: object
required:
- content
- attached_to
- attached_to_id
properties:
content:
type: string
maxLength: 5000
attached_to:
type: string
enum:
- project
- vendor
- model
- risk
- policy
- task
- incident
attached_to_id:
type: string
Note:
type: object
properties:
id:
type: integer
content:
type: string
author_id:
type: integer
attached_to:
type: string
attached_to_id:
type: string
organization_id:
type: integer
created_at:
type: string
format: date-time
updated_at:
type: string
format: date-time
SearchResponse:
type: object
properties:
results:
type: object
description: 'Results grouped by entity type (projects, vendors, models, etc.)'
additionalProperties:
type: array
items:
type: object
description: 'Entity-specific result object'
totalCount:
type: integer
query:
type: string
message:
type: string
description: 'Present when query is too short'
ReportGenerateRequest:
type: object
required:
- projectId
- frameworkId
- projectFrameworkId
- reportType
properties:
projectId:
type: integer
frameworkId:
type: integer
projectFrameworkId:
type: integer
reportType:
oneOf:
-
type: string
enum:
- projectRisks
- vendorRisks
- modelRisks
- compliance
- assessment
- clausesAndAnnexes
- nistSubcategories
- vendors
- models
- trainingRegistry
- policyManager
- incidentManagement
- all
-
type: array
items:
type: string
reportName:
type: string
format:
type: string
enum:
- pdf
- docx
default: docx
aiEnhanced:
type: boolean
default: false
llmKeyId:
type: integer
description: 'LLM key ID for AI-enhanced reports'
GeneratedReport:
type: object
properties:
id:
type: integer
filename:
type: string
project_id:
type: integer
report_type:
type: string
created_by:
type: integer
organization_id:
type: integer
created_at:
type: string
format: date-time
DashboardData:
type: object
properties:
projects:
type: integer
description: 'Total project count'
trainings:
type: integer
description: 'Total training records'
models:
type: integer
description: 'Total model count'
reports:
type: integer
description: 'Total report count'
task_radar:
type: object
properties:
overdue:
type: integer
due:
type: integer
upcoming:
type: integer
projects_list:
type: array
items:
type: object
description: 'Project summary objects'
ConformityStep:
type: object
properties:
id:
type: integer
step:
type: string
description:
type: string
nullable: true
status:
type: string
enum:
- 'Not started'
- 'In progress'
- Completed
- 'Not needed'
owner:
type: string
nullable: true
dueDate:
type: string
format: date
nullable: true
completedDate:
type: string
format: date
nullable: true
CEMarkingResponse:
type: object
properties:
isHighRiskAISystem:
type: boolean
roleInProduct:
type: string
enum:
- standalone
- safety_component
- product_itself
annexIIICategory:
type: string
controlsCompleted:
type: integer
controlsTotal:
type: integer
assessmentsCompleted:
type: integer
assessmentsTotal:
type: integer
conformitySteps:
type: array
items:
$ref: '#/components/schemas/ConformityStep'
completedStepsCount:
type: integer
totalStepsCount:
type: integer
declarationStatus:
type: string
enum:
- draft
- ready
- signed
signedOn:
type: string
format: date
nullable: true
signatory:
type: string
nullable: true
declarationDocument:
type: string
nullable: true
registrationStatus:
type: string
enum:
- not_registered
- pending
- registered
euRegistrationId:
type: string
nullable: true
registrationDate:
type: string
format: date
nullable: true
euRecordUrl:
type: string
format: uri
nullable: true
policiesLinked:
type: integer
evidenceLinked:
type: integer
linkedPolicies:
type: array
items:
type: integer
linkedEvidences:
type: array
items:
type: integer
totalIncidents:
type: integer
aiActReportableIncidents:
type: integer
lastIncident:
type: string
format: date-time
nullable: true
linkedIncidents:
type: array
items:
type: integer
CEMarkingUpdateRequest:
type: object
properties:
isHighRiskAISystem:
type: boolean
roleInProduct:
type: string
annexIIICategory:
type: string
declarationStatus:
type: string
signedOn:
type: string
format: date
signatory:
type: string
declarationDocument:
type: string
registrationStatus:
type: string
euRegistrationId:
type: string
registrationDate:
type: string
format: date
euRecordUrl:
type: string
linkedPolicies:
type: array
items:
type: integer
linkedEvidences:
type: array
items:
type: integer
linkedIncidents:
type: array
items:
type: integer
conformitySteps:
type: array
items:
type: object
properties:
id:
type: integer
description:
type: string
status:
type: string
enum:
- 'Not started'
- 'In progress'
- Completed
- 'Not needed'
owner:
type: string
dueDate:
type: string
format: date
completedDate:
type: string
format: date
Role:
type: object
properties:
id:
type: integer
name:
type: string
enum:
- Admin
- Reviewer
- Editor
- Auditor
description:
type: string
SubscriptionCreateRequest:
type: object
required:
- organization_id
- tier_id
- status
- start_date
properties:
organization_id:
type: integer
tier_id:
type: integer
stripe_sub_id:
type: string
nullable: true
status:
type: string
enum:
- active
- cancelled
- past_due
- trialing
start_date:
type: string
format: date-time
end_date:
type: string
format: date-time
nullable: true
SubscriptionUpdateRequest:
type: object
properties:
tier_id:
type: integer
stripe_sub_id:
type: string
status:
type: string
enum:
- active
- cancelled
- past_due
- trialing
start_date:
type: string
format: date-time
end_date:
type: string
format: date-time
nullable: true
Subscription:
type: object
properties:
id:
type: integer
organization_id:
type: integer
tier_id:
type: integer
stripe_sub_id:
type: string
nullable: true
status:
type: string
start_date:
type: string
format: date-time
end_date:
type: string
format: date-time
nullable: true
created_at:
type: string
format: date-time
updated_at:
type: string
format: date-time
TierFeatures:
type: object
description: 'Tier details with associated feature flags'
properties:
id:
type: integer
name:
type: string
features:
type: array
items:
type: object
properties:
id:
type: integer
name:
type: string
enabled:
type: boolean
ApiTokenCreateRequest:
type: object
required:
- name
- expires_in_days
properties:
name:
type: string
description: 'Descriptive name for the token'
expires_in_days:
type: integer
minimum: 1
description: 'Number of days until token expires'
ApiToken:
type: object
properties:
id:
type: integer
name:
type: string
expires_at:
type: string
format: date-time
created_by:
type: integer
organization_id:
type: integer
created_at:
type: string
format: date-time
ApiTokenCreated:
allOf:
-
$ref: '#/components/schemas/ApiToken'
-
properties:
token:
type: string
description: 'Full JWT token value (only shown on creation)'
LLMKeyCreateRequest:
type: object
required:
- name
- key
properties:
name:
type: string
enum:
- Anthropic
- OpenAI
- OpenRouter
- Custom
description: 'LLM provider name'
key:
type: string
description: 'API key value'
model:
type: string
description: 'Default model to use with this key'
url:
type: string
format: uri
description: 'Required for Custom provider; auto-populated for others'
custom_headers:
type: object
additionalProperties:
type: string
nullable: true
description: 'Optional custom headers (string key-value pairs)'
LLMKeyUpdateRequest:
type: object
properties:
name:
type: string
enum:
- Anthropic
- OpenAI
- OpenRouter
- Custom
key:
type: string
model:
type: string
url:
type: string
format: uri
custom_headers:
type: object
additionalProperties:
type: string
nullable: true
LLMKey:
type: object
properties:
id:
type: integer
name:
type: string
key:
type: string
description: 'Masked key value'
url:
type: string
model:
type: string
nullable: true
custom_headers:
type: object
additionalProperties:
type: string
nullable: true
organization_id:
type: integer
created_at:
type: string
format: date-time
updated_at:
type: string
format: date-time
LLMKeyStatus:
type: object
properties:
hasKeys:
type: boolean
keyCount:
type: integer
providers:
type: array
items:
type: string
UserPreferenceCreateRequest:
type: object
required:
- user_id
- date_format
properties:
user_id:
type: integer
minimum: 1
date_format:
type: string
description: 'Preferred date format (e.g., YYYY-MM-DD, DD/MM/YYYY)'
UserPreferenceUpdateRequest:
type: object
properties:
date_format:
type: string
UserPreference:
type: object
properties:
id:
type: integer
user_id:
type: integer
date_format:
type: string
example: 'DD-MM-YYYY'
language:
type: string
example: 'en'
theme:
type: string
example: 'light'
created_at:
type: string
format: date-time
updated_at:
type: string
format: date-time
FileUploadResponse:
type: object
properties:
id:
type: integer
filename:
type: string
size:
type: integer
mimetype:
type: string
upload_date:
type: string
format: date-time
uploaded_by:
type: integer
modelId:
type: integer
nullable: true
review_status:
type: string
enum:
- draft
- pending_review
approval_workflow_id:
type: integer
nullable: true
approval_request_id:
type: integer
nullable: true
FileListResponse:
type: object
properties:
files:
type: array
items:
$ref: '#/components/schemas/FileListItem'
pagination:
$ref: '#/components/schemas/Pagination'
FileListItem:
type: object
properties:
id:
type: integer
filename:
type: string
size:
type: integer
formattedSize:
type: string
mimetype:
type: string
upload_date:
type: string
format: date-time
uploaded_by:
type: integer
uploader_name:
type: string
uploader_surname:
type: string
review_status:
type: string
approval_workflow_id:
type: integer
nullable: true
FileSearchResponse:
type: object
properties:
files:
type: array
items:
type: object
properties:
id:
type: integer
filename:
type: string
snippet:
type: string
description: 'Highlighted text snippet matching the query'
rank:
type: number
pagination:
$ref: '#/components/schemas/Pagination'
FileMetadata:
type: object
properties:
id:
type: integer
tags:
type: array
items:
type: string
review_status:
type: string
enum:
- draft
- pending_review
- approved
- rejected
- expired
version:
type: string
expiry_date:
type: string
format: date-time
nullable: true
description:
type: string
nullable: true
UpdateFileMetadataRequest:
type: object
properties:
tags:
type: array
items:
type: string
maxItems: 50
description: 'Each tag max 100 chars, alphanumeric/spaces/hyphens/underscores only'
review_status:
type: string
enum:
- draft
- pending_review
- approved
- rejected
- expired
version:
type: string
expiry_date:
type: string
format: date-time
description:
type: string
HighlightedFiles:
type: object
properties:
due_for_update:
type: array
items:
type: integer
pending_approval:
type: array
items:
type: integer
recently_modified:
type: array
items:
type: integer
VirtualFolder:
type: object
properties:
id:
type: integer
name:
type: string
description:
type: string
nullable: true
parent_id:
type: integer
nullable: true
color:
type: string
nullable: true
icon:
type: string
nullable: true
is_system:
type: boolean
file_count:
type: integer
created_at:
type: string
format: date-time
updated_at:
type: string
format: date-time
CreateFolderRequest:
type: object
required:
- name
properties:
name:
type: string
maxLength: 255
description:
type: string
parent_id:
type: integer
nullable: true
description: 'Parent folder ID (null for root)'
color:
type: string
description: 'Hex color code'
icon:
type: string
description: 'Icon identifier'
UpdateFolderRequest:
type: object
properties:
name:
type: string
maxLength: 255
description:
type: string
parent_id:
type: integer
nullable: true
description: 'New parent (null to move to root). Cannot create circular refs.'
color:
type: string
icon:
type: string
AssignFilesRequest:
type: object
required:
- file_ids
properties:
file_ids:
type: array
items:
type: integer
minItems: 1
Plugin:
type: object
properties:
key:
type: string
name:
type: string
description:
type: string
category:
type: string
version:
type: string
author:
type: string
icon_url:
type: string
documentation_url:
type: string
PluginInstallation:
type: object
properties:
id:
type: integer
plugin_key:
type: string
organization_id:
type: integer
installed_by:
type: integer
installed_at:
type: string
format: date-time
configuration:
type: object
additionalProperties: true
status:
type: string
ConnectionTestResult:
type: object
properties:
success:
type: boolean
message:
type: string
details:
type: object
ShadowAiToolStatus:
type: string
enum:
- detected
- under_review
- approved
- restricted
- blocked
- dismissed
ApiKeyCreateResponse:
type: object
properties:
id:
type: integer
key:
type: string
description: 'Full API key (shown only on creation)'
key_prefix:
type: string
label:
type: string
nullable: true
created_at:
type: string
format: date-time
ApiKeyRecord:
type: object
properties:
id:
type: integer
key_prefix:
type: string
label:
type: string
nullable: true
is_active:
type: boolean
created_at:
type: string
format: date-time
revoked_at:
type: string
format: date-time
nullable: true
InsightsSummary:
type: object
properties:
total_events:
type: integer
total_users:
type: integer
total_tools:
type: integer
total_departments:
type: integer
UserDetail:
type: object
properties:
email:
type: string
department:
type: string
tools:
type: array
items:
type: object
properties:
tool_name:
type: string
event_count:
type: integer
total_prompts:
type: integer
ShadowAiToolDetail:
type: object
properties:
id:
type: integer
name:
type: string
domain:
type: string
status:
$ref: '#/components/schemas/ShadowAiToolStatus'
first_seen:
type: string
format: date-time
last_seen:
type: string
format: date-time
event_count:
type: integer
user_count:
type: integer
departments:
type: array
items:
type: object
properties:
department:
type: string
user_count:
type: integer
top_users:
type: array
items:
type: object
properties:
email:
type: string
event_count:
type: integer
StartGovernanceRequest:
type: object
required:
- model_inventory
- governance_owner_id
properties:
model_inventory:
type: object
required:
- provider
- model
properties:
provider:
type: string
model:
type: string
version:
type: string
status:
type: string
enum:
- Approved
- Restricted
- Pending
- Blocked
governance_owner_id:
type: integer
minimum: 1
start_lifecycle:
type: boolean
default: false
StartGovernanceResponse:
type: object
properties:
model_inventory_id:
type: integer
tool_id:
type: integer
lifecycle_initialized:
type: boolean
ShadowAiRule:
type: object
properties:
id:
type: integer
name:
type: string
description:
type: string
nullable: true
is_active:
type: boolean
trigger_type:
type: string
trigger_config:
type: object
actions:
type: array
items:
type: object
cooldown_minutes:
type: integer
nullable: true
notification_user_ids:
type: array
items:
type: integer
created_at:
type: string
format: date-time
CreateRuleRequest:
type: object
required:
- name
- trigger_type
- actions
properties:
name:
type: string
description:
type: string
is_active:
type: boolean
default: true
trigger_type:
type: string
trigger_config:
type: object
default: {}
actions:
type: array
items:
type: object
cooldown_minutes:
type: integer
notification_user_ids:
type: array
items:
type: integer
UpdateRuleRequest:
type: object
properties:
name:
type: string
description:
type: string
is_active:
type: boolean
trigger_type:
type: string
trigger_config:
type: object
actions:
type: array
items:
type: object
cooldown_minutes:
type: integer
notification_user_ids:
type: array
items:
type: integer
SyslogConfig:
type: object
properties:
id:
type: integer
source_identifier:
type: string
parser_type:
type: string
enum:
- zscaler
- netskope
- squid
- generic_kv
is_active:
type: boolean
created_at:
type: string
format: date-time
CreateSyslogConfigRequest:
type: object
required:
- source_identifier
- parser_type
properties:
source_identifier:
type: string
parser_type:
type: string
enum:
- zscaler
- netskope
- squid
- generic_kv
is_active:
type: boolean
default: true
UpdateSyslogConfigRequest:
type: object
properties:
source_identifier:
type: string
parser_type:
type: string
enum:
- zscaler
- netskope
- squid
- generic_kv
is_active:
type: boolean
ShadowAiSettings:
type: object
properties:
rate_limit_max_events_per_hour:
type: integer
retention_events_days:
type: integer
retention_daily_rollups_days:
type: integer
retention_alert_history_days:
type: integer
UpdateSettingsRequest:
type: object
properties:
rate_limit_max_events_per_hour:
type: integer
retention_events_days:
type: integer
retention_daily_rollups_days:
type: integer
retention_alert_history_days:
type: integer
PMMConfig:
type: object
properties:
id:
type: integer
project_id:
type: integer
frequency:
type: string
description: 'Monitoring frequency (e.g., "monthly", "quarterly")'
stakeholder_id:
type: integer
nullable: true
is_active:
type: boolean
questions_count:
type: integer
created_at:
type: string
format: date-time
updated_at:
type: string
format: date-time
PMMConfigCreateRequest:
type: object
required:
- project_id
properties:
project_id:
type: integer
frequency:
type: string
stakeholder_id:
type: integer
is_active:
type: boolean
default: true
PMMConfigUpdateRequest:
type: object
properties:
frequency:
type: string
stakeholder_id:
type: integer
is_active:
type: boolean
PMMQuestion:
type: object
properties:
id:
type: integer
config_id:
type: integer
nullable: true
question_text:
type: string
question_type:
type: string
enum:
- yes_no
- multi_select
- multi_line_text
options:
type: array
items:
type: string
nullable: true
is_required:
type: boolean
is_default:
type: boolean
display_order:
type: integer
created_at:
type: string
format: date-time
PMMQuestionCreate:
type: object
required:
- question_text
- question_type
properties:
config_id:
type: integer
nullable: true
question_text:
type: string
question_type:
type: string
enum:
- yes_no
- multi_select
- multi_line_text
options:
type: array
items:
type: string
is_required:
type: boolean
default: false
display_order:
type: integer
PMMQuestionUpdate:
type: object
properties:
question_text:
type: string
question_type:
type: string
enum:
- yes_no
- multi_select
- multi_line_text
options:
type: array
items:
type: string
is_required:
type: boolean
display_order:
type: integer
PMMCycle:
type: object
properties:
id:
type: integer
config_id:
type: integer
project_id:
type: integer
project_title:
type: string
cycle_number:
type: integer
status:
type: string
enum:
- active
- completed
assigned_stakeholder_id:
type: integer
nullable: true
due_date:
type: string
format: date-time
nullable: true
completed_at:
type: string
format: date-time
nullable: true
created_at:
type: string
format: date-time
PMMResponse:
type: object
properties:
id:
type: integer
cycle_id:
type: integer
question_id:
type: integer
response_value:
type: string
is_flagged:
type: boolean
created_at:
type: string
format: date-time
PMMSaveResponsesRequest:
type: object
required:
- responses
properties:
responses:
type: array
minItems: 1
items:
type: object
required:
- question_id
- response_value
properties:
question_id:
type: integer
response_value:
type: string
is_flagged:
type: boolean
default: false
PMMSubmitCycleResponse:
type: object
properties:
message:
type: string
report_generated:
type: boolean
report_filename:
type: string
nullable: true
PMMReportsResponse:
type: object
properties:
reports:
type: array
items:
type: object
properties:
id:
type: integer
cycle_id:
type: integer
file_id:
type: integer
nullable: true
completed_by:
type: integer
created_at:
type: string
format: date-time
total:
type: integer
page:
type: integer
limit:
type: integer
TaskPriority:
type: string
enum:
- Low
- Medium
- High
description: 'Task priority level.'
TaskStatus:
type: string
enum:
- Open
- 'In Progress'
- Completed
- Overdue
- Deleted
description: 'Task lifecycle status. "Deleted" represents a soft-deleted (archived) task.'
EntityType:
type: string
enum:
- vendor
- model
- policy
- nist_subcategory
- iso42001_subclause
- iso42001_annexcategory
- iso27001_subclause
- iso27001_annexcontrol
- eu_control
- eu_subcontrol
description: 'Type of entity that can be linked to a task.'
CreateTaskRequest:
type: object
required:
- title
properties:
title:
type: string
example: 'Review vendor risk assessment'
description:
type: string
nullable: true
due_date:
type: string
format: date-time
nullable: true
example: '2026-05-15T00:00:00.000Z'
priority:
$ref: '#/components/schemas/TaskPriority'
status:
$ref: '#/components/schemas/TaskStatus'
categories:
type: array
items:
type: string
example:
- compliance
- vendor
assignees:
type: array
items:
oneOf:
-
type: integer
-
type: object
properties:
user_id: {type: integer}
required:
- user_id
example:
- 1
- 2
- 3
entity_links:
type: array
items:
type: object
properties:
entity_id:
type: integer
entity_type:
$ref: '#/components/schemas/EntityType'
entity_name:
type: string
UpdateTaskRequest:
type: object
properties:
title:
type: string
description:
type: string
nullable: true
due_date:
type: string
format: date-time
nullable: true
priority:
$ref: '#/components/schemas/TaskPriority'
status:
$ref: '#/components/schemas/TaskStatus'
categories:
type: array
items:
type: string
assignees:
type: array
items:
type: integer
entity_links:
type: array
items:
type: object
properties:
entity_id:
type: integer
entity_type:
$ref: '#/components/schemas/EntityType'
entity_name:
type: string
AddEntityLinkRequest:
type: object
required:
- entity_id
- entity_type
properties:
entity_id:
type: integer
example: 42
entity_type:
$ref: '#/components/schemas/EntityType'
entity_name:
type: string
example: 'Acme Corp'
Task:
type: object
properties:
id:
type: integer
example: 1
title:
type: string
example: 'Review vendor risk assessment'
description:
type: string
nullable: true
creator_id:
type: integer
organization_id:
type: integer
due_date:
type: string
format: date-time
nullable: true
priority:
$ref: '#/components/schemas/TaskPriority'
status:
$ref: '#/components/schemas/TaskStatus'
categories:
type: array
items:
type: string
is_demo:
type: boolean
created_at:
type: string
format: date-time
updated_at:
type: string
format: date-time
TaskWithAssignees:
allOf:
-
$ref: '#/components/schemas/Task'
-
type: object
properties:
assignees:
type: array
items:
type: integer
TaskWithRelations:
allOf:
-
$ref: '#/components/schemas/Task'
-
type: object
properties:
assignees:
type: array
items:
type: integer
entity_links:
type: array
items:
$ref: '#/components/schemas/EntityLinkSummary'
TaskDetail:
allOf:
-
$ref: '#/components/schemas/Task'
-
type: object
properties:
assignees:
type: array
items:
type: integer
creator_name:
type: string
example: 'Jane Smith'
assignee_names:
type: array
items:
type: string
example:
- 'John Doe'
- 'Alice Johnson'
entity_links:
type: array
items:
$ref: '#/components/schemas/EntityLinkSummary'
EntityLinkSummary:
type: object
properties:
id:
type: integer
entity_id:
type: integer
entity_type:
$ref: '#/components/schemas/EntityType'
entity_name:
type: string
TaskEntityLink:
type: object
properties:
id:
type: integer
task_id:
type: integer
entity_id:
type: integer
entity_type:
$ref: '#/components/schemas/EntityType'
entity_name:
type: string
nullable: true
created_at:
type: string
format: date-time
updated_at:
type: string
format: date-time
EnvelopeBase:
type: object
properties:
message:
type: string
required:
- message
EnvelopeEmpty:
allOf:
-
$ref: '#/components/schemas/EnvelopeBase'
-
type: object
properties:
message:
example: 'No Content'
data:
type: array
items: {}
example: []
EnvelopeNotFound:
allOf:
-
$ref: '#/components/schemas/EnvelopeBase'
-
type: object
properties:
message:
example: 'Not Found'
data:
nullable: true
example: null
EnvelopeBadRequest:
allOf:
-
$ref: '#/components/schemas/EnvelopeBase'
-
type: object
properties:
message:
example: 'Bad Request'
data:
type: string
example: 'Invalid training ID'
EnvelopeError:
type: object
properties:
message:
type: string
example: 'Internal Server Error'
error:
type: string
required:
- message
- error
Training:
type: object
properties:
id:
type: integer
example: 42
training_name:
type: string
example: 'AI Governance Fundamentals'
duration:
type: string
example: '2 hours'
provider:
type: string
example: Internal
department:
type: string
example: Compliance
status:
type: string
enum:
- Planned
- 'In Progress'
- Completed
example: Planned
numberOfPeople:
type: integer
example: 25
description:
type: string
example: 'Introductory course on EU AI Act compliance'
progressPercentage:
type: integer
enum:
- 0
- 50
- 100
example: 0
createdAt:
type: string
format: date-time
updatedAt:
type: string
format: date-time
required:
- id
- training_name
- duration
- provider
- department
- status
- numberOfPeople
- description
- progressPercentage
TrainingCreateRequest:
type: object
required:
- training_name
- duration
- provider
- department
- status
- numberOfPeople
properties:
training_name:
type: string
example: 'AI Governance Fundamentals'
duration:
type: string
example: '2 hours'
provider:
type: string
example: Internal
department:
type: string
example: Compliance
status:
type: string
enum:
- Planned
- 'In Progress'
- Completed
example: Planned
numberOfPeople:
type: integer
example: 25
description:
type: string
example: 'Introductory course on EU AI Act compliance'
is_demo:
type: boolean
default: false
TrainingUpdateRequest:
type: object
properties:
training_name:
type: string
example: 'Advanced AI Risk Management'
duration:
type: string
example: '3 days'
provider:
type: string
example: External
department:
type: string
example: Engineering
status:
type: string
enum:
- Planned
- 'In Progress'
- Completed
example: 'In Progress'
numberOfPeople:
type: integer
example: 30
description:
type: string
example: 'Updated scope to cover ISO 42001'
TrainingListResponse:
allOf:
-
$ref: '#/components/schemas/EnvelopeBase'
-
type: object
properties:
message:
example: OK
data:
type: array
items:
$ref: '#/components/schemas/Training'
TrainingSingleResponse:
allOf:
-
$ref: '#/components/schemas/EnvelopeBase'
-
type: object
properties:
message:
example: OK
data:
$ref: '#/components/schemas/Training'
ChangeHistoryEntry:
type: object
properties:
id:
type: integer
example: 101
entity_type:
type: string
example: training
entity_id:
type: integer
example: 42
field_name:
type: string
example: status
old_value:
type: string
nullable: true
example: Planned
new_value:
type: string
nullable: true
example: 'In Progress'
change_type:
type: string
enum:
- created
- updated
- deleted
example: updated
changed_by:
type: integer
example: 5
user_name:
type: string
example: Gorkem
user_surname:
type: string
example: Cetin
organization_id:
type: integer
example: 1
created_at:
type: string
format: date-time
ChangeHistoryData:
type: object
required:
- data
- hasMore
- total
properties:
data:
type: array
items:
$ref: '#/components/schemas/ChangeHistoryEntry'
hasMore:
type: boolean
example: false
total:
type: integer
example: 5
ChangeHistoryResponse:
allOf:
-
$ref: '#/components/schemas/EnvelopeBase'
-
type: object
properties:
message:
example: OK
data:
$ref: '#/components/schemas/ChangeHistoryData'
CreateOrganizationRequest:
type: object
required:
- name
- userEmail
- userName
- userSurname
- userPassword
properties:
name:
type: string
example: 'Acme Corp'
logo:
type: string
format: uri
nullable: true
example: 'https://example.com/logo.png'
userEmail:
type: string
format: email
example: admin@acme.com
userName:
type: string
example: John
userSurname:
type: string
example: Doe
userPassword:
type: string
format: password
example: SecurePassword123!
UpdateOrganizationRequest:
type: object
properties:
name:
type: string
example: 'Acme Corporation'
logo:
type: string
format: uri
nullable: true
example: 'https://example.com/new-logo.png'
Organization:
type: object
properties:
id:
type: integer
example: 1
name:
type: string
example: 'Acme Corp'
logo:
type: string
nullable: true
example: 'https://example.com/logo.png'
created_at:
type: string
format: date-time
updated_at:
type: string
format: date-time
onboarding_status:
type: string
enum:
- pending
- completed
example: pending
tenant_id:
type: string
nullable: true
example: a1b2c3d4e5
risk_assessment_mode:
type: string
enum:
- qualitative
- quantitative
example: qualitative
ageInDays:
type: integer
example: 45
OrganizationExistsResult:
type: object
properties:
exists:
type: boolean
example: true
CreateOrganizationResponse:
type: object
properties:
user:
$ref: '#/components/schemas/SafeUser'
organization:
type: object
properties:
id:
type: integer
example: 1
name:
type: string
example: 'Acme Corp'
token:
type: string
example: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
SafeUser:
type: object
properties:
id:
type: integer
example: 1
email:
type: string
format: email
example: admin@acme.com
name:
type: string
example: John
surname:
type: string
example: Doe
role_id:
type: integer
example: 1
organization_id:
type: integer
example: 1
OnboardingStatusResponse:
type: object
properties:
onboarding_status:
type: string
enum:
- completed
example: completed
NotificationType:
type: string
enum:
- task_assigned
- task_updated
- task_completed
- review_requested
- review_approved
- review_rejected
- approval_requested
- approval_approved
- approval_rejected
- approval_complete
- policy_due_soon
- policy_overdue
- training_assigned
- training_completed
- vendor_review_due
- file_uploaded
- comment_added
- mention
- shadow_ai_alert
- ai_gateway_budget_warning
- ai_gateway_budget_exhausted
- ai_gateway_guardrail_spike
- ai_gateway_config_change
- ai_gateway_virtual_key_budget_exhausted
- system
- assignment_owner
- assignment_reviewer
- assignment_approver
- assignment_member
- assignment_assignee
- assignment_action_owner
NotificationEntityType:
type: string
enum:
- project
- task
- policy
- vendor
- model
- training
- file
- use_case
- risk
- assessment
- comment
- user
- shadow_ai_tool
- ai_gateway
NotificationJSON:
type: object
required:
- id
- user_id
- type
- title
- message
- is_read
- created_at
properties:
id:
type: integer
example: 42
user_id:
type: integer
example: 7
type:
$ref: '#/components/schemas/NotificationType'
title:
type: string
example: 'Task assigned to you'
message:
type: string
example: 'You have been assigned to task ''Review vendor contract''.'
entity_type:
allOf:
-
$ref: '#/components/schemas/NotificationEntityType'
nullable: true
entity_id:
type: integer
nullable: true
example: 15
entity_name:
type: string
nullable: true
example: 'Review vendor contract'
action_url:
type: string
nullable: true
example: /projects/3/tasks/15
is_read:
type: boolean
example: false
read_at:
type: string
format: date-time
nullable: true
created_at:
type: string
format: date-time
example: '2026-04-20T10:00:00.000Z'
created_by:
type: integer
nullable: true
example: 3
metadata:
type: object
nullable: true
additionalProperties: true
NotificationSummary:
type: object
required:
- unread_count
- total_count
- recent_notifications
properties:
unread_count:
type: integer
example: 3
total_count:
type: integer
example: 47
recent_notifications:
type: array
maxItems: 10
items:
$ref: '#/components/schemas/NotificationJSON'
RealtimeNotification:
type: object
required:
- type
- data
properties:
type:
type: string
enum:
- notification
data:
$ref: '#/components/schemas/NotificationJSON'
ApiEnvelope:
type: object
properties:
status:
type: integer
example: 200
data:
description: 'Response payload (varies per endpoint)'
FriaErrorEnvelope:
type: object
properties:
status:
type: integer
example: 400
data:
type: string
example: 'Invalid project ID'
DeletedResponse:
type: object
properties:
deleted:
type: boolean
example: true
FriaStatus:
type: string
enum:
- draft
- submitted
- approved
- rejected
FriaRiskLevel:
type: string
enum:
- Low
- Medium
- High
FriaLikelihood:
type: string
enum:
- Low
- Medium
- High
FriaSeverity:
type: string
enum:
- Low
- Medium
- High
FriaAssessment:
type: object
properties:
id:
type: integer
organization_id:
type: integer
project_id:
type: integer
version:
type: integer
status:
$ref: '#/components/schemas/FriaStatus'
assessment_owner:
type: string
nullable: true
assessment_date:
type: string
nullable: true
operational_context:
type: string
nullable: true
is_high_risk:
type: string
nullable: true
high_risk_basis:
type: string
nullable: true
deployer_type:
type: string
nullable: true
annex_iii_category:
type: string
nullable: true
first_use_date:
type: string
nullable: true
review_cycle:
type: string
nullable: true
period_frequency:
type: string
nullable: true
fria_rationale:
type: string
nullable: true
affected_groups:
type: string
nullable: true
vulnerability_context:
type: string
nullable: true
group_flags:
type: array
items:
type: string
nullable: true
risk_scenarios:
type: string
nullable: true
provider_info_used:
type: string
nullable: true
human_oversight:
type: string
nullable: true
transparency_measures:
type: string
nullable: true
redress_process:
type: string
nullable: true
data_governance:
type: string
nullable: true
legal_review:
type: string
nullable: true
dpo_review:
type: string
nullable: true
owner_approval:
type: string
nullable: true
stakeholders_consulted:
type: string
nullable: true
consultation_notes:
type: string
nullable: true
deployment_decision:
type: string
nullable: true
decision_conditions:
type: string
nullable: true
completion_pct:
type: integer
risk_score:
type: integer
risk_level:
$ref: '#/components/schemas/FriaRiskLevel'
rights_flagged:
type: integer
created_by:
type: integer
updated_by:
type: integer
nullable: true
created_at:
type: string
format: date-time
updated_at:
type: string
format: date-time
nullable: true
project_title:
type: string
nullable: true
organization_name:
type: string
nullable: true
created_by_name:
type: string
nullable: true
updated_by_name:
type: string
nullable: true
FriaUpdateRequest:
type: object
properties:
status:
$ref: '#/components/schemas/FriaStatus'
assessment_owner:
type: string
assessment_date:
type: string
operational_context:
type: string
is_high_risk:
type: string
high_risk_basis:
type: string
deployer_type:
type: string
annex_iii_category:
type: string
first_use_date:
type: string
review_cycle:
type: string
period_frequency:
type: string
fria_rationale:
type: string
affected_groups:
type: string
vulnerability_context:
type: string
group_flags:
type: array
items:
type: string
risk_scenarios:
type: string
provider_info_used:
type: string
human_oversight:
type: string
transparency_measures:
type: string
redress_process:
type: string
data_governance:
type: string
legal_review:
type: string
dpo_review:
type: string
owner_approval:
type: string
stakeholders_consulted:
type: string
consultation_notes:
type: string
deployment_decision:
type: string
decision_conditions:
type: string
FriaFullResponse:
type: object
properties:
assessment:
$ref: '#/components/schemas/FriaAssessment'
rights:
type: array
items:
$ref: '#/components/schemas/FriaRight'
riskItems:
type: array
items:
$ref: '#/components/schemas/FriaRiskItem'
modelLinks:
type: array
items:
$ref: '#/components/schemas/FriaModelLink'
FriaRight:
type: object
properties:
id:
type: integer
organization_id:
type: integer
fria_id:
type: integer
right_key:
type: string
right_title:
type: string
charter_ref:
type: string
flagged:
type: boolean
severity:
type: integer
confidence:
type: integer
impact_pathway:
type: string
nullable: true
mitigation:
type: string
nullable: true
FriaRightsUpdateRequest:
type: object
required:
- rights
properties:
rights:
type: array
items:
type: object
required:
- right_key
properties:
right_key:
type: string
flagged:
type: boolean
severity:
type: integer
confidence:
type: integer
impact_pathway:
type: string
mitigation:
type: string
FriaRiskItem:
type: object
properties:
id:
type: integer
organization_id:
type: integer
fria_id:
type: integer
risk_description:
type: string
likelihood:
$ref: '#/components/schemas/FriaLikelihood'
severity:
$ref: '#/components/schemas/FriaSeverity'
existing_controls:
type: string
nullable: true
further_action:
type: string
nullable: true
linked_project_risk_id:
type: integer
nullable: true
sort_order:
type: integer
created_at:
type: string
format: date-time
updated_at:
type: string
format: date-time
nullable: true
linked_risk_name:
type: string
nullable: true
linked_risk_description:
type: string
nullable: true
FriaRiskItemCreateRequest:
type: object
required:
- risk_description
properties:
risk_description:
type: string
likelihood:
$ref: '#/components/schemas/FriaLikelihood'
severity:
$ref: '#/components/schemas/FriaSeverity'
existing_controls:
type: string
further_action:
type: string
linked_project_risk_id:
type: integer
sort_order:
type: integer
FriaRiskItemUpdateRequest:
type: object
properties:
risk_description:
type: string
likelihood:
$ref: '#/components/schemas/FriaLikelihood'
severity:
$ref: '#/components/schemas/FriaSeverity'
existing_controls:
type: string
further_action:
type: string
linked_project_risk_id:
type: integer
sort_order:
type: integer
FriaModelLink:
type: object
properties:
id:
type: integer
organization_id:
type: integer
fria_id:
type: integer
model_id:
type: integer
provider:
type: string
nullable: true
model:
type: string
nullable: true
version:
type: string
nullable: true
model_status:
type: string
nullable: true
FriaEvidenceLinkRequest:
type: object
required:
- file_id
- entity_type
properties:
file_id:
type: integer
entity_type:
type: string
FriaSnapshot:
type: object
properties:
id:
type: integer
organization_id:
type: integer
fria_id:
type: integer
version:
type: integer
snapshot_data:
type: object
properties:
assessment:
$ref: '#/components/schemas/FriaAssessment'
rights:
type: array
items:
$ref: '#/components/schemas/FriaRight'
riskItems:
type: array
items:
$ref: '#/components/schemas/FriaRiskItem'
modelLinks:
type: array
items:
$ref: '#/components/schemas/FriaModelLink'
snapshot_reason:
type: string
nullable: true
created_by:
type: integer
created_at:
type: string
format: date-time
created_by_name:
type: string
nullable: true
FriaSubmitRequest:
type: object
properties:
reason:
type: string
StandardResponse:
type: object
properties:
message:
type: string
data:
description: 'Response payload (present on 1xx-4xx)'
error:
type: string
ErrorResponse400:
type: object
properties:
message:
type: string
example: 'Bad Request'
data:
type: string
example: 'userId query parameter is required'
ErrorResponse401:
type: object
properties:
message:
type: string
example: Unauthorized
data:
type: string
ErrorResponse403:
type: object
properties:
message:
type: string
example: Forbidden
data:
type: string
ErrorResponse404:
type: object
properties:
message:
type: string
example: 'Not Found'
data:
type: string
ErrorResponse500:
type: object
properties:
message:
type: string
example: 'Internal Server Error'
error:
type: string
SlackNotificationRoutingType:
type: string
enum:
- 'Membership and roles'
- 'Projects and organizations'
- 'Policy reminders and status'
- 'Evidence and task alerts'
- 'Control or policy changes'
SlackWebhookFull:
type: object
properties:
id:
type: integer
example: 1
access_token:
type: string
access_token_iv:
type: string
scope:
type: string
example: 'incoming-webhook,chat:write'
user_id:
type: integer
example: 5
team_name:
type: string
example: 'Acme Corp'
team_id:
type: string
example: T01234ABC
channel:
type: string
example: '#general'
channel_id:
type: string
example: C01234ABC
configuration_url:
type: string
format: uri
url:
type: string
url_iv:
type: string
is_active:
type: boolean
example: true
routing_type:
type: array
items:
$ref: '#/components/schemas/SlackNotificationRoutingType'
nullable: true
created_at:
type: string
format: date-time
updated_at:
type: string
format: date-time
SlackWebhookJSON:
type: object
properties:
id:
type: integer
scope:
type: string
user_id:
type: integer
team_name:
type: string
team_id:
type: string
channel:
type: string
channel_id:
type: string
created_at:
type: string
format: date-time
is_active:
type: boolean
routing_type:
type: array
items:
$ref: '#/components/schemas/SlackNotificationRoutingType'
nullable: true
CreateSlackWebhookRequest:
type: object
required:
- code
- userId
properties:
code:
type: string
example: 1234567890.abcdef
userId:
type: integer
example: 5
UpdateSlackWebhookRequest:
type: object
properties:
is_active:
type: boolean
example: false
routing_type:
type: array
items:
$ref: '#/components/schemas/SlackNotificationRoutingType'
SendSlackMessageRequest:
type: object
required:
- title
- message
properties:
title:
type: string
example: 'New policy update'
message:
type: string
example: 'Policy *Data Retention* has been updated.'
SlackMessageSentResult:
type: object
properties:
success:
type: boolean
example: true
messageId:
type: string
example: '1234567890.123456'
channel:
type: string
example: C01234ABC
GitHubTokenStatus:
type: object
properties:
configured:
type: boolean
example: true
token_name:
type: string
example: 'GitHub Personal Access Token'
last_used_at:
type: string
format: date-time
nullable: true
created_at:
type: string
format: date-time
SaveGitHubTokenRequest:
type: object
required:
- token
properties:
token:
type: string
example: ghp_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
token_name:
type: string
default: 'GitHub Personal Access Token'
example: 'CI/CD Scanner Token'
TestGitHubTokenRequest:
type: object
required:
- token
properties:
token:
type: string
example: ghp_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
GitHubTokenTestResult:
type: object
properties:
valid:
type: boolean
example: true
scopes:
type: array
items:
type: string
example:
- repo
- 'read:org'
rate_limit:
type: object
properties:
limit:
type: integer
example: 5000
remaining:
type: integer
example: 4999
reset:
type: string
format: date-time
error:
type: string
example: 'Invalid or expired token'
GitHubWebhookPayload:
type: object
required:
- repository
properties:
repository:
type: object
required:
- owner
- name
properties:
owner:
type: object
required:
- login
properties:
login:
type: string
example: verifywise-ai
name:
type: string
example: verifywise
ref:
type: string
example: refs/heads/main
action:
type: string
example: opened
pull_request:
type: object
GitHubWebhookResult:
type: object
properties:
triggered:
type: boolean
reason:
type: string
example: 'Scan triggered for push to main'
GitHubWebhookPong:
type: object
properties:
message:
type: string
example: pong
GitHubWebhookSkipped:
type: object
properties:
message:
type: string
example: 'Repository not registered or CI not enabled'
SuccessResponse_SlackWebhookArray:
type: object
properties:
message:
type: string
example: OK
data:
type: array
items:
$ref: '#/components/schemas/SlackWebhookFull'
SuccessResponse_SlackWebhookJSON:
type: object
properties:
message:
type: string
example: OK
data:
$ref: '#/components/schemas/SlackWebhookJSON'
CreatedResponse_SlackWebhookFull:
type: object
properties:
message:
type: string
example: Created
data:
$ref: '#/components/schemas/SlackWebhookFull'
AcceptedResponse_SlackWebhookFull:
type: object
properties:
message:
type: string
example: Accepted
data:
$ref: '#/components/schemas/SlackWebhookFull'
SuccessResponse_SlackMessageSent:
type: object
properties:
message:
type: string
example: OK
data:
$ref: '#/components/schemas/SlackMessageSentResult'
SuccessResponse_GitHubTokenStatus:
type: object
properties:
message:
type: string
example: OK
data:
$ref: '#/components/schemas/GitHubTokenStatus'
CreatedResponse_GitHubTokenStatus:
type: object
properties:
message:
type: string
example: Created
data:
$ref: '#/components/schemas/GitHubTokenStatus'
SuccessResponse_GitHubTokenDeleted:
type: object
properties:
message:
type: string
example: OK
data:
type: object
properties:
message:
type: string
example: 'GitHub token deleted successfully'
SuccessResponse_GitHubTokenTest:
type: object
properties:
message:
type: string
example: OK
data:
$ref: '#/components/schemas/GitHubTokenTestResult'
tags:
-
name: 'AI Advisor'
-
name: 'AI Approval Rules'
-
name: 'AI Approvals'
-
name: 'AI Apps'
-
name: 'AI Audit'
-
name: 'AI Confirmation'
-
name: 'AI Content'
-
name: 'AI Detection'
-
name: 'AI Trust Centre'
-
name: 'Agent Discovery'
-
name: 'Ai Trust Index'
-
name: 'Approval Workflows'
-
name: Assessments
-
name: Audit
-
name: Authentication
-
name: Automations
-
name: 'CE Marking'
-
name: 'Change History'
-
name: Compliance
-
name: 'Custom Fields'
-
name: Dashboard
-
name: Datasets
-
name: Deadlines
-
name: 'Demo Data'
-
name: 'EU AI Act'
-
name: 'Entity Graph'
-
name: Evidence
-
name: 'Evidence AI'
-
name: FRIA
-
name: Files
-
name: Frameworks
-
name: 'Governance OS'
-
name: 'ISO 27001'
-
name: 'ISO 42001'
-
name: Incidents
-
name: 'Intake Forms'
-
name: Integrations
-
name: Internal
-
name: Invitations
-
name: 'LLM Evals'
-
name: 'LLM Keys'
-
name: Mail
-
name: 'Model Inventory'
-
name: 'Model Risks'
-
name: Mrm
-
name: 'NIST AI RMF'
-
name: Notes
-
name: Notifications
-
name: Organizations
-
name: Plugins
-
name: Policies
-
name: 'Post-Market Monitoring'
-
name: 'Project Risks'
-
name: Projects
-
name: 'Quantitative Risks'
-
name: Readiness
-
name: Reporting
-
name: 'Risk Benchmarks'
-
name: 'Risk History'
-
name: Roles
-
name: 'SSO Config'
-
name: Search
-
name: Settings
-
name: 'Shadow AI'
-
name: 'Share Links'
-
name: Subscriptions
-
name: 'Super Admin'
-
name: System
-
name: Tasks
-
name: Training
-
name: Users
-
name: 'Vendor Risks'
-
name: Vendors
-
name: Webhooks
paths:
/users:
get:
summary: 'List all users in organization'
description: "Returns all users belonging to the authenticated user's organization,\nordered by created_at DESC, id ASC. Password hashes are excluded.\n"
tags:
- Users
security:
-
bearerAuth: []
responses:
'200':
description: 'Users found'
content:
application/json:
schema:
type: object
properties:
message: {type: string, example: OK}
data: {type: array, items: {$ref: '#/components/schemas/UserSafe'}}
'204':
description: 'No users found (empty organization)'
'500':
description: 'Internal server error'
operationId: getAllUsers
'/users/{id}':
get:
summary: 'Get user by ID'
description: "Retrieves a single user by their numeric ID. Super-admins can access\nany user; regular users can only access users within their organization\n(or their own record).\n"
tags:
- Users
security:
-
bearerAuth: []
parameters:
-
in: path
name: id
required: true
schema:
type: integer
description: 'User ID'
responses:
'200':
description: 'User found'
content:
application/json:
schema:
type: object
properties:
message: {type: string, example: OK}
data: {$ref: '#/components/schemas/UserSafe'}
'403':
description: 'Access denied (user belongs to different organization)'
'404':
description: 'User not found'
'500':
description: 'Internal server error'
operationId: getUserById
patch:
summary: 'Update user by ID'
description: "Updates user fields (name, surname, email, roleId, last_login).\nOnly provided fields are updated. Organization isolation enforced.\nSends Slack notification on role change. Sends email notification\nwhen role changes from Editor (3) to Admin (1).\n"
tags:
- Users
security:
-
bearerAuth: []
parameters:
-
in: path
name: id
required: true
schema:
type: integer
description: 'User ID to update'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
name:
type: string
description: 'First name'
example: Jane
surname:
type: string
description: 'Last name'
example: Smith
email:
type: string
format: email
example: jane@example.com
roleId:
type: integer
description: 'New role ID (1=Admin, 2=Reviewer, 3=Editor, 4=Auditor). Can be sent as string.'
example: 1
last_login:
type: string
format: date-time
description: 'Override last login timestamp'
description: 'All fields are optional; only provided fields are updated'
responses:
'202':
description: 'User updated'
content:
application/json:
schema:
type: object
properties:
message: {type: string, example: Accepted}
data: {$ref: '#/components/schemas/UserSafe'}
'400':
description: 'Validation error'
'403':
description: 'Access denied or business logic error'
'404':
description: 'User not found'
'500':
description: 'Internal server error'
operationId: updateUserById
delete:
summary: 'Delete user by ID'
description: 'Requires role: Admin or SuperAdmin'
tags:
- Users
security:
-
bearerAuth: []
parameters:
-
in: path
name: id
required: true
schema:
type: integer
description: 'User ID to delete'
responses:
'202':
description: 'User deleted'
content:
application/json:
schema:
type: object
properties:
message: {type: string, example: Accepted}
data: {type: boolean, description: 'true if deletion succeeded'}
'403':
description: 'Forbidden: demo user, super-admin, or wrong organization'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorEnvelope'
'404':
description: 'User not found'
'500':
description: 'Internal server error'
operationId: deleteUserById
/users/register:
post:
summary: 'Register a new user'
description: "Creates a new user account. Requires a valid registration JWT (set by registerJWT middleware).\nValidates email uniqueness, password strength, and required fields.\nMarks any pending invitation as accepted after successful creation.\n"
tags:
- Users
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- name
- surname
- email
- password
- roleId
- organizationId
properties:
name:
type: string
description: 'User''s first name'
example: John
surname:
type: string
description: 'User''s last name'
example: Doe
email:
type: string
format: email
example: john@example.com
password:
type: string
format: password
description: 'Must be 8+ chars with uppercase, lowercase, and digit'
example: SecurePassword123!
roleId:
type: integer
description: '1=Admin, 2=Reviewer, 3=Editor, 4=Auditor'
example: 3
organizationId:
type: integer
description: 'Organization to assign the user to'
example: 1
responses:
'201':
description: 'User created successfully'
content:
application/json:
schema:
type: object
properties:
message: {type: string, example: Created}
data: {$ref: '#/components/schemas/UserSafe'}
'400':
description: 'Validation error (missing fields, weak password, invalid email)'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorEnvelope'
'403':
description: 'Business logic error'
'409':
description: 'User with this email already exists'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorEnvelope'
'500':
description: 'Internal server error'
operationId: createNewUser
/users/login:
post:
summary: 'Authenticate user'
description: "Validates email/password credentials via bcrypt. Returns a JWT access token\nin the response body and sets a refresh token in an HTTP-only cookie.\nRate-limited to 5 requests per minute per IP.\n"
tags:
- Users
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- email
- password
properties:
email:
type: string
format: email
example: user@example.com
password:
type: string
format: password
example: SecurePassword123!
responses:
'202':
description: 'Authentication successful'
headers:
Set-Cookie:
schema:
type: string
description: 'refresh_token=; Path=/api/users; HttpOnly; Secure (prod); SameSite=none (prod) / lax (dev)'
content:
application/json:
schema:
type: object
properties:
message: {type: string, example: Accepted}
data: {type: object, properties: {token: {type: string, description: 'JWT access token'}, isSuperAdmin: {type: boolean, description: 'Only present when user is super-admin (role_id=5)'}, onboarding_status: {type: string, description: 'Organization onboarding status (not present for super-admin)', example: completed}, is_org_creator: {type: boolean, description: 'Whether user is the first admin of the org (not present for super-admin)'}}}
'401':
description: 'Invalid email or password'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorEnvelope'
'429':
description: 'Too many login attempts'
'500':
description: 'Internal server error'
operationId: loginUser
/users/login-microsoft:
post:
summary: 'Login User With Microsoft'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- Users
operationId: loginUserWithMicrosoft
/users/refresh-token:
post:
summary: 'Refresh access token'
description: "Reads the refresh_token from an HTTP-only cookie and issues a new\nJWT access token if the refresh token is still valid.\n"
tags:
- Users
parameters:
-
in: cookie
name: refresh_token
required: true
schema:
type: string
description: 'JWT refresh token set during login'
responses:
'200':
description: 'New access token issued'
content:
application/json:
schema:
type: object
properties:
message: {type: string, example: OK}
data: {type: object, properties: {token: {type: string, description: 'New JWT access token'}}}
'400':
description: 'Refresh token missing from cookie'
'401':
description: 'Invalid refresh token'
'406':
description: 'Refresh token expired'
content:
application/json:
schema:
type: object
properties:
message: {type: string}
data: {type: object, properties: {message: {type: string, example: 'Token expired'}}}
'500':
description: 'Internal server error'
operationId: refreshAccessToken
/users/logout:
post:
summary: 'Log out current session'
description: "Revokes the presented refresh token server-side and clears the\nrefresh_token cookie. No bearer token required: only the token presented\nin the cookie is revoked.\n"
tags:
- Users
parameters:
-
in: cookie
name: refresh_token
required: false
schema:
type: string
description: 'JWT refresh token set during login'
responses:
'200':
description: 'Logged out; refresh token revoked and cookie cleared'
'500':
description: 'Internal server error'
operationId: logoutUser
/users/reset-password:
post:
summary: 'Reset user password'
description: "Resets the password for a user identified by email. Protected by\nresetPasswordMiddleware (validates reset token/permission).\nPassword is hashed via bcrypt before storage.\n"
tags:
- Users
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- email
- newPassword
properties:
email:
type: string
format: email
example: user@example.com
newPassword:
type: string
format: password
description: 'Must be 8+ chars with uppercase, lowercase, and digit'
example: NewSecure123!
responses:
'202':
description: 'Password reset successfully'
content:
application/json:
schema:
type: object
properties:
message: {type: string, example: Accepted}
data: {$ref: '#/components/schemas/UserSafe'}
'400':
description: 'Validation error (weak password)'
'403':
description: 'Business logic error'
'404':
description: 'User not found'
'500':
description: 'Internal server error'
operationId: resetPassword
'/users/chng-pass/{id}':
patch:
summary: 'Change password (authenticated)'
description: "Changes the password for the authenticated user. Requires the current\npassword for verification. Protected by selfOnly middleware (users can\nonly change their own password). Rate-limited.\n"
tags:
- Users
security:
-
bearerAuth: []
parameters:
-
in: path
name: id
required: true
schema:
type: integer
description: 'User ID (must match authenticated user via selfOnly middleware)'
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- id
- currentPassword
- newPassword
properties:
id:
type: integer
description: 'User ID (must match path parameter)'
example: 1
currentPassword:
type: string
format: password
description: 'Current password for verification'
example: OldPassword123!
newPassword:
type: string
format: password
description: 'Must be 8+ chars with uppercase, lowercase, and digit'
example: NewPassword456!
responses:
'202':
description: 'Password changed successfully'
content:
application/json:
schema:
type: object
properties:
message: {type: string, example: 'Password updated successfully'}
data: {$ref: '#/components/schemas/UserSafe'}
'400':
description: 'Validation error (weak password, missing fields)'
content:
application/json:
schema:
type: object
properties:
message: {type: string}
'403':
description: 'Business logic error (wrong current password)'
content:
application/json:
schema:
type: object
properties:
message: {type: string}
'404':
description: 'User not found'
content:
application/json:
schema:
type: object
properties:
message: {type: string, example: 'User not found'}
'500':
description: 'Internal server error'
operationId: ChangePassword
/users/preferences:
get:
summary: 'Get current user preferences'
description: |
Returns the authenticated user's persisted preferences (date_format,
language) from user_preferences. If no row exists, returns safe
defaults including a transient theme default.
tags:
- Users
security:
-
bearerAuth: []
responses:
'200':
description: 'Preferences found or defaults returned'
content:
application/json:
schema:
type: object
properties:
message:
type: string
example: 'OK'
data:
$ref: '#/components/schemas/UserPreference'
'401':
description: Unauthorized
'500':
description: 'Internal server error'
/users/check/exists:
get:
summary: 'Check if any user exists'
description: "Returns a boolean indicating whether any user record exists in the database.\nUsed during initial setup flow to determine if onboarding is needed.\n"
tags:
- Users
security:
-
bearerAuth: []
responses:
'200':
description: 'Check result'
content:
application/json:
schema:
type: boolean
example: true
'500':
description: 'Internal server error'
content:
application/json:
schema:
type: object
properties:
message: {type: string, example: 'Internal server error'}
operationId: checkUserExists
'/users/{id}/calculate-progress':
get:
summary: 'Calculate user project progress'
description: "Computes completion metrics across all projects the user is a member of.\nCalculates subcontrol completion (status=\"Done\") and assessment question\ncompletion (has answer) per project and as aggregated totals.\n"
tags:
- Users
security:
-
bearerAuth: []
parameters:
-
in: path
name: id
required: true
schema:
type: integer
description: 'User ID to calculate progress for'
responses:
'200':
description: 'Progress calculated'
content:
application/json:
schema:
$ref: '#/components/schemas/ProgressResponse'
'500':
description: 'Internal server error'
content:
application/json:
schema:
type: object
properties:
message: {type: string, example: 'Internal server error'}
operationId: calculateProgress
'/users/{id}/profile-photo':
post:
summary: 'Upload profile photo'
description: "Uploads a profile photo for the specified user. The file is stored in the\ntenant-scoped files table. If the user already has a profile photo, the old\none is deleted and replaced. Uses multer for multipart file handling.\n"
tags:
- Users
security:
-
bearerAuth: []
parameters:
-
in: path
name: id
required: true
schema:
type: integer
description: 'User ID'
requestBody:
required: true
content:
multipart/form-data:
schema:
type: object
required:
- photo
properties:
photo:
type: string
format: binary
description: 'Image file (JPEG, PNG, etc.)'
responses:
'200':
description: 'Profile photo uploaded'
content:
application/json:
schema:
type: object
properties:
message: {type: string, example: OK}
data: {type: object, properties: {profile_photo_id: {type: integer, description: 'ID of the new file record'}}}
'400':
description: 'No file provided'
'403':
description: 'Access denied (wrong organization)'
'500':
description: 'Internal server error'
operationId: uploadUserProfilePhoto
get:
summary: 'Get profile photo'
description: "Returns the profile photo binary content for the specified user.\nThe response includes the raw file content and its MIME type.\n"
tags:
- Users
security:
-
bearerAuth: []
parameters:
-
in: path
name: id
required: true
schema:
type: integer
description: 'User ID'
responses:
'200':
description: 'Profile photo returned'
content:
application/json:
schema:
type: object
properties:
message: {type: string, example: OK}
data: {type: object, properties: {content: {type: string, format: byte, description: 'Base64-encoded file content'}, type: {type: string, description: 'MIME type', example: image/png}}}
'404':
description: 'No profile photo found'
'500':
description: 'Internal server error'
operationId: getUserProfilePhoto
delete:
summary: 'Delete profile photo'
description: "Removes the profile photo from the user record and deletes the associated\nfile from the files table.\n"
tags:
- Users
security:
-
bearerAuth: []
parameters:
-
in: path
name: id
required: true
schema:
type: integer
description: 'User ID'
responses:
'200':
description: 'Profile photo deleted'
content:
application/json:
schema:
type: object
properties:
message: {type: string, example: OK}
data: {type: boolean, description: 'true if photo was deleted'}
'500':
description: 'Internal server error'
operationId: deleteUserProfilePhoto
'/vendorRisks/by-projid/{id}':
get:
tags:
- 'Vendor Risks'
summary: 'Get All Vendor Risks'
operationId: getAllVendorRisks
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: string
-
name: filter
in: query
required: false
schema:
type: string
enum:
- active
- deleted
- all
default: active
responses:
'200':
description: Success
content:
application/json:
schema:
type: object
properties:
message: {type: string}
data: {type: array, items: {$ref: '#/components/schemas/VendorRiskResponse'}}
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/vendorRisks/by-vendorid/{id}':
get:
tags:
- 'Vendor Risks'
summary: 'Get All Vendor Risks By Vendor Id'
operationId: getAllVendorRisksByVendorId
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
-
name: filter
in: query
required: false
schema:
type: string
enum:
- active
- deleted
- all
default: active
responses:
'200':
description: Success
content:
application/json:
schema:
type: object
properties:
message: {type: string}
data: {type: array, items: {$ref: '#/components/schemas/VendorRiskResponse'}}
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/vendorRisks/by-frameworkid/{id}':
get:
summary: 'Get Vendor Risks By Framework Id'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- 'Vendor Risks'
operationId: getVendorRisksByFrameworkId
security:
-
bearerAuth: []
/vendorRisks/all:
get:
tags:
- 'Vendor Risks'
summary: 'Get All Vendor Risks All Projects'
operationId: getAllVendorRisksAllProjects
security:
-
bearerAuth: []
parameters:
-
name: filter
in: query
required: false
schema:
type: string
enum:
- active
- deleted
- all
default: active
responses:
'200':
description: Success
content:
application/json:
schema:
type: object
properties:
message: {type: string}
data: {type: array, items: {$ref: '#/components/schemas/VendorRiskAllProjectsResponse'}}
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/vendorRisks/{id}':
get:
tags:
- 'Vendor Risks'
summary: 'Get Vendor Risk By Id'
operationId: getVendorRiskById
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: Success
content:
application/json:
schema:
type: object
properties:
message: {type: string}
data: {$ref: '#/components/schemas/VendorRiskResponse'}
'401':
description: Unauthorized
'500':
description: 'Internal server error'
patch:
tags:
- 'Vendor Risks'
summary: 'Update Vendor Risk By Id'
operationId: updateVendorRiskById
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/VendorRiskInput'
responses:
'202':
description: Accepted
content:
application/json:
schema:
type: object
properties:
message: {type: string}
data: {$ref: '#/components/schemas/VendorRiskResponse'}
'401':
description: Unauthorized
'500':
description: 'Internal server error'
delete:
tags:
- 'Vendor Risks'
summary: 'Delete Vendor Risk By Id'
operationId: deleteVendorRiskById
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
responses:
'202':
description: Accepted
content:
application/json:
schema:
type: object
properties:
message: {type: string}
data: {$ref: '#/components/schemas/VendorRiskResponse'}
'401':
description: Unauthorized
'500':
description: 'Internal server error'
/vendorRisks:
post:
tags:
- 'Vendor Risks'
summary: 'Create Vendor Risk'
operationId: createVendorRisk
security:
-
bearerAuth: []
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/VendorRiskInput'
responses:
'201':
description: 'Created successfully'
content:
application/json:
schema:
type: object
properties:
message: {type: string}
data: {$ref: '#/components/schemas/VendorRiskResponse'}
'401':
description: Unauthorized
'500':
description: 'Internal server error'
/vendors:
get:
tags:
- Vendors
summary: 'Get all vendors'
description: 'Retrieves all vendors for the authenticated user''s organization, ordered by creation date descending. Each vendor includes its associated project IDs and the reviewer''s full name.'
security:
-
bearerAuth: []
responses:
'200':
description: 'Vendors retrieved successfully'
content:
application/json:
schema:
type: object
properties:
message: {type: string, example: OK}
data: {type: array, items: {$ref: '#/components/schemas/VendorWithReviewerName'}}
'204':
description: 'No vendors found'
content:
application/json:
schema:
type: object
properties:
message: {type: string, example: 'No Content'}
data: {type: 'null'}
'401':
description: 'Unauthorized - missing or invalid JWT'
'500':
description: 'Internal server error'
content:
application/json:
schema:
type: object
properties:
message: {type: string, example: 'Internal Server Error'}
error: {type: string}
operationId: getAllVendors
post:
tags:
- Vendors
summary: 'Create a vendor'
description: "Creates a new vendor in the authenticated user's organization.\nValidates required fields, checks demo restrictions, associates\nprojects via the vendors_projects join table, records creation\nin change history, fires automation triggers (vendor_added),\nand sends in-app assignment notifications to assignee and reviewer.\n"
security:
-
bearerAuth: []
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/VendorInput'
responses:
'201':
description: 'Vendor created successfully'
content:
application/json:
schema:
type: object
properties:
message: {type: string, example: Created}
data: {$ref: '#/components/schemas/Vendor'}
'400':
description: 'Validation error (missing or invalid required fields)'
content:
application/json:
schema:
type: object
properties:
message: {type: string, example: 'Bad Request'}
data: {type: string, description: 'Validation error message'}
'401':
description: 'Unauthorized - missing or invalid JWT'
'403':
description: 'Business logic error (e.g. demo vendor restriction)'
content:
application/json:
schema:
type: object
properties:
message: {type: string, example: Forbidden}
data: {type: string}
'500':
description: 'Internal server error'
content:
application/json:
schema:
type: object
properties:
message: {type: string, example: 'Internal Server Error'}
error: {type: string}
'503':
description: 'Service unavailable - vendor creation returned null'
content:
application/json:
schema:
type: object
properties:
message: {type: string, example: 'Service Unavailable'}
error: {type: object}
operationId: createVendor
'/vendors/project-id/{id}':
get:
tags:
- Vendors
summary: 'Get vendors by project ID'
description: 'Retrieves all vendors associated with a specific project. Returns 404 if the project does not exist.'
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
description: 'Project ID'
responses:
'200':
description: 'Vendors retrieved successfully'
content:
application/json:
schema:
type: object
properties:
message: {type: string, example: OK}
data: {type: array, items: {$ref: '#/components/schemas/Vendor'}}
'401':
description: 'Unauthorized - missing or invalid JWT'
'404':
description: 'Project not found'
content:
application/json:
schema:
type: object
properties:
message: {type: string, example: 'Not Found'}
data: {type: array, items: {}}
'500':
description: 'Internal server error'
content:
application/json:
schema:
type: object
properties:
message: {type: string, example: 'Internal Server Error'}
error: {type: string}
operationId: getVendorByProjectId
'/vendors/{id}':
get:
tags:
- Vendors
summary: 'Get vendor by ID'
description: 'Retrieves a single vendor by its ID, including associated project IDs.'
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
description: 'Vendor ID'
responses:
'200':
description: 'Vendor retrieved successfully'
content:
application/json:
schema:
type: object
properties:
message: {type: string, example: OK}
data: {$ref: '#/components/schemas/Vendor'}
'401':
description: 'Unauthorized - missing or invalid JWT'
'404':
description: 'Vendor not found'
content:
application/json:
schema:
type: object
properties:
message: {type: string, example: 'Not Found'}
data: {type: 'null'}
'500':
description: 'Internal server error'
content:
application/json:
schema:
type: object
properties:
message: {type: string, example: 'Internal Server Error'}
error: {type: string}
operationId: getVendorById
patch:
tags:
- Vendors
summary: 'Update a vendor'
description: "Partially updates an existing vendor. Only provided fields are updated.\nReview and scorecard fields can be explicitly set to null to clear them.\nRequired fields (vendor_name, vendor_provides, website, vendor_contact_person)\nare only updated if they have a non-empty value.\nRecords field-level changes in change history, fires automation triggers\n(vendor_updated), and sends in-app notifications when assignee or reviewer changes.\n"
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
description: 'Vendor ID'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/VendorUpdate'
responses:
'202':
description: 'Vendor updated successfully'
content:
application/json:
schema:
type: object
properties:
message: {type: string, example: Accepted}
data: {$ref: '#/components/schemas/Vendor'}
'400':
description: 'Validation error'
content:
application/json:
schema:
type: object
properties:
message: {type: string, example: 'Bad Request'}
data: {type: string}
'401':
description: 'Unauthorized - missing or invalid JWT, or missing userId/role'
content:
application/json:
schema:
type: object
properties:
message: {type: string, example: Unauthorized}
'403':
description: 'Business logic error (e.g. demo vendor restriction)'
content:
application/json:
schema:
type: object
properties:
message: {type: string, example: Forbidden}
data: {type: string}
'404':
description: 'Vendor not found'
content:
application/json:
schema:
type: object
properties:
message: {type: string, example: 'Not Found'}
data: {type: object}
'500':
description: 'Internal server error'
content:
application/json:
schema:
type: object
properties:
message: {type: string, example: 'Internal Server Error'}
error: {type: string}
operationId: updateVendorById
delete:
tags:
- Vendors
summary: 'Delete a vendor'
description: "Deletes a vendor and all associated data in a transaction:\n1. Deletes vendor risks (vendor_risks table)\n2. Deletes project associations (vendors_projects table)\n3. Deletes the vendor record itself\nFires automation triggers (vendor_deleted).\n"
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
description: 'Vendor ID'
responses:
'202':
description: 'Vendor deleted successfully'
content:
application/json:
schema:
type: object
properties:
message: {type: string, example: Accepted}
data: {type: boolean, example: true}
'401':
description: 'Unauthorized - missing or invalid JWT'
'404':
description: 'Vendor not found'
content:
application/json:
schema:
type: object
properties:
message: {type: string, example: 'Not Found'}
data: {type: object}
'500':
description: 'Internal server error'
content:
application/json:
schema:
type: object
properties:
message: {type: string, example: 'Internal Server Error'}
error: {type: string}
operationId: deleteVendorById
'/vendor-change-history/{id}':
get:
tags:
- 'Change History'
summary: 'Get Vendor Change History By Id'
operationId: getVendorChangeHistoryById
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
/projects:
get:
summary: 'Get all projects'
description: "Returns all projects visible to the authenticated user. Admins and SuperAdmins see all projects in the organization; other roles see only projects they own or are members of.\n"
operationId: getAllProjects
tags:
- Projects
security:
-
bearerAuth: []
responses:
'200':
description: 'List of projects retrieved successfully'
content:
application/json:
schema:
type: object
properties:
message: {type: string, example: OK}
data: {type: array, items: {$ref: '#/components/schemas/ProjectListItem'}}
'401':
description: 'Unauthorized — missing or invalid JWT'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: 'Internal server error'
content:
application/json:
schema:
$ref: '#/components/schemas/ServerError'
post:
summary: 'Create a new project (use case)'
description: "Creates a new project with associated members and frameworks. If an approval_workflow_id is provided, framework creation is deferred until the approval request is approved.\n"
operationId: createProject
tags:
- Projects
security:
-
bearerAuth: []
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CreateProjectRequest'
responses:
'201':
description: 'Project created successfully'
content:
application/json:
schema:
type: object
properties:
message: {type: string, example: Created}
data: {type: object, properties: {project: {$ref: '#/components/schemas/Project'}, frameworks: {type: object, additionalProperties: true}}}
'400':
description: 'Validation error'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'403':
description: 'Business logic error (e.g. framework not allowed)'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: 'Internal server error'
content:
application/json:
schema:
$ref: '#/components/schemas/ServerError'
'503':
description: 'Service unavailable — project creation returned null'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'/projects/calculateProjectRisks/{id}':
get:
summary: 'Calculate project risk distribution'
operationId: getProjectRisksCalculations
tags:
- Projects
security:
-
bearerAuth: []
parameters:
-
$ref: '#/components/parameters/ProjectId'
responses:
'200':
description: 'Risk calculations returned'
content:
application/json:
schema:
type: object
properties:
message: {type: string, example: OK}
data: {type: array, items: {$ref: '#/components/schemas/ProjectRiskCount'}}
'204':
description: 'No risk data available'
content:
application/json:
schema:
type: object
properties:
message: {type: string, example: 'No Content'}
data: {nullable: true}
'500':
description: 'Internal server error'
content:
application/json:
schema:
$ref: '#/components/schemas/ServerError'
'/projects/calculateVendorRisks/{id}':
get:
summary: 'Calculate vendor risk distribution'
operationId: getVendorRisksCalculations
tags:
- Projects
security:
-
bearerAuth: []
parameters:
-
$ref: '#/components/parameters/ProjectId'
responses:
'200':
description: 'Vendor risk calculations returned'
content:
application/json:
schema:
type: object
properties:
message: {type: string, example: OK}
data: {type: array, items: {$ref: '#/components/schemas/VendorRiskCount'}}
'204':
description: 'No vendor risk data available'
content:
application/json:
schema:
type: object
properties:
message: {type: string, example: 'No Content'}
data: {nullable: true}
'500':
description: 'Internal server error'
content:
application/json:
schema:
$ref: '#/components/schemas/ServerError'
'/projects/{id}':
get:
summary: 'Get a project by ID'
description: 'Returns a single project with its frameworks, owner name, members, and approval status.'
operationId: getProjectById
tags:
- Projects
security:
-
bearerAuth: []
parameters:
-
$ref: '#/components/parameters/ProjectId'
responses:
'200':
description: 'Project found'
content:
application/json:
schema:
type: object
properties:
message: {type: string, example: OK}
data: {$ref: '#/components/schemas/ProjectDetail'}
'404':
description: 'Project not found'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: 'Internal server error'
content:
application/json:
schema:
$ref: '#/components/schemas/ServerError'
patch:
summary: 'Update a project by ID'
description: 'Partially updates a project and its member list. Only provided fields are updated.'
operationId: updateProjectById
tags:
- Projects
security:
-
bearerAuth: []
parameters:
-
$ref: '#/components/parameters/ProjectId'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/UpdateProjectRequest'
responses:
'202':
description: 'Project updated successfully'
content:
application/json:
schema:
type: object
properties:
message: {type: string, example: Accepted}
data: {$ref: '#/components/schemas/ProjectWithMembers'}
'400':
description: 'Validation error'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'403':
description: 'Business logic error'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: 'Project not found'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: 'Internal server error'
content:
application/json:
schema:
$ref: '#/components/schemas/ServerError'
delete:
summary: 'Delete a project by ID'
description: 'Deletes a project and all dependent entities (files, risks, members, framework data).'
operationId: deleteProjectById
tags:
- Projects
security:
-
bearerAuth: []
parameters:
-
$ref: '#/components/parameters/ProjectId'
responses:
'202':
description: 'Project deleted successfully'
content:
application/json:
schema:
type: object
properties:
message: {type: string, example: Accepted}
data: {type: boolean, example: true}
'404':
description: 'Project not found'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: 'Internal server error'
content:
application/json:
schema:
$ref: '#/components/schemas/ServerError'
'/projects/stats/{id}':
get:
summary: 'Get project statistics by ID'
operationId: getProjectStatsById
tags:
- Projects
security:
-
bearerAuth: []
parameters:
-
$ref: '#/components/parameters/ProjectId'
responses:
'202':
description: 'Project stats retrieved'
content:
application/json:
schema:
type: object
properties:
message: {type: string, example: Accepted}
data: {$ref: '#/components/schemas/ProjectStats'}
'500':
description: 'Internal server error'
content:
application/json:
schema:
$ref: '#/components/schemas/ServerError'
'/projects/complainces/{projid}':
get:
summary: 'Get compliance data for a project'
operationId: getCompliances
tags:
- Projects
security:
-
bearerAuth: []
parameters:
-
name: projid
in: path
required: true
description: 'The project ID'
schema:
type: integer
responses:
'200':
description: 'Compliance data returned'
content:
application/json:
schema:
type: object
properties:
message: {type: string, example: OK}
data: {type: array, items: {$ref: '#/components/schemas/ControlCategory'}}
'404':
description: 'Project not found'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: 'Internal server error'
content:
application/json:
schema:
$ref: '#/components/schemas/ServerError'
'/projects/compliance/progress/{id}':
get:
summary: 'Get compliance progress for a single project'
operationId: projectComplianceProgress
tags:
- Projects
security:
-
bearerAuth: []
parameters:
-
$ref: '#/components/parameters/ProjectId'
responses:
'200':
description: 'Compliance progress returned'
content:
application/json:
schema:
type: object
properties:
message: {type: string, example: OK}
data: {$ref: '#/components/schemas/ComplianceProgress'}
'404':
description: 'Project not found'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: 'Internal server error'
content:
application/json:
schema:
$ref: '#/components/schemas/ServerError'
'/projects/assessment/progress/{id}':
get:
summary: 'Get assessment progress for a single project'
operationId: projectAssessmentProgress
tags:
- Projects
security:
-
bearerAuth: []
parameters:
-
$ref: '#/components/parameters/ProjectId'
responses:
'200':
description: 'Assessment progress returned'
content:
application/json:
schema:
type: object
properties:
message: {type: string, example: OK}
data: {$ref: '#/components/schemas/AssessmentProgress'}
'404':
description: 'Project not found'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: 'Internal server error'
content:
application/json:
schema:
$ref: '#/components/schemas/ServerError'
/projects/all/compliance/progress:
get:
summary: 'Get compliance progress across all projects'
operationId: allProjectsComplianceProgress
tags:
- Projects
security:
-
bearerAuth: []
responses:
'200':
description: 'Aggregated compliance progress returned'
content:
application/json:
schema:
type: object
properties:
message: {type: string, example: OK}
data: {$ref: '#/components/schemas/ComplianceProgress'}
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: 'No projects found'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: 'Internal server error'
content:
application/json:
schema:
$ref: '#/components/schemas/ServerError'
/projects/all/assessment/progress:
get:
summary: 'Get assessment progress across all projects'
operationId: allProjectsAssessmentProgress
tags:
- Projects
security:
-
bearerAuth: []
responses:
'200':
description: 'Aggregated assessment progress returned'
content:
application/json:
schema:
type: object
properties:
message: {type: string, example: OK}
data: {$ref: '#/components/schemas/AssessmentProgress'}
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
description: 'No projects found'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: 'Internal server error'
content:
application/json:
schema:
$ref: '#/components/schemas/ServerError'
'/projects/{id}/status':
patch:
summary: 'Update project status'
operationId: updateProjectStatus
tags:
- Projects
security:
-
bearerAuth: []
parameters:
-
$ref: '#/components/parameters/ProjectId'
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- status
properties:
status:
$ref: '#/components/schemas/ProjectStatus'
responses:
'200':
description: 'Project status updated successfully'
content:
application/json:
schema:
type: object
properties:
message: {type: string, example: OK}
data: {$ref: '#/components/schemas/ProjectWithMembers'}
'404':
description: 'Project not found'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
description: 'Internal server error'
content:
application/json:
schema:
$ref: '#/components/schemas/ServerError'
/questions:
get:
tags:
- Assessments
summary: 'Get All Questions'
operationId: getAllQuestions
security:
-
bearerAuth: []
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/questions/{id}':
get:
tags:
- Assessments
summary: 'Get Question By Id'
operationId: getQuestionById
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/questions/bysubtopic/{id}':
get:
tags:
- Assessments
summary: 'Get Questions By Subtopic Id'
operationId: getQuestionsBySubtopicId
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/questions/bytopic/{id}':
get:
tags:
- Assessments
summary: 'Get Questions By Topic Id'
operationId: getQuestionsByTopicId
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
/autoDrivers:
post:
tags:
- 'Demo Data'
summary: 'Post Auto Driver'
operationId: postAutoDriver
security:
-
bearerAuth: []
description: 'Requires role: Admin'
requestBody:
content:
application/json:
schema:
type: object
responses:
'201':
description: 'Created successfully'
'401':
description: Unauthorized
'403':
description: 'Forbidden - insufficient role'
'500':
description: 'Internal server error'
delete:
tags:
- 'Demo Data'
summary: 'Delete Auto Driver'
operationId: deleteAutoDriver
security:
-
bearerAuth: []
description: 'Requires role: Admin'
responses:
'200':
description: 'Deleted successfully'
'401':
description: Unauthorized
'403':
description: 'Forbidden - insufficient role'
'500':
description: 'Internal server error'
/assessments:
get:
tags:
- Assessments
summary: 'Get All Assessments'
operationId: getAllAssessments
security:
-
bearerAuth: []
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
post:
summary: 'Create Assessment'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- Assessments
operationId: createAssessment
security:
-
bearerAuth: []
'/assessments/getAnswers/{id}':
get:
tags:
- Assessments
summary: 'Get Answers'
operationId: getAnswers
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/assessments/{id}':
get:
tags:
- Assessments
summary: 'Get Assessment By Id'
operationId: getAssessmentById
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
put:
summary: 'Update Assessment By Id'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- Assessments
operationId: updateAssessmentById
security:
-
bearerAuth: []
delete:
summary: 'Delete Assessment By Id'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- Assessments
operationId: deleteAssessmentById
security:
-
bearerAuth: []
'/assessments/project/byid/{id}':
get:
tags:
- Assessments
summary: 'Get Assessment By Project Id'
operationId: getAssessmentByProjectId
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
/projectRisks:
get:
tags:
- 'Project Risks'
summary: 'Get All Risks'
operationId: getAllRisks
security:
-
bearerAuth: []
parameters:
-
name: filter
in: query
required: false
schema:
type: string
enum:
- active
- deleted
- all
default: active
description: 'Filter by soft-delete state.'
responses:
'200':
description: Success
content:
application/json:
schema:
type: object
properties:
message: {type: string}
data: {type: array, items: {$ref: '#/components/schemas/ProjectRiskResponse'}}
'401':
description: Unauthorized
'500':
description: 'Internal server error'
post:
tags:
- 'Project Risks'
summary: 'Create Risk'
operationId: createRisk
security:
-
bearerAuth: []
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/ProjectRiskInput'
responses:
'201':
description: 'Created successfully'
content:
application/json:
schema:
type: object
properties:
message: {type: string}
data: {$ref: '#/components/schemas/ProjectRiskResponse'}
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/projectRisks/by-projid/{id}':
get:
tags:
- 'Project Risks'
summary: 'Get Risks By Project'
operationId: getRisksByProject
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: string
-
name: filter
in: query
required: false
schema:
type: string
enum:
- active
- deleted
- all
default: active
responses:
'200':
description: Success
content:
application/json:
schema:
type: object
properties:
message: {type: string}
data: {type: array, items: {$ref: '#/components/schemas/ProjectRiskResponse'}}
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/projectRisks/by-frameworkid/{id}':
get:
tags:
- 'Project Risks'
summary: 'Get Risks By Framework'
operationId: getRisksByFramework
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
-
name: filter
in: query
required: false
schema:
type: string
enum:
- active
- deleted
- all
default: active
responses:
'200':
description: Success
content:
application/json:
schema:
type: object
properties:
message: {type: string}
data: {type: array, items: {$ref: '#/components/schemas/ProjectRiskResponse'}}
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/projectRisks/{id}':
get:
tags:
- 'Project Risks'
summary: 'Get Risk By Id'
operationId: getRiskById
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: Success
content:
application/json:
schema:
type: object
properties:
message: {type: string}
data: {$ref: '#/components/schemas/ProjectRiskResponse'}
'401':
description: Unauthorized
'500':
description: 'Internal server error'
put:
tags:
- 'Project Risks'
summary: 'Update Risk By Id'
operationId: updateRiskById
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/ProjectRiskInput'
responses:
'200':
description: Success
content:
application/json:
schema:
type: object
properties:
message: {type: string}
data: {$ref: '#/components/schemas/ProjectRiskResponse'}
'401':
description: Unauthorized
'500':
description: 'Internal server error'
delete:
tags:
- 'Project Risks'
summary: 'Delete Risk By Id'
operationId: deleteRiskById
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: 'Deleted successfully'
content:
application/json:
schema:
type: object
properties:
message: {type: string}
data: {$ref: '#/components/schemas/ProjectRiskResponse'}
'401':
description: Unauthorized
'500':
description: 'Internal server error'
/projectRisks/bulk:
patch:
summary: 'Bulk Update Project Risks'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- 'Project Risks'
operationId: bulkUpdateProjectRisks
security:
-
bearerAuth: []
description: 'Requires role: Admin or Editor'
/roles:
get:
tags:
- Roles
summary: 'Get All Roles'
operationId: getAllRoles
security:
-
bearerAuth: []
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/roles/{id}':
get:
tags:
- Roles
summary: 'Get Role By Id'
operationId: getRoleById
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
/files:
get:
tags:
- Files
summary: 'Get User Files Meta Data'
operationId: files_getAllFolders
security:
-
bearerAuth: []
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
post:
tags:
- Files
summary: 'Post File Content'
operationId: files_createFolder
security:
-
bearerAuth: []
requestBody:
content:
application/json:
schema:
type: object
responses:
'201':
description: 'Created successfully'
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/files/by-projid/{id}':
get:
tags:
- Files
summary: 'Get File Meta By Project Id'
operationId: getFileMetaByProjectId
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/files/entity/{framework_type}/{entity_type}/{entity_id}':
get:
tags:
- Files
summary: 'Get Entity Files'
operationId: getEntityFiles
security:
-
bearerAuth: []
parameters:
-
name: framework_type
in: path
required: true
schema:
type: string
-
name: entity_type
in: path
required: true
schema:
type: string
-
name: entity_id
in: path
required: true
schema:
type: integer
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
/files/attach:
post:
tags:
- Files
summary: 'Attach File To Entity'
operationId: attachFileToEntity
security:
-
bearerAuth: []
requestBody:
content:
application/json:
schema:
type: object
responses:
'201':
description: 'Created successfully'
'401':
description: Unauthorized
'500':
description: 'Internal server error'
/files/attach-bulk:
post:
tags:
- Files
summary: 'Attach Files To Entity'
operationId: attachFilesToEntity
security:
-
bearerAuth: []
requestBody:
content:
application/json:
schema:
type: object
responses:
'201':
description: 'Created successfully'
'401':
description: Unauthorized
'500':
description: 'Internal server error'
/files/detach:
delete:
tags:
- Files
summary: 'Detach File From Entity'
operationId: detachFileFromEntity
security:
-
bearerAuth: []
responses:
'200':
description: 'Deleted successfully'
'401':
description: Unauthorized
'500':
description: 'Internal server error'
/files/bulk-tags:
patch:
summary: 'Bulk Update File Tags'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- Files
operationId: bulkUpdateFileTags
security:
-
bearerAuth: []
description: 'Requires role: Admin or Editor'
'/files/{id}':
get:
tags:
- Files
summary: 'Get File Content By Id'
operationId: files_getFolderById
security:
-
bearerAuth: []
description: 'Requires role: Admin'
parameters:
-
name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: Success
'401':
description: Unauthorized
'403':
description: 'Forbidden - insufficient role'
'500':
description: 'Internal server error'
patch:
tags:
- Files
summary: 'Update Folder'
operationId: files_updateFolder
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
requestBody:
content:
application/json:
schema:
type: object
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
delete:
tags:
- Files
summary: 'Delete Folder'
operationId: files_deleteFolder
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: 'Deleted successfully'
'401':
description: Unauthorized
'500':
description: 'Internal server error'
/mail/invite:
post:
tags:
- Mail
summary: 'Invite Limiter'
operationId: anonymous
security:
-
bearerAuth: []
requestBody:
content:
application/json:
schema:
type: object
responses:
'201':
description: 'Created successfully'
'401':
description: Unauthorized
'500':
description: 'Internal server error'
/mail/reset-password:
post:
tags:
- Mail
summary: Email
operationId: mail_anonymous
requestBody:
content:
application/json:
schema:
type: object
responses:
'201':
description: 'Created successfully'
'500':
description: 'Internal server error'
/invitations:
get:
tags:
- Invitations
summary: 'Get Invitations'
operationId: getInvitations
security:
-
bearerAuth: []
description: 'Requires role: Admin or SuperAdmin'
responses:
'200':
description: Success
'401':
description: Unauthorized
'403':
description: 'Forbidden - insufficient role'
'500':
description: 'Internal server error'
'/invitations/{id}':
delete:
tags:
- Invitations
summary: 'Revoke Invitation'
operationId: revokeInvitation
security:
-
bearerAuth: []
description: 'Requires role: Admin or SuperAdmin'
parameters:
-
name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: 'Deleted successfully'
'401':
description: Unauthorized
'403':
description: 'Forbidden - insufficient role'
'500':
description: 'Internal server error'
'/invitations/{id}/resend':
post:
tags:
- Invitations
summary: 'Resend Invitation'
operationId: resendInvitation
security:
-
bearerAuth: []
description: 'Requires role: Admin or SuperAdmin'
parameters:
-
name: id
in: path
required: true
schema:
type: integer
requestBody:
content:
application/json:
schema:
type: object
responses:
'201':
description: 'Created successfully'
'401':
description: Unauthorized
'403':
description: 'Forbidden - insufficient role'
'500':
description: 'Internal server error'
/frameworks:
get:
tags:
- Frameworks
summary: 'Get All Frameworks'
operationId: getAllFrameworks
security:
-
bearerAuth: []
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/frameworks/{id}':
get:
tags:
- Frameworks
summary: 'Get Framework By Id'
operationId: getFrameworkById
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
/frameworks/toProject:
post:
tags:
- Frameworks
summary: 'Add Framework To Project'
operationId: addFrameworkToProject
security:
-
bearerAuth: []
requestBody:
content:
application/json:
schema:
type: object
responses:
'201':
description: 'Created successfully'
'401':
description: Unauthorized
'500':
description: 'Internal server error'
/frameworks/fromProject:
delete:
tags:
- Frameworks
summary: 'Delete Framework From Project'
operationId: deleteFrameworkFromProject
security:
-
bearerAuth: []
responses:
'200':
description: 'Deleted successfully'
'401':
description: Unauthorized
'500':
description: 'Internal server error'
/eu-ai-act/controlCategories:
get:
tags:
- 'EU AI Act'
summary: 'Get All Control Categories'
operationId: getAllControlCategories
security:
-
bearerAuth: []
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/eu-ai-act/controls/byControlCategoryId/{id}':
get:
tags:
- 'EU AI Act'
summary: 'Get Controls By Control Category Id'
operationId: getControlsByControlCategoryId
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
/eu-ai-act/topics:
get:
tags:
- 'EU AI Act'
summary: 'Get All Topics'
operationId: getAllTopics
security:
-
bearerAuth: []
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/eu-ai-act/assessments/byProjectId/{id}':
get:
tags:
- 'EU AI Act'
summary: 'Get Assessments By Project Id'
operationId: getAssessmentsByProjectId
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
delete:
tags:
- 'EU AI Act'
summary: 'Delete Assessments By Project Id'
operationId: deleteAssessmentsByProjectId
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: 'Deleted successfully'
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/eu-ai-act/compliances/byProjectId/{id}':
get:
tags:
- 'EU AI Act'
summary: 'Get Compliances By Project Id'
operationId: getCompliancesByProjectId
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
delete:
tags:
- 'EU AI Act'
summary: 'Delete Compliances By Project Id'
operationId: deleteCompliancesByProjectId
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: 'Deleted successfully'
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/eu-ai-act/compliances/progress/{id}':
get:
tags:
- 'EU AI Act'
summary: 'Get Project Compliance Progress'
operationId: getProjectComplianceProgress
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/eu-ai-act/assessments/progress/{id}':
get:
tags:
- 'EU AI Act'
summary: 'Get Project Assessment Progress'
operationId: getProjectAssessmentProgress
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
/eu-ai-act/all/compliances/progress:
get:
tags:
- 'EU AI Act'
summary: 'Get All Projects Compliance Progress'
operationId: getAllProjectsComplianceProgress
security:
-
bearerAuth: []
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
/eu-ai-act/all/assessments/progress:
get:
tags:
- 'EU AI Act'
summary: 'Get All Projects Assessment Progress'
operationId: getAllProjectsAssessmentProgress
security:
-
bearerAuth: []
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
/eu-ai-act/topicById:
get:
tags:
- 'EU AI Act'
summary: 'Get Topic By Id'
operationId: getTopicById
security:
-
bearerAuth: []
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
/eu-ai-act/controlById:
get:
tags:
- 'EU AI Act'
summary: 'Get Control By Id'
operationId: getControlById
security:
-
bearerAuth: []
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/eu-ai-act/saveControls/{id}':
patch:
tags:
- 'EU AI Act'
summary: 'Save Controls'
operationId: saveControls
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
requestBody:
content:
application/json:
schema:
type: object
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/eu-ai-act/saveAnswer/{id}':
patch:
tags:
- 'EU AI Act'
summary: 'Update Question By Id'
operationId: updateQuestionById
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
requestBody:
content:
application/json:
schema:
type: object
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
/organizations/exists:
get:
tags:
- Organizations
summary: 'Get Organizations Exists'
operationId: getOrganizationsExists
responses:
'200':
description: Success
'500':
description: 'Internal server error'
'/organizations/{id}':
get:
tags:
- Organizations
summary: 'Get Organization By Id'
operationId: getOrganizationById
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
patch:
tags:
- Organizations
summary: 'Update Organization By Id'
operationId: updateOrganizationById
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
requestBody:
content:
application/json:
schema:
type: object
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
description: 'Requires role: Admin'
/organizations:
post:
tags:
- Organizations
summary: 'Create Organization'
operationId: createOrganization
security:
-
bearerAuth: []
requestBody:
content:
application/json:
schema:
type: object
responses:
'201':
description: 'Created successfully'
'401':
description: Unauthorized
'500':
description: 'Internal server error'
description: 'Requires role: Super Admin'
'/organizations/{id}/onboarding-status':
patch:
tags:
- Organizations
summary: 'Update Onboarding Status'
operationId: updateOnboardingStatus
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
requestBody:
content:
application/json:
schema:
type: object
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
description: 'Requires role: Admin'
/iso-42001/clauses:
get:
tags:
- 'ISO 42001'
summary: 'Get All Clauses'
operationId: getAllClauses
security:
-
bearerAuth: []
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/iso-42001/clauses/struct/byProjectId/{id}':
get:
tags:
- 'ISO 42001'
summary: 'Get All Clauses Struct For Project'
operationId: getAllClausesStructForProject
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
/iso-42001/annexes:
get:
tags:
- 'ISO 42001'
summary: 'Get All Annexes'
operationId: getAllAnnexes
security:
-
bearerAuth: []
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/iso-42001/annexes/struct/byProjectId/{id}':
get:
tags:
- 'ISO 42001'
summary: 'Get All Annexes Struct For Project'
operationId: getAllAnnexesStructForProject
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/iso-42001/clauses/byProjectId/{id}':
get:
tags:
- 'ISO 42001'
summary: 'Get Clauses By Project Id'
operationId: getClausesByProjectId
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
delete:
tags:
- 'ISO 42001'
summary: 'Delete Management System Clauses'
operationId: deleteManagementSystemClauses
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: 'Deleted successfully'
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/iso-42001/annexes/byProjectId/{id}':
get:
tags:
- 'ISO 42001'
summary: 'Get Annexes By Project Id'
operationId: getAnnexesByProjectId
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
delete:
tags:
- 'ISO 42001'
summary: 'Delete Reference Controls'
operationId: deleteReferenceControls
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: 'Deleted successfully'
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/iso-42001/subClauses/byClauseId/{id}':
get:
tags:
- 'ISO 42001'
summary: 'Get Sub Clauses By Clause Id'
operationId: getSubClausesByClauseId
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/iso-42001/annexCategories/byAnnexId/{id}':
get:
tags:
- 'ISO 42001'
summary: 'Get Annex Categories By Annex Id'
operationId: getAnnexCategoriesByAnnexId
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/iso-42001/subClause/byId/{id}':
get:
tags:
- 'ISO 42001'
summary: 'Get Sub Clause By Id'
operationId: getSubClauseById
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/iso-42001/subclauses/{id}/risks':
get:
tags:
- 'ISO 42001'
summary: 'Get Sub Clause Risks'
operationId: getSubClauseRisks
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/iso-42001/annexCategories/{id}/risks':
get:
tags:
- 'ISO 42001'
summary: 'Get Annex Category Risks'
operationId: getAnnexCategoryRisks
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/iso-42001/annexCategory/byId/{id}':
get:
tags:
- 'ISO 42001'
summary: 'Get Annex Category By Id'
operationId: getAnnexCategoryById
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/iso-42001/clauses/progress/{id}':
get:
tags:
- 'ISO 42001'
summary: 'Get Project Clauses Progress'
operationId: getProjectClausesProgress
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/iso-42001/annexes/progress/{id}':
get:
tags:
- 'ISO 42001'
summary: 'Get Project Annxes Progress'
operationId: getProjectAnnxesProgress
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
/iso-42001/all/clauses/progress:
get:
tags:
- 'ISO 42001'
summary: 'Get All Projects Clauses Progress'
operationId: getAllProjectsClausesProgress
security:
-
bearerAuth: []
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
/iso-42001/all/annexes/progress:
get:
tags:
- 'ISO 42001'
summary: 'Get All Projects Annxes Progress'
operationId: getAllProjectsAnnxesProgress
security:
-
bearerAuth: []
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/iso-42001/clauses/assignments/{id}':
get:
tags:
- 'ISO 42001'
summary: 'Get Project Clauses Assignments'
operationId: getProjectClausesAssignments
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/iso-42001/annexes/assignments/{id}':
get:
tags:
- 'ISO 42001'
summary: 'Get Project Annexes Assignments'
operationId: getProjectAnnexesAssignments
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/iso-42001/saveClauses/{id}':
patch:
tags:
- 'ISO 42001'
summary: 'Save Clauses'
operationId: saveClauses
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
requestBody:
content:
application/json:
schema:
type: object
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/iso-42001/saveAnnexes/{id}':
patch:
tags:
- 'ISO 42001'
summary: 'Save Annexes'
operationId: saveAnnexes
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
requestBody:
content:
application/json:
schema:
type: object
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
/iso-27001/clauses:
get:
tags:
- 'ISO 27001'
summary: 'Get All Clauses'
operationId: iso_27001_getAllClauses
security:
-
bearerAuth: []
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/iso-27001/clauses/struct/byProjectId/{id}':
get:
tags:
- 'ISO 27001'
summary: 'Get All Clauses Struct For Project'
operationId: iso_27001_getAllClausesStructForProject
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
/iso-27001/annexes:
get:
tags:
- 'ISO 27001'
summary: 'Get All Annexes'
operationId: iso_27001_getAllAnnexes
security:
-
bearerAuth: []
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/iso-27001/annexes/struct/byProjectId/{id}':
get:
tags:
- 'ISO 27001'
summary: 'Get All Annexes Struct For Project'
operationId: iso_27001_getAllAnnexesStructForProject
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/iso-27001/clauses/byProjectId/{id}':
get:
tags:
- 'ISO 27001'
summary: 'Get Clauses By Project Id'
operationId: iso_27001_getClausesByProjectId
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
delete:
tags:
- 'ISO 27001'
summary: 'Delete Management System Clauses'
operationId: iso_27001_deleteManagementSystemClauses
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: 'Deleted successfully'
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/iso-27001/annexes/byProjectId/{id}':
get:
tags:
- 'ISO 27001'
summary: 'Get Annexes By Project Id'
operationId: iso_27001_getAnnexesByProjectId
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
delete:
tags:
- 'ISO 27001'
summary: 'Delete Reference Controls'
operationId: iso_27001_deleteReferenceControls
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: 'Deleted successfully'
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/iso-27001/subClauses/byClauseId/{id}':
get:
tags:
- 'ISO 27001'
summary: 'Get Sub Clauses By Clause Id'
operationId: iso_27001_getSubClausesByClauseId
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/iso-27001/annexControls/byAnnexId/{id}':
get:
tags:
- 'ISO 27001'
summary: 'Get Annex Controls By Annex Id'
operationId: getAnnexControlsByAnnexId
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/iso-27001/subClause/byId/{id}':
get:
tags:
- 'ISO 27001'
summary: 'Get Sub Clause By Id'
operationId: iso_27001_getSubClauseById
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/iso-27001/annexControl/byId/{id}':
get:
tags:
- 'ISO 27001'
summary: 'Get Annex Control By Id'
operationId: getAnnexControlById
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/iso-27001/clauses/progress/{id}':
get:
tags:
- 'ISO 27001'
summary: 'Get Project Clauses Progress'
operationId: iso_27001_getProjectClausesProgress
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/iso-27001/annexes/progress/{id}':
get:
tags:
- 'ISO 27001'
summary: 'Get Project Annxes Progress'
operationId: iso_27001_getProjectAnnxesProgress
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
/iso-27001/all/clauses/progress:
get:
tags:
- 'ISO 27001'
summary: 'Get All Projects Clauses Progress'
operationId: iso_27001_getAllProjectsClausesProgress
security:
-
bearerAuth: []
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
/iso-27001/all/annexes/progress:
get:
tags:
- 'ISO 27001'
summary: 'Get All Projects Annxes Progress'
operationId: iso_27001_getAllProjectsAnnxesProgress
security:
-
bearerAuth: []
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/iso-27001/clauses/assignments/{id}':
get:
tags:
- 'ISO 27001'
summary: 'Get Project Clauses Assignments'
operationId: iso_27001_getProjectClausesAssignments
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/iso-27001/annexes/assignments/{id}':
get:
tags:
- 'ISO 27001'
summary: 'Get Project Annexes Assignments'
operationId: iso_27001_getProjectAnnexesAssignments
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/iso-27001/saveClauses/{id}':
patch:
tags:
- 'ISO 27001'
summary: 'Save Clauses'
operationId: iso_27001_saveClauses
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
requestBody:
content:
application/json:
schema:
type: object
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/iso-27001/saveAnnexes/{id}':
patch:
tags:
- 'ISO 27001'
summary: 'Save Annexes'
operationId: iso_27001_saveAnnexes
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
requestBody:
content:
application/json:
schema:
type: object
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
/training:
get:
tags:
- Training
summary: 'Get All Training Registar'
operationId: getAllTrainingRegistar
security:
-
bearerAuth: []
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
post:
tags:
- Training
summary: 'Create New Training Registar'
operationId: createNewTrainingRegistar
security:
-
bearerAuth: []
requestBody:
content:
application/json:
schema:
type: object
responses:
'201':
description: 'Created successfully'
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/training/training-id/{id}':
get:
tags:
- Training
summary: 'Get Training Registar By Id'
operationId: getTrainingRegistarById
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/training/{id}':
patch:
tags:
- Training
summary: 'Update Training Registar By Id'
operationId: updateTrainingRegistarById
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
requestBody:
content:
application/json:
schema:
type: object
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
delete:
tags:
- Training
summary: 'Delete Training Registar By Id'
operationId: deleteTrainingRegistarById
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: 'Deleted successfully'
'401':
description: Unauthorized
'500':
description: 'Internal server error'
/aiTrustCentre/overview:
get:
tags:
- 'AI Trust Centre'
summary: 'Get A I Trust Centre Overview'
operationId: getAITrustCentreOverview
security:
-
bearerAuth: []
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
put:
tags:
- 'AI Trust Centre'
summary: 'Update A I Trust Overview'
operationId: updateAITrustOverview
security:
-
bearerAuth: []
requestBody:
content:
application/json:
schema:
type: object
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
/aiTrustCentre/resources:
get:
tags:
- 'AI Trust Centre'
summary: 'Get A I Trust Centre Resources'
operationId: getAITrustCentreResources
security:
-
bearerAuth: []
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
post:
tags:
- 'AI Trust Centre'
summary: 'Create A I Trust Resource'
operationId: createAITrustResource
security:
-
bearerAuth: []
requestBody:
content:
application/json:
schema:
type: object
responses:
'201':
description: 'Created successfully'
'401':
description: Unauthorized
'500':
description: 'Internal server error'
/aiTrustCentre/subprocessors:
get:
tags:
- 'AI Trust Centre'
summary: 'Get A I Trust Centre Subprocessors'
operationId: getAITrustCentreSubprocessors
security:
-
bearerAuth: []
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
post:
tags:
- 'AI Trust Centre'
summary: 'Create A I Trust Subprocessor'
operationId: createAITrustSubprocessor
security:
-
bearerAuth: []
requestBody:
content:
application/json:
schema:
type: object
responses:
'201':
description: 'Created successfully'
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/aiTrustCentre/{hash}':
get:
tags:
- 'AI Trust Centre'
summary: 'Get A I Trust Centre Public Page'
operationId: getAITrustCentrePublicPage
parameters:
-
name: hash
in: path
required: true
schema:
type: string
responses:
'200':
description: Success
'500':
description: 'Internal server error'
'/aiTrustCentre/{hash}/logo':
get:
tags:
- 'AI Trust Centre'
summary: 'Get Company Logo'
operationId: getCompanyLogo
parameters:
-
name: hash
in: path
required: true
schema:
type: string
responses:
'200':
description: Success
'500':
description: 'Internal server error'
'/aiTrustCentre/{hash}/resources/{id}':
get:
tags:
- 'AI Trust Centre'
summary: 'Get A I Trust Centre Public Resource'
operationId: getAITrustCentrePublicResource
parameters:
-
name: hash
in: path
required: true
schema:
type: string
-
name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: Success
'500':
description: 'Internal server error'
/aiTrustCentre/logo:
post:
tags:
- 'AI Trust Centre'
summary: 'Upload company logo'
operationId: uploadCompanyLogo
security:
-
bearerAuth: []
requestBody:
content:
application/json:
schema:
type: object
responses:
'201':
description: 'Created successfully'
'401':
description: Unauthorized
'500':
description: 'Internal server error'
delete:
tags:
- 'AI Trust Centre'
summary: 'Delete Company Logo'
operationId: deleteCompanyLogo
security:
-
bearerAuth: []
responses:
'200':
description: 'Deleted successfully'
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/aiTrustCentre/resources/{id}':
put:
tags:
- 'AI Trust Centre'
summary: 'Update A I Trust Resource'
operationId: updateAITrustResource
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
requestBody:
content:
application/json:
schema:
type: object
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
delete:
tags:
- 'AI Trust Centre'
summary: 'Delete A I Trust Resource'
operationId: deleteAITrustResource
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: 'Deleted successfully'
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/aiTrustCentre/subprocessors/{id}':
put:
tags:
- 'AI Trust Centre'
summary: 'Update A I Trust Subprocessor'
operationId: updateAITrustSubprocessor
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
requestBody:
content:
application/json:
schema:
type: object
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
delete:
tags:
- 'AI Trust Centre'
summary: 'Delete A I Trust Subprocessor'
operationId: deleteAITrustSubprocessor
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: 'Deleted successfully'
'401':
description: Unauthorized
'500':
description: 'Internal server error'
/logger/events:
get:
tags:
- System
summary: 'Get Events'
operationId: getEvents
security:
-
bearerAuth: []
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
/logger/logs:
get:
tags:
- System
summary: 'Get Logs'
operationId: getLogs
security:
-
bearerAuth: []
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
/modelInventory:
get:
tags:
- 'Model Inventory'
summary: 'Get all model inventories'
description: "Returns every model inventory record belonging to the caller's organization, ordered by created_at DESC, id ASC. Each record includes its associated project and framework IDs.\n"
operationId: getAllModelInventories
security:
-
bearerAuth: []
responses:
'200':
description: 'List of model inventories (may be empty)'
content:
application/json:
schema:
type: object
properties:
message: {type: string, example: OK}
data: {type: array, items: {$ref: '#/components/schemas/ModelInventoryResponse'}}
'401':
description: 'Missing or invalid JWT'
'500':
description: 'Internal server error'
content:
application/json:
schema:
$ref: '#/components/schemas/ServerError'
post:
tags:
- 'Model Inventory'
summary: 'Create a new model inventory'
description: "Creates a model inventory record, links it to the supplied project and framework IDs, records a change-history entry, fires any \"model_added\" automations, and notifies the approver (if set).\n"
operationId: createNewModelInventory
security:
-
bearerAuth: []
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/ModelInventoryCreateRequest'
responses:
'201':
description: 'Model inventory created'
content:
application/json:
schema:
type: object
properties:
message: {type: string, example: Created}
data: {$ref: '#/components/schemas/ModelInventoryResponse'}
'401':
description: 'Missing or invalid JWT'
'500':
description: 'Internal server error'
content:
application/json:
schema:
$ref: '#/components/schemas/ServerError'
/modelInventory/evaluations:
get:
tags:
- 'Model Inventory'
summary: 'Get All Model Evaluations'
operationId: getAllModelEvaluations
security:
-
bearerAuth: []
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/modelInventory/{id}/evaluations':
get:
tags:
- 'Model Inventory'
summary: 'Get Model Evaluations'
operationId: getModelEvaluations
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/modelInventory/{id}':
get:
tags:
- 'Model Inventory'
summary: 'Get a model inventory by ID'
description: "Returns a single model inventory record with its associated project and framework IDs. Returns 204 if the record does not exist.\n"
operationId: getModelInventoryById
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
description: 'Model inventory ID'
schema:
type: integer
responses:
'200':
description: 'Model inventory found'
content:
application/json:
schema:
type: object
properties:
message: {type: string, example: OK}
data: {$ref: '#/components/schemas/ModelInventoryResponse'}
'204':
description: 'No model inventory found for the given ID'
content:
application/json:
schema:
type: object
properties:
message: {type: string, example: 'No Content'}
data: {nullable: true}
'401':
description: 'Missing or invalid JWT'
'500':
description: 'Internal server error'
content:
application/json:
schema:
$ref: '#/components/schemas/ServerError'
patch:
tags:
- 'Model Inventory'
summary: 'Update a model inventory by ID'
description: "Partially updates a model inventory record. All body fields are optional; only provided fields are changed. Project and framework associations can be replaced or cleared. Fires \"model_updated\" automations and notifies a new approver if changed.\n"
operationId: updateModelInventoryById
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
description: 'Model inventory ID'
schema:
type: integer
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/ModelInventoryUpdateRequest'
responses:
'200':
description: 'Model inventory updated'
content:
application/json:
schema:
type: object
properties:
message: {type: string, example: OK}
data: {$ref: '#/components/schemas/ModelInventoryResponse'}
'401':
description: 'Missing or invalid JWT'
'404':
description: 'Model inventory not found'
content:
application/json:
schema:
type: object
properties:
message: {type: string, example: 'Not Found'}
data: {type: string, example: 'Model inventory not found'}
'500':
description: 'Internal server error'
content:
application/json:
schema:
$ref: '#/components/schemas/ServerError'
delete:
tags:
- 'Model Inventory'
summary: 'Delete a model inventory by ID'
description: "Deletes a model inventory record and its project/framework associations. Optionally deletes linked model risks when deleteRisks=true. Records deletion in change history and fires \"model_deleted\" automations.\n"
operationId: deleteModelInventoryById
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
description: 'Model inventory ID'
schema:
type: integer
-
name: deleteRisks
in: query
required: false
description: "When \"true\", also deletes associated rows from the model_risks table.\n"
schema:
type: string
enum:
- 'true'
- 'false'
default: 'false'
responses:
'200':
description: 'Model inventory deleted'
content:
application/json:
schema:
type: object
properties:
message: {type: string, example: OK}
data: {type: string, example: 'Model inventory deleted successfully'}
'401':
description: 'Missing or invalid JWT'
'404':
description: 'Model inventory not found'
content:
application/json:
schema:
type: object
properties:
message: {type: string, example: 'Not Found'}
data: {type: string, example: 'Model inventory not found'}
'500':
description: 'Internal server error'
content:
application/json:
schema:
$ref: '#/components/schemas/ServerError'
'/modelInventory/by-projectId/{projectId}':
get:
tags:
- 'Model Inventory'
summary: 'Get model inventories by project ID'
description: "Returns all model inventories associated with a project (via the model_inventories_projects_frameworks join table where framework_id IS NULL). Non-numeric project IDs (e.g. plugin-sourced) return an empty array.\n"
operationId: getModelByProjectId
security:
-
bearerAuth: []
parameters:
-
name: projectId
in: path
required: true
description: 'Project ID (integer). Non-numeric values return an empty array.'
schema:
type: integer
responses:
'200':
description: 'List of model inventories for the project (may be empty)'
content:
application/json:
schema:
type: object
properties:
message: {type: string, example: OK}
data: {type: array, items: {$ref: '#/components/schemas/ModelInventoryResponse'}}
'401':
description: 'Missing or invalid JWT'
'500':
description: 'Internal server error'
content:
application/json:
schema:
$ref: '#/components/schemas/ServerError'
'/modelInventory/by-frameworkId/{frameworkId}':
get:
tags:
- 'Model Inventory'
summary: 'Get model inventories by framework ID'
description: "Returns all model inventories associated with a framework (via the model_inventories_projects_frameworks join table where framework_id matches).\n"
operationId: getModelByFrameworkId
security:
-
bearerAuth: []
parameters:
-
name: frameworkId
in: path
required: true
description: 'Framework ID'
schema:
type: integer
responses:
'200':
description: 'List of model inventories for the framework (may be empty)'
content:
application/json:
schema:
type: object
properties:
message: {type: string, example: OK}
data: {type: array, items: {$ref: '#/components/schemas/ModelInventoryResponse'}}
'401':
description: 'Missing or invalid JWT'
'500':
description: 'Internal server error'
content:
application/json:
schema:
$ref: '#/components/schemas/ServerError'
/modelInventoryHistory/timeseries:
get:
tags:
- 'Model Inventory'
summary: 'Get Timeseries'
operationId: getTimeseries
security:
-
bearerAuth: []
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
/modelInventoryHistory/current-counts:
get:
tags:
- 'Model Inventory'
summary: 'Get Current Counts'
operationId: getCurrentCounts
security:
-
bearerAuth: []
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
/modelInventoryHistory/snapshot:
post:
tags:
- 'Model Inventory'
summary: 'Create Snapshot'
operationId: createSnapshot
security:
-
bearerAuth: []
requestBody:
content:
application/json:
schema:
type: object
responses:
'201':
description: 'Created successfully'
'401':
description: Unauthorized
'500':
description: 'Internal server error'
/dataset-bulk-upload/upload:
post:
tags:
- Datasets
summary: 'Handle Multer Error'
operationId: uploadDatasetFile
security:
-
bearerAuth: []
description: 'Requires role: Admin or Editor'
requestBody:
content:
application/json:
schema:
type: object
responses:
'201':
description: 'Created successfully'
'401':
description: Unauthorized
'403':
description: 'Forbidden - insufficient role'
'500':
description: 'Internal server error'
'/model-inventory-change-history/{id}':
get:
tags:
- 'Change History'
summary: 'Get Model Inventory Change History By Id'
operationId: getModelInventoryChangeHistoryById
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
/mrm/tiering:
get:
summary: 'Get Fleet Tiering'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- Mrm
operationId: getFleetTiering
security:
-
bearerAuth: []
'/mrm/models/{modelId}/tier':
put:
summary: 'Assign Model Tier'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- Mrm
operationId: assignModelTier
security:
-
bearerAuth: []
/mrm/validations:
get:
summary: 'Get Validations'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- Mrm
operationId: getValidations
security:
-
bearerAuth: []
'/mrm/models/{modelId}/validations':
post:
summary: 'Create Validation'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- Mrm
operationId: createValidation
security:
-
bearerAuth: []
'/mrm/validations/{id}':
patch:
summary: 'Update Validation'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- Mrm
operationId: updateValidation
security:
-
bearerAuth: []
'/mrm/validations/{id}/signoff':
post:
summary: 'Signoff Validation'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- Mrm
operationId: signoffValidation
security:
-
bearerAuth: []
/mrm/findings:
get:
summary: 'Get Findings'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- Mrm
operationId: getFindings
security:
-
bearerAuth: []
'/mrm/validations/{validationId}/findings':
post:
summary: 'Create Finding'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- Mrm
operationId: createFinding
security:
-
bearerAuth: []
'/mrm/findings/{id}':
patch:
summary: 'Update Finding'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- Mrm
operationId: updateFinding
security:
-
bearerAuth: []
'/mrm/models/{modelId}/roles':
get:
summary: 'Get Model Roles'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- Mrm
operationId: getModelRoles
security:
-
bearerAuth: []
put:
summary: 'Set Model Roles'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- Mrm
operationId: setModelRoles
security:
-
bearerAuth: []
/mrm/ingestion-tokens:
get:
summary: 'Get Ingestion Tokens'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- Mrm
operationId: getIngestionTokens
security:
-
bearerAuth: []
post:
summary: 'Create Ingestion Token'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- Mrm
operationId: createIngestionToken
security:
-
bearerAuth: []
'/mrm/ingestion-tokens/{id}/rotate':
post:
summary: 'Rotate Ingestion Token'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- Mrm
operationId: rotateIngestionToken
security:
-
bearerAuth: []
'/mrm/ingestion-tokens/{id}/revoke':
post:
summary: 'Revoke Ingestion Token'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- Mrm
operationId: revokeIngestionToken
security:
-
bearerAuth: []
/mrm/thresholds:
get:
summary: 'Get Thresholds'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- Mrm
operationId: getThresholds
security:
-
bearerAuth: []
'/mrm/models/{modelId}/thresholds':
post:
summary: 'Create Threshold'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- Mrm
operationId: createThreshold
security:
-
bearerAuth: []
'/mrm/thresholds/{id}':
patch:
summary: 'Update Threshold'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- Mrm
operationId: updateThreshold
security:
-
bearerAuth: []
delete:
summary: 'Delete Threshold'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- Mrm
operationId: deleteThreshold
security:
-
bearerAuth: []
/mrm/metric-keys:
get:
summary: 'Get Metric Keys'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- Mrm
operationId: getMetricKeys
security:
-
bearerAuth: []
post:
summary: 'Create Metric Key'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- Mrm
operationId: createMetricKey
security:
-
bearerAuth: []
'/mrm/models/{modelId}/monitoring':
get:
summary: 'Get Model Monitoring'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- Mrm
operationId: getModelMonitoring
security:
-
bearerAuth: []
'/mrm/models/{modelId}/monitoring/trend':
get:
summary: 'Get Metric Trend'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- Mrm
operationId: getMetricTrend
security:
-
bearerAuth: []
'/mrm/models/{modelId}/monitoring/breaches':
get:
summary: 'Get Breach History'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- Mrm
operationId: getBreachHistory
security:
-
bearerAuth: []
'/mrm/models/{modelId}/request-revalidation':
post:
summary: 'Request Revalidation'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- Mrm
operationId: requestRevalidation
security:
-
bearerAuth: []
'/mrm/models/{modelId}/revalidation-events':
get:
summary: 'Get Revalidation Events'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- Mrm
operationId: getRevalidationEvents
security:
-
bearerAuth: []
/mrm/revalidation/sweep:
post:
summary: 'Run Revalidation Sweep For Org'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- Mrm
operationId: runRevalidationSweepForOrg
security:
-
bearerAuth: []
/mrm/attestation/summary:
get:
summary: 'Get Attestation Summary Handler'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- Mrm
operationId: getAttestationSummaryHandler
security:
-
bearerAuth: []
/mrm/attestation/report:
get:
summary: 'Generate Attestation Report Handler'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- Mrm
operationId: generateAttestationReportHandler
security:
-
bearerAuth: []
/mrm/settings:
get:
summary: 'Get Mrm Settings Handler'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- Mrm
operationId: getMrmSettingsHandler
security:
-
bearerAuth: []
put:
summary: 'Update Mrm Settings Handler'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- Mrm
operationId: updateMrmSettingsHandler
security:
-
bearerAuth: []
'/mrm/models/{externalModelKey}/metrics':
post:
summary: 'Ingest Metrics'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- Mrm
operationId: ingestMetrics
/datasets:
get:
tags:
- Datasets
summary: 'Get All Datasets'
operationId: getAllDatasets
security:
-
bearerAuth: []
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
post:
tags:
- Datasets
summary: 'Create New Dataset'
operationId: createNewDataset
security:
-
bearerAuth: []
requestBody:
content:
application/json:
schema:
type: object
responses:
'201':
description: 'Created successfully'
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/datasets/{id}':
get:
tags:
- Datasets
summary: 'Get Dataset By Id'
operationId: getDatasetById
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
patch:
tags:
- Datasets
summary: 'Update Dataset By Id'
operationId: updateDatasetById
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
requestBody:
content:
application/json:
schema:
type: object
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
delete:
tags:
- Datasets
summary: 'Delete Dataset By Id'
operationId: deleteDatasetById
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: 'Deleted successfully'
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/datasets/by-model/{modelId}':
get:
tags:
- Datasets
summary: 'Get Datasets By Model Id'
operationId: getDatasetsByModelId
security:
-
bearerAuth: []
parameters:
-
name: modelId
in: path
required: true
schema:
type: integer
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/datasets/by-project/{projectId}':
get:
tags:
- Datasets
summary: 'Get Datasets By Project Id'
operationId: getDatasetsByProjectId
security:
-
bearerAuth: []
parameters:
-
name: projectId
in: path
required: true
schema:
type: integer
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/datasets/{id}/history':
get:
tags:
- Datasets
summary: 'Get Dataset History'
operationId: getDatasetHistory
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
/riskHistory/timeseries:
get:
tags:
- 'Risk History'
summary: 'Get Timeseries'
operationId: riskHistory_getTimeseries
security:
-
bearerAuth: []
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
/riskHistory/current-counts:
get:
tags:
- 'Risk History'
summary: 'Get Current Counts'
operationId: riskHistory_getCurrentCounts
security:
-
bearerAuth: []
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
/riskHistory/snapshot:
post:
tags:
- 'Risk History'
summary: 'Create Snapshot'
operationId: riskHistory_createSnapshot
security:
-
bearerAuth: []
requestBody:
content:
application/json:
schema:
type: object
responses:
'201':
description: 'Created successfully'
'401':
description: Unauthorized
'500':
description: 'Internal server error'
/modelRisks:
get:
tags:
- 'Model Risks'
summary: 'Get All Model Risks'
operationId: getAllModelRisks
security:
-
bearerAuth: []
parameters:
-
name: filter
in: query
required: false
schema:
type: string
enum:
- active
- deleted
- all
default: active
responses:
'200':
description: Success
content:
application/json:
schema:
type: object
properties:
message: {type: string}
data: {type: array, items: {$ref: '#/components/schemas/ModelRiskResponse'}}
'401':
description: Unauthorized
'500':
description: 'Internal server error'
post:
tags:
- 'Model Risks'
summary: 'Create New Model Risk'
operationId: createNewModelRisk
security:
-
bearerAuth: []
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/ModelRiskInput'
responses:
'201':
description: 'Created successfully'
content:
application/json:
schema:
type: object
properties:
message: {type: string}
data: {$ref: '#/components/schemas/ModelRiskResponse'}
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/modelRisks/{id}':
get:
tags:
- 'Model Risks'
summary: 'Get Model Risk By Id'
operationId: getModelRiskById
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: Success
content:
application/json:
schema:
type: object
properties:
message: {type: string}
data: {$ref: '#/components/schemas/ModelRiskResponse'}
'401':
description: Unauthorized
'500':
description: 'Internal server error'
put:
tags:
- 'Model Risks'
summary: 'Update Model Risk By Id'
operationId: updateModelRiskById
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/ModelRiskInput'
responses:
'200':
description: Success
content:
application/json:
schema:
type: object
properties:
message: {type: string}
data: {$ref: '#/components/schemas/ModelRiskResponse'}
'401':
description: Unauthorized
'500':
description: 'Internal server error'
patch:
tags:
- 'Model Risks'
summary: 'Update Model Risk By Id'
operationId: modelRisks_updateModelRiskById
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/ModelRiskInput'
responses:
'200':
description: Success
content:
application/json:
schema:
type: object
properties:
message: {type: string}
data: {$ref: '#/components/schemas/ModelRiskResponse'}
'401':
description: Unauthorized
'500':
description: 'Internal server error'
delete:
tags:
- 'Model Risks'
summary: 'Delete Model Risk By Id'
operationId: deleteModelRiskById
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: 'Deleted successfully'
'401':
description: Unauthorized
'500':
description: 'Internal server error'
/reporting/generate-report:
post:
tags:
- Reporting
summary: 'Generate Reports'
operationId: generateReports
security:
-
bearerAuth: []
description: 'Requires role: Admin'
requestBody:
content:
application/json:
schema:
type: object
responses:
'201':
description: 'Created successfully'
'401':
description: Unauthorized
'403':
description: 'Forbidden - insufficient role'
'500':
description: 'Internal server error'
get:
tags:
- Reporting
summary: 'Get All Generated Reports'
operationId: getAllGeneratedReports
security:
-
bearerAuth: []
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
/reporting/v2/generate-report:
post:
tags:
- Reporting
summary: 'Generate Reports V2'
operationId: generateReportsV2
security:
-
bearerAuth: []
description: 'Requires role: Admin'
requestBody:
content:
application/json:
schema:
type: object
responses:
'201':
description: 'Created successfully'
'401':
description: Unauthorized
'403':
description: 'Forbidden - insufficient role'
'500':
description: 'Internal server error'
'/reporting/{id}':
delete:
tags:
- Reporting
summary: 'Delete Generated Report By Id'
operationId: deleteGeneratedReportById
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: 'Deleted successfully'
'401':
description: Unauthorized
'500':
description: 'Internal server error'
/dashboard:
get:
tags:
- Dashboard
summary: 'Get Dashboard Data'
operationId: getDashboardData
security:
-
bearerAuth: []
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/tiers/features/{id}':
get:
tags:
- Subscriptions
summary: 'Get Tiers Features'
operationId: getTiersFeatures
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
/subscriptions:
get:
tags:
- Subscriptions
summary: 'Get Subscription Controller'
operationId: getSubscriptionController
security:
-
bearerAuth: []
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
post:
tags:
- Subscriptions
summary: 'Create Subscription Controller'
operationId: createSubscriptionController
security:
-
bearerAuth: []
requestBody:
content:
application/json:
schema:
type: object
responses:
'201':
description: 'Created successfully'
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/subscriptions/{id}':
put:
tags:
- Subscriptions
summary: 'Update Subscription Controller'
operationId: updateSubscriptionController
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
requestBody:
content:
application/json:
schema:
type: object
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
/tasks:
get:
tags:
- Tasks
summary: 'Get All Tasks'
operationId: getAllTasks
security:
-
bearerAuth: []
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
post:
tags:
- Tasks
summary: 'Create Task'
operationId: createTask
security:
-
bearerAuth: []
requestBody:
content:
application/json:
schema:
type: object
responses:
'201':
description: 'Created successfully'
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/tasks/{id}':
get:
tags:
- Tasks
summary: 'Get Task By Id'
operationId: getTaskById
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
put:
tags:
- Tasks
summary: 'Update Task'
operationId: updateTask
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
requestBody:
content:
application/json:
schema:
type: object
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
delete:
tags:
- Tasks
summary: 'Delete Task'
operationId: deleteTask
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: 'Deleted successfully'
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/tasks/{id}/entities':
get:
tags:
- Tasks
summary: 'Get Task Entity Links'
operationId: getTaskEntityLinks
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
post:
tags:
- Tasks
summary: 'Add Task Entity Link'
operationId: addTaskEntityLink
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
requestBody:
content:
application/json:
schema:
type: object
responses:
'201':
description: 'Created successfully'
'401':
description: Unauthorized
'500':
description: 'Internal server error'
/tasks/bulk:
patch:
summary: 'Bulk Update Tasks'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- Tasks
operationId: bulkUpdateTasks
security:
-
bearerAuth: []
description: 'Requires role: Admin or Editor'
'/tasks/{id}/restore':
put:
tags:
- Tasks
summary: 'Restore Task'
operationId: restoreTask
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
requestBody:
content:
application/json:
schema:
type: object
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/tasks/{id}/hard':
delete:
tags:
- Tasks
summary: 'Hard Delete Task'
operationId: hardDeleteTask
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: 'Deleted successfully'
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/tasks/{id}/entities/{linkId}':
delete:
tags:
- Tasks
summary: 'Remove Task Entity Link'
operationId: removeTaskEntityLink
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
-
name: linkId
in: path
required: true
schema:
type: integer
responses:
'200':
description: 'Deleted successfully'
'401':
description: Unauthorized
'500':
description: 'Internal server error'
/deadlines/summary:
get:
summary: 'Get Deadlines Summary'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- Deadlines
operationId: getDeadlinesSummary
security:
-
bearerAuth: []
/policies/import/docx:
post:
tags:
- Policies
summary: 'Import DOCX and convert to HTML'
description: "Uploads a .docx file (max 10 MB) and converts it to HTML suitable for the policy content editor. Returns the converted HTML and any conversion warnings.\n"
operationId: PolicyController.importDocx
security:
-
bearerAuth: []
requestBody:
required: true
content:
multipart/form-data:
schema:
type: object
required:
- file
properties:
file:
type: string
format: binary
description: 'A .docx file (max 10 MB).'
responses:
'200':
description: 'DOCX converted to HTML successfully'
content:
application/json:
schema:
type: object
properties:
message: {type: string, example: OK}
data: {type: object, properties: {html: {type: string, description: 'The converted HTML content'}, warnings: {type: array, items: {type: string}, description: 'Conversion warnings (e.g., unsupported formatting)'}}}
'400':
description: 'Bad request — no file uploaded or invalid file type'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'500':
$ref: '#/components/responses/InternalServerError'
/policies/bulk:
patch:
summary: Unknown
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- Policies
operationId: PolicyController.bulkUpdatePolicies
security:
-
bearerAuth: []
description: 'Requires role: Admin or Editor'
/policies:
get:
tags:
- Policies
summary: 'Get all policies'
description: 'Returns all policies for the authenticated user''s organization, including assigned reviewer IDs.'
operationId: PolicyController.getAllPolicies
security:
-
bearerAuth: []
responses:
'200':
description: 'List of policies retrieved successfully'
content:
application/json:
schema:
type: object
properties:
message: {type: string, example: OK}
data: {type: array, items: {$ref: '#/components/schemas/PolicyWithReviewers'}}
'500':
$ref: '#/components/responses/InternalServerError'
post:
tags:
- Policies
summary: 'Create a new policy'
description: 'Creates a new policy. The author_id and last_updated_by are set from the JWT token automatically.'
operationId: PolicyController.createPolicy
security:
-
bearerAuth: []
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/PolicyCreateRequest'
responses:
'201':
description: 'Policy created successfully'
content:
application/json:
schema:
type: object
properties:
message: {type: string, example: Created}
data: {$ref: '#/components/schemas/PolicyWithReviewers'}
'500':
$ref: '#/components/responses/InternalServerError'
'503':
description: 'Service unavailable — policy creation failed'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/policies/tags:
get:
tags:
- Policies
summary: 'Get available policy tags'
description: 'Returns the static list of allowed policy tags.'
operationId: PolicyController.getPolicyTags
security:
-
bearerAuth: []
responses:
'200':
description: 'List of available tags'
content:
application/json:
schema:
type: object
properties:
message: {type: string, example: OK}
data: {type: array, items: {type: string, enum: ['AI ethics', Fairness, Transparency, Explainability, 'Bias mitigation', Privacy, 'Data governance', 'Model risk', Accountability, Security, LLM, 'Human oversight', 'EU AI Act', 'ISO 42001', 'NIST RMF', 'Red teaming', Audit, Monitoring, 'Vendor management']}}
'500':
$ref: '#/components/responses/InternalServerError'
'/policies/{id}/export/pdf':
get:
tags:
- Policies
summary: 'Export policy as PDF'
description: 'Generates and downloads the policy as a PDF file.'
operationId: PolicyController.exportPolicyPDF
security:
-
bearerAuth: []
parameters:
-
$ref: '#/components/parameters/PolicyId'
responses:
'200':
description: 'PDF file stream'
content:
application/pdf:
schema:
type: string
format: binary
headers:
Content-Disposition:
schema:
type: string
example: 'attachment; filename="AI_Ethics_Policy.pdf"'
Content-Length:
schema:
type: integer
'400':
description: 'Invalid policy ID'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
$ref: '#/components/responses/NotFound'
'500':
$ref: '#/components/responses/InternalServerError'
'/policies/{id}/export/docx':
get:
tags:
- Policies
summary: 'Export policy as DOCX'
description: 'Generates and downloads the policy as a DOCX file.'
operationId: PolicyController.exportPolicyDOCX
security:
-
bearerAuth: []
parameters:
-
$ref: '#/components/parameters/PolicyId'
responses:
'200':
description: 'DOCX file stream'
content:
application/vnd.openxmlformats-officedocument.wordprocessingml.document:
schema:
type: string
format: binary
headers:
Content-Disposition:
schema:
type: string
example: 'attachment; filename="AI_Ethics_Policy.docx"'
Content-Length:
schema:
type: integer
'400':
description: 'Invalid policy ID'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
$ref: '#/components/responses/NotFound'
'500':
$ref: '#/components/responses/InternalServerError'
'/policies/{id}':
get:
tags:
- Policies
summary: 'Get policy by ID'
description: 'Returns a single policy by its ID, including assigned reviewer IDs.'
operationId: PolicyController.getPolicyById
security:
-
bearerAuth: []
parameters:
-
$ref: '#/components/parameters/PolicyId'
responses:
'200':
description: 'Policy retrieved successfully'
content:
application/json:
schema:
type: object
properties:
message: {type: string, example: OK}
data: {$ref: '#/components/schemas/PolicyWithReviewers'}
'404':
$ref: '#/components/responses/NotFound'
'500':
$ref: '#/components/responses/InternalServerError'
put:
tags:
- Policies
summary: 'Update a policy'
description: "Updates an existing policy. Only provided fields are updated. The last_updated_by and last_updated_at are set automatically from the JWT token. If assigned_reviewer_ids is provided, the reviewer list is fully replaced.\n"
operationId: PolicyController.updatePolicy
security:
-
bearerAuth: []
parameters:
-
$ref: '#/components/parameters/PolicyId'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/PolicyUpdateRequest'
responses:
'202':
description: 'Policy updated successfully'
content:
application/json:
schema:
type: object
properties:
message: {type: string, example: Accepted}
data: {$ref: '#/components/schemas/PolicyWithReviewers'}
'404':
$ref: '#/components/responses/NotFound'
'500':
$ref: '#/components/responses/InternalServerError'
delete:
tags:
- Policies
summary: 'Delete a policy by ID'
description: 'Permanently deletes a policy and its associated reviewer mappings (via CASCADE).'
operationId: PolicyController.deletePolicyById
security:
-
bearerAuth: []
parameters:
-
$ref: '#/components/parameters/PolicyId'
responses:
'202':
description: 'Policy deleted successfully'
content:
application/json:
schema:
type: object
properties:
message: {type: string, example: Accepted}
data: {type: boolean, example: true}
'404':
$ref: '#/components/responses/NotFound'
'500':
$ref: '#/components/responses/InternalServerError'
'/policies/{id}/review/request':
post:
tags:
- Policies
summary: 'Request review for a policy'
description: "Sets the policy review status to pending_review and sends in-app notifications to each specified reviewer.\n"
operationId: PolicyController.requestReview
security:
-
bearerAuth: []
parameters:
-
$ref: '#/components/parameters/PolicyId'
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- reviewer_ids
properties:
reviewer_ids:
type: array
items: {type: integer}
description: 'List of user IDs to request review from'
example: [2, 5, 8]
message:
type: string
description: 'Optional message to include in the review request notification'
example: 'Please review the updated data governance section.'
responses:
'200':
description: 'Review requested successfully; returns the updated policy'
content:
application/json:
schema:
type: object
properties:
message: {type: string, example: OK}
data: {$ref: '#/components/schemas/PolicyWithReviewers'}
'400':
description: 'Invalid policy ID or missing reviewer_ids'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
$ref: '#/components/responses/NotFound'
'500':
$ref: '#/components/responses/InternalServerError'
'/policies/{id}/review/approve':
put:
tags:
- Policies
summary: 'Approve a policy review'
description: "Sets the policy review status to approved and sends an in-app notification to the policy author.\n"
operationId: PolicyController.approveReview
security:
-
bearerAuth: []
parameters:
-
$ref: '#/components/parameters/PolicyId'
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
comment:
type: string
description: 'Optional approval comment'
example: 'Looks good, approved.'
responses:
'200':
description: 'Policy review approved; returns the updated policy'
content:
application/json:
schema:
type: object
properties:
message: {type: string, example: OK}
data: {$ref: '#/components/schemas/PolicyWithReviewers'}
'400':
description: 'Invalid policy ID'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
$ref: '#/components/responses/NotFound'
'500':
$ref: '#/components/responses/InternalServerError'
'/policies/{id}/review/reject':
put:
tags:
- Policies
summary: 'Reject a policy review (request changes)'
description: "Sets the policy review status to changes_requested and sends an in-app notification to the policy author. A comment is required.\n"
operationId: PolicyController.rejectReview
security:
-
bearerAuth: []
parameters:
-
$ref: '#/components/parameters/PolicyId'
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- comment
properties:
comment:
type: string
description: 'Reason for requesting changes (required)'
example: 'Section 3 needs more detail on bias mitigation procedures.'
responses:
'200':
description: 'Policy review rejected; returns the updated policy'
content:
application/json:
schema:
type: object
properties:
message: {type: string, example: OK}
data: {$ref: '#/components/schemas/PolicyWithReviewers'}
'400':
description: 'Invalid policy ID or missing comment'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
'404':
$ref: '#/components/responses/NotFound'
'500':
$ref: '#/components/responses/InternalServerError'
'/policies/folders/{folderId}/policies':
get:
tags:
- Policies
summary: 'Get Policies In Folder'
operationId: getPoliciesInFolder
security:
-
bearerAuth: []
parameters:
-
name: folderId
in: path
required: true
schema:
type: integer
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/policies/{id}/folders':
get:
tags:
- Policies
summary: 'Get Policy Folders'
operationId: getPolicyFolders
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
patch:
tags:
- Policies
summary: 'Update Policy Folders'
operationId: updatePolicyFolders
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
requestBody:
content:
application/json:
schema:
type: object
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
/slackWebhooks:
get:
tags:
- Integrations
summary: 'Get All Slack Webhooks'
operationId: getAllSlackWebhooks
security:
-
bearerAuth: []
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
post:
tags:
- Integrations
summary: 'Create New Slack Webhook'
operationId: createNewSlackWebhook
security:
-
bearerAuth: []
requestBody:
content:
application/json:
schema:
type: object
responses:
'201':
description: 'Created successfully'
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/slackWebhooks/{id}':
get:
tags:
- Integrations
summary: 'Get Slack Webhook By Id'
operationId: getSlackWebhookById
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
patch:
tags:
- Integrations
summary: 'Update Slack Webhook By Id'
operationId: updateSlackWebhookById
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
requestBody:
content:
application/json:
schema:
type: object
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
delete:
tags:
- Integrations
summary: 'Delete Slack Webhook By Id'
operationId: deleteSlackWebhookById
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: 'Deleted successfully'
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/slackWebhooks/{id}/send':
post:
tags:
- Integrations
summary: 'Send Slack Message'
operationId: sendSlackMessage
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
requestBody:
content:
application/json:
schema:
type: object
responses:
'201':
description: 'Created successfully'
'401':
description: Unauthorized
'500':
description: 'Internal server error'
/plugins/marketplace:
get:
tags:
- Plugins
summary: 'Get All Plugins'
operationId: getAllPlugins
security:
-
bearerAuth: []
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/plugins/marketplace/{key}':
get:
tags:
- Plugins
summary: 'Get Plugin By Key'
operationId: getPluginByKey
security:
-
bearerAuth: []
parameters:
-
name: key
in: path
required: true
schema:
type: string
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
/plugins/marketplace/search:
get:
tags:
- Plugins
summary: 'Search Plugins'
operationId: searchPlugins
security:
-
bearerAuth: []
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
/plugins/categories:
get:
tags:
- Plugins
summary: 'Get Categories'
operationId: getCategories
security:
-
bearerAuth: []
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
/plugins/install:
post:
tags:
- Plugins
summary: 'Install Plugin'
operationId: installPlugin
security:
-
bearerAuth: []
requestBody:
content:
application/json:
schema:
type: object
responses:
'201':
description: 'Created successfully'
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/plugins/installations/{id}':
delete:
tags:
- Plugins
summary: 'Uninstall Plugin'
operationId: uninstallPlugin
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: 'Deleted successfully'
'401':
description: Unauthorized
'500':
description: 'Internal server error'
/plugins/installations:
get:
tags:
- Plugins
summary: 'Get Installed Plugins'
operationId: getInstalledPlugins
security:
-
bearerAuth: []
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/plugins/installations/{id}/configuration':
put:
tags:
- Plugins
summary: 'Update Plugin Configuration'
operationId: updatePluginConfiguration
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
requestBody:
content:
application/json:
schema:
type: object
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/plugins/{key}/test-connection':
post:
tags:
- Plugins
summary: 'Test Plugin Connection'
operationId: testPluginConnection
security:
-
bearerAuth: []
parameters:
-
name: key
in: path
required: true
schema:
type: string
requestBody:
content:
application/json:
schema:
type: object
responses:
'201':
description: 'Created successfully'
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/plugins/{key}/ui/dist/{filename}':
get:
tags:
- Plugins
summary: 'Serve plugin UI assets'
operationId: plugins_anonymous
security:
-
bearerAuth: []
parameters:
-
name: key
in: path
required: true
schema:
type: string
-
name: filename
in: path
required: true
schema:
type: string
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
/tokens:
get:
tags:
- Authentication
summary: 'Get Api Tokens'
operationId: getApiTokens
security:
-
bearerAuth: []
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
post:
tags:
- Authentication
summary: 'Create Api Token'
operationId: createApiToken
security:
-
bearerAuth: []
requestBody:
content:
application/json:
schema:
type: object
responses:
'201':
description: 'Created successfully'
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/tokens/{id}/revoke':
post:
summary: 'Revoke Api Token'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- Authentication
operationId: revokeApiToken
security:
-
bearerAuth: []
'/tokens/{id}':
delete:
tags:
- Authentication
summary: 'Delete Api Token'
operationId: deleteApiToken
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: 'Deleted successfully'
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/shares/token/{token}':
get:
tags:
- 'Share Links'
summary: 'Get Share Link By Token'
operationId: getShareLinkByToken
parameters:
-
name: token
in: path
required: true
schema:
type: string
responses:
'200':
description: Success
'500':
description: 'Internal server error'
'/shares/view/{token}':
get:
tags:
- 'Share Links'
summary: 'Get Shared Data By Token'
operationId: getSharedDataByToken
parameters:
-
name: token
in: path
required: true
schema:
type: string
responses:
'200':
description: Success
'500':
description: 'Internal server error'
/shares:
post:
tags:
- 'Share Links'
summary: 'Create Share Link'
operationId: createShareLink
security:
-
bearerAuth: []
requestBody:
content:
application/json:
schema:
type: object
responses:
'201':
description: 'Created successfully'
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/shares/{resourceType}/{resourceId}':
get:
tags:
- 'Share Links'
summary: 'Get Share Links For Resource'
operationId: getShareLinksForResource
security:
-
bearerAuth: []
parameters:
-
name: resourceType
in: path
required: true
schema:
type: string
-
name: resourceId
in: path
required: true
schema:
type: integer
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/shares/{id}':
patch:
tags:
- 'Share Links'
summary: 'Update Share Link'
operationId: updateShareLink
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
requestBody:
content:
application/json:
schema:
type: object
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
delete:
tags:
- 'Share Links'
summary: 'Delete Share Link'
operationId: deleteShareLink
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: 'Deleted successfully'
'401':
description: Unauthorized
'500':
description: 'Internal server error'
/file-manager:
post:
tags:
- Files
summary: 'Upload File'
operationId: uploadFile
security:
-
bearerAuth: []
description: 'Requires role: Admin or Reviewer or Editor'
requestBody:
content:
application/json:
schema:
type: object
responses:
'201':
description: 'Created successfully'
'401':
description: Unauthorized
'403':
description: 'Forbidden - insufficient role'
'500':
description: 'Internal server error'
get:
tags:
- Files
summary: 'List Files'
operationId: listFiles
security:
-
bearerAuth: []
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
/file-manager/search:
get:
tags:
- Files
summary: 'Search Files'
operationId: searchFiles
security:
-
bearerAuth: []
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
/file-manager/with-metadata:
get:
tags:
- Files
summary: 'List Files With Metadata'
operationId: listFilesWithMetadata
security:
-
bearerAuth: []
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/file-manager/{id}':
get:
tags:
- Files
summary: 'Download File'
operationId: downloadFile
security:
-
bearerAuth: []
description: 'Requires role: Admin'
parameters:
-
name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: Success
'401':
description: Unauthorized
'403':
description: 'Forbidden - insufficient role'
'500':
description: 'Internal server error'
delete:
tags:
- Files
summary: 'Remove File'
operationId: removeFile
security:
-
bearerAuth: []
description: 'Requires role: Admin or Reviewer or Editor'
parameters:
-
name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: 'Deleted successfully'
'401':
description: Unauthorized
'403':
description: 'Forbidden - insufficient role'
'500':
description: 'Internal server error'
'/file-manager/{id}/metadata':
get:
tags:
- Files
summary: 'Get File Metadata'
operationId: getFileMetadata
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
patch:
tags:
- Files
summary: 'Update Metadata'
operationId: updateMetadata
security:
-
bearerAuth: []
description: 'Requires role: Admin or Reviewer or Editor'
parameters:
-
name: id
in: path
required: true
schema:
type: integer
requestBody:
content:
application/json:
schema:
type: object
responses:
'200':
description: Success
'401':
description: Unauthorized
'403':
description: 'Forbidden - insufficient role'
'500':
description: 'Internal server error'
'/file-manager/{id}/versions':
get:
tags:
- Files
summary: 'Get File Version History'
operationId: getFileVersionHistory
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/file-manager/{id}/preview':
get:
tags:
- Files
summary: 'Preview File'
operationId: previewFile
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
/automations:
get:
tags:
- Automations
summary: 'Get All Automations'
operationId: getAllAutomations
security:
-
bearerAuth: []
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
post:
tags:
- Automations
summary: 'Create Automation'
operationId: createAutomation
security:
-
bearerAuth: []
requestBody:
content:
application/json:
schema:
type: object
responses:
'201':
description: 'Created successfully'
'401':
description: Unauthorized
'500':
description: 'Internal server error'
/automations/triggers:
get:
tags:
- Automations
summary: 'Get All Automation Triggers'
operationId: getAllAutomationTriggers
security:
-
bearerAuth: []
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/automations/actions/by-triggerId/{triggerId}':
get:
tags:
- Automations
summary: 'Get All Automation Actions By Trigger Id'
operationId: getAllAutomationActionsByTriggerId
security:
-
bearerAuth: []
parameters:
-
name: triggerId
in: path
required: true
schema:
type: integer
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/automations/{id}/history':
get:
tags:
- Automations
summary: 'Get Automation History'
operationId: getAutomationHistory
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/automations/{id}/stats':
get:
tags:
- Automations
summary: 'Get Automation Stats'
operationId: getAutomationStats
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/automations/{id}':
get:
tags:
- Automations
summary: 'Get Automation By Id'
operationId: getAutomationById
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
put:
tags:
- Automations
summary: 'Update Automation'
operationId: updateAutomation
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
requestBody:
content:
application/json:
schema:
type: object
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
delete:
tags:
- Automations
summary: 'Delete Automation By Id'
operationId: deleteAutomationById
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: 'Deleted successfully'
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/user-preferences/{userId}':
get:
tags:
- Users
summary: 'Get Preferences By User'
operationId: getPreferencesByUser
security:
-
bearerAuth: []
parameters:
-
name: userId
in: path
required: true
schema:
type: integer
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
patch:
tags:
- Users
summary: 'Update User Preferences'
operationId: updateUserPreferences
security:
-
bearerAuth: []
parameters:
-
name: userId
in: path
required: true
schema:
type: integer
requestBody:
content:
application/json:
schema:
type: object
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
/user-preferences:
post:
tags:
- Users
summary: 'Create User Preferences'
operationId: createUserPreferences
security:
-
bearerAuth: []
requestBody:
content:
application/json:
schema:
type: object
responses:
'201':
description: 'Created successfully'
'401':
description: Unauthorized
'500':
description: 'Internal server error'
/llm-keys:
get:
tags:
- 'LLM Keys'
summary: 'Get L L M Keys'
operationId: getLLMKeys
security:
-
bearerAuth: []
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
post:
tags:
- 'LLM Keys'
summary: 'Create L L M Key'
operationId: createLLMKey
security:
-
bearerAuth: []
requestBody:
content:
application/json:
schema:
type: object
responses:
'201':
description: 'Created successfully'
'401':
description: Unauthorized
'500':
description: 'Internal server error'
/llm-keys/status:
get:
tags:
- 'LLM Keys'
summary: 'Get L L M Key Status'
operationId: getLLMKeyStatus
security:
-
bearerAuth: []
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/llm-keys/{name}':
get:
tags:
- 'LLM Keys'
summary: 'Get L L M Key'
operationId: getLLMKey
security:
-
bearerAuth: []
parameters:
-
name: name
in: path
required: true
schema:
type: string
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/llm-keys/{id}':
patch:
tags:
- 'LLM Keys'
summary: 'Update L L M Key'
operationId: updateLLMKey
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
requestBody:
content:
application/json:
schema:
type: object
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
delete:
tags:
- 'LLM Keys'
summary: 'Delete L L M Key'
operationId: deleteLLMKey
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: 'Deleted successfully'
'401':
description: Unauthorized
'500':
description: 'Internal server error'
/nist-ai-rmf/functions:
get:
tags:
- 'NIST AI RMF'
summary: 'Get All N I S T A I R M Ffunctions'
operationId: getAllNISTAIRMFfunctions
security:
-
bearerAuth: []
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/nist-ai-rmf/functions/{id}':
get:
tags:
- 'NIST AI RMF'
summary: 'Get N I S T A I R M Ffunction By Id'
operationId: getNISTAIRMFfunctionById
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/nist-ai-rmf/categories/{title}':
get:
tags:
- 'NIST AI RMF'
summary: 'Get All N I S T A I R M F Categories Byfunction Id'
operationId: getAllNISTAIRMFCategoriesByfunctionId
security:
-
bearerAuth: []
parameters:
-
name: title
in: path
required: true
schema:
type: string
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/nist-ai-rmf/subcategories/byId/{id}':
get:
tags:
- 'NIST AI RMF'
summary: 'Get N I S T A I R M F Subcategory By Id'
operationId: getNISTAIRMFSubcategoryById
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/nist-ai-rmf/subcategories/{id}/risks':
get:
tags:
- 'NIST AI RMF'
summary: 'Get N I S T A I R M F Subcategory Risks'
operationId: getNISTAIRMFSubcategoryRisks
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/nist-ai-rmf/subcategories/{categoryId}/{title}':
get:
tags:
- 'NIST AI RMF'
summary: 'Get All N I S T A I R M F Subcategories Bycategory Id Andtitle'
operationId: getAllNISTAIRMFSubcategoriesBycategoryIdAndtitle
security:
-
bearerAuth: []
parameters:
-
name: categoryId
in: path
required: true
schema:
type: integer
-
name: title
in: path
required: true
schema:
type: string
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/nist-ai-rmf/subcategories/{id}':
patch:
tags:
- 'NIST AI RMF'
summary: 'Update N I S T A I R M F Subcategory By Id'
operationId: updateNISTAIRMFSubcategoryById
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
requestBody:
content:
application/json:
schema:
type: object
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/nist-ai-rmf/subcategories/{id}/status':
patch:
tags:
- 'NIST AI RMF'
summary: 'Update N I S T A I R M F Subcategory Status'
operationId: updateNISTAIRMFSubcategoryStatus
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
requestBody:
content:
application/json:
schema:
type: object
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
/nist-ai-rmf/progress:
get:
tags:
- 'NIST AI RMF'
summary: 'Get N I S T A I R M F Progress'
operationId: getNISTAIRMFProgress
security:
-
bearerAuth: []
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
/nist-ai-rmf/progress-by-function:
get:
tags:
- 'NIST AI RMF'
summary: 'Get N I S T A I R M F Progress By Function'
operationId: getNISTAIRMFProgressByFunction
security:
-
bearerAuth: []
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
/nist-ai-rmf/assignments:
get:
tags:
- 'NIST AI RMF'
summary: 'Get N I S T A I R M F Assignments'
operationId: getNISTAIRMFAssignments
security:
-
bearerAuth: []
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
/nist-ai-rmf/assignments-by-function:
get:
tags:
- 'NIST AI RMF'
summary: 'Get N I S T A I R M F Assignments By Function'
operationId: getNISTAIRMFAssignmentsByFunction
security:
-
bearerAuth: []
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
/nist-ai-rmf/status-breakdown:
get:
tags:
- 'NIST AI RMF'
summary: 'Get N I S T A I R M F Status Breakdown'
operationId: getNISTAIRMFStatusBreakdown
security:
-
bearerAuth: []
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
/nist-ai-rmf/overview:
get:
tags:
- 'NIST AI RMF'
summary: 'Get N I S T A I R M F Overview'
operationId: getNISTAIRMFOverview
security:
-
bearerAuth: []
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
/evidenceHub:
get:
tags:
- Evidence
summary: 'Get All Evidences'
operationId: getAllEvidences
security:
-
bearerAuth: []
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
post:
tags:
- Evidence
summary: 'Create New Evidence'
operationId: createNewEvidence
security:
-
bearerAuth: []
requestBody:
content:
application/json:
schema:
type: object
responses:
'201':
description: 'Created successfully'
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/evidenceHub/{id}':
get:
tags:
- Evidence
summary: 'Get Evidence By Id'
operationId: getEvidenceById
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
patch:
tags:
- Evidence
summary: 'Update Evidence By Id'
operationId: updateEvidenceById
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
requestBody:
content:
application/json:
schema:
type: object
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
delete:
tags:
- Evidence
summary: 'Delete Evidence By Id'
operationId: deleteEvidenceById
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: 'Deleted successfully'
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/evidence-ai/analyze/{fileId}':
post:
summary: 'Analyze File'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- 'Evidence AI'
operationId: analyzeFile
security:
-
bearerAuth: []
'/evidence-ai/analysis/{fileId}':
get:
summary: 'Get Analysis'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- 'Evidence AI'
operationId: getAnalysis
security:
-
bearerAuth: []
/evidence-ai/quality-scores:
get:
summary: 'Get Quality Scores'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- 'Evidence AI'
operationId: getQualityScores
security:
-
bearerAuth: []
/evidence-ai/gaps:
get:
summary: 'Get Gaps'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- 'Evidence AI'
operationId: getGaps
security:
-
bearerAuth: []
'/evidence-ai/suggestions/{fileId}':
get:
summary: 'Get Suggestions'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- 'Evidence AI'
operationId: getSuggestions
security:
-
bearerAuth: []
'/evidence-ai/suggestions/{fileId}/apply':
post:
summary: 'Apply Suggestions'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- 'Evidence AI'
operationId: applySuggestions
security:
-
bearerAuth: []
/readiness/calculate:
post:
summary: 'Calculate All'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- Readiness
operationId: calculateAll
security:
-
bearerAuth: []
'/readiness/calculate/{frameworkType}':
post:
summary: 'Calculate For Framework'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- Readiness
operationId: calculateForFramework
security:
-
bearerAuth: []
/readiness/scores:
get:
summary: 'Get Scores'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- Readiness
operationId: getScores
security:
-
bearerAuth: []
'/readiness/scores/{frameworkType}':
get:
summary: 'Get Scores By Framework'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- Readiness
operationId: getScoresByFramework
security:
-
bearerAuth: []
'/readiness/controls/{frameworkType}':
get:
summary: 'Get Control Scores'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- Readiness
operationId: getControlScores
security:
-
bearerAuth: []
/readiness/weakest:
get:
summary: 'Get Weakest'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- Readiness
operationId: getWeakest
security:
-
bearerAuth: []
/readiness/recommendations:
get:
summary: 'Get Recommendations'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- Readiness
operationId: getRecommendations
security:
-
bearerAuth: []
/readiness/history:
get:
summary: 'Get History'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- Readiness
operationId: getHistory
security:
-
bearerAuth: []
/ai-content/stats:
get:
summary: 'Get Stats'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- 'AI Content'
operationId: getStats
security:
-
bearerAuth: []
/ai-content/unreviewed:
get:
summary: 'Get Unreviewed'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- 'AI Content'
operationId: getUnreviewed
security:
-
bearerAuth: []
'/ai-content/{entityType}/{entityId}':
get:
summary: 'Get Badges'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- 'AI Content'
operationId: getBadges
security:
-
bearerAuth: []
'/ai-content/{id}/review':
patch:
summary: 'Review Content'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- 'AI Content'
operationId: reviewContent
security:
-
bearerAuth: []
description: 'Requires role: Admin or Editor'
'/ai-confirmation/approve/{id}':
post:
summary: 'Approve Confirmation'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- 'AI Confirmation'
operationId: approveConfirmation
security:
-
bearerAuth: []
'/ai-confirmation/reject/{id}':
post:
summary: 'Reject Confirmation'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- 'AI Confirmation'
operationId: rejectConfirmation
security:
-
bearerAuth: []
/ai-confirmation/pending:
get:
summary: 'Get Pending Confirmations'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- 'AI Confirmation'
operationId: getPendingConfirmations
security:
-
bearerAuth: []
/ai-approvals/stats:
get:
summary: 'Get Approval Stats Ctrl'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- 'AI Approvals'
operationId: getApprovalStatsCtrl
security:
-
bearerAuth: []
/ai-approvals:
get:
summary: 'List Approvals Ctrl'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- 'AI Approvals'
operationId: listApprovalsCtrl
security:
-
bearerAuth: []
'/ai-approvals/{id}':
get:
summary: 'Get Approval Detail Ctrl'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- 'AI Approvals'
operationId: getApprovalDetailCtrl
security:
-
bearerAuth: []
'/ai-approvals/{id}/approve':
post:
summary: 'Approve Approval Ctrl'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- 'AI Approvals'
operationId: approveApprovalCtrl
security:
-
bearerAuth: []
description: 'Requires role: Admin'
'/ai-approvals/{id}/reject':
post:
summary: 'Reject Approval Ctrl'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- 'AI Approvals'
operationId: rejectApprovalCtrl
security:
-
bearerAuth: []
description: 'Requires role: Admin'
/ai-approval-rules/test:
post:
summary: 'Test Rule Ctrl'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- 'AI Approval Rules'
operationId: testRuleCtrl
security:
-
bearerAuth: []
/ai-approval-rules:
get:
summary: 'List Rules Ctrl'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- 'AI Approval Rules'
operationId: listRulesCtrl
security:
-
bearerAuth: []
post:
summary: 'Create Rule Ctrl'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- 'AI Approval Rules'
operationId: createRuleCtrl
security:
-
bearerAuth: []
'/ai-approval-rules/{id}':
put:
summary: 'Update Rule Ctrl'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- 'AI Approval Rules'
operationId: updateRuleCtrl
security:
-
bearerAuth: []
delete:
summary: 'Delete Rule Ctrl'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- 'AI Approval Rules'
operationId: deleteRuleCtrl
security:
-
bearerAuth: []
/ai-apps:
get:
summary: 'Get All Ai Apps'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- 'AI Apps'
operationId: getAllAiApps
security:
-
bearerAuth: []
post:
summary: 'Create Ai App'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- 'AI Apps'
operationId: createAiApp
security:
-
bearerAuth: []
description: 'Requires role: Admin or Editor'
/ai-apps/policy-suggestions:
get:
summary: 'Get Policy Suggestions'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- 'AI Apps'
operationId: getPolicySuggestions
security:
-
bearerAuth: []
'/ai-apps/{id}':
get:
summary: 'Get Ai App By Id'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- 'AI Apps'
operationId: getAiAppById
security:
-
bearerAuth: []
patch:
summary: 'Update Ai App By Id'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- 'AI Apps'
operationId: updateAiAppById
security:
-
bearerAuth: []
description: 'Requires role: Admin or Editor'
delete:
summary: 'Delete Ai App By Id'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- 'AI Apps'
operationId: deleteAiAppById
security:
-
bearerAuth: []
description: 'Requires role: Admin'
'/ai-apps/{id}/models':
post:
summary: 'Link Models To Ai App'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- 'AI Apps'
operationId: linkModelsToAiApp
security:
-
bearerAuth: []
description: 'Requires role: Admin or Editor'
'/ai-apps/{id}/policies':
post:
summary: 'Set Policies For Ai App'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- 'AI Apps'
operationId: setPoliciesForAiApp
security:
-
bearerAuth: []
description: 'Requires role: Admin or Editor'
'/ai-apps/{id}/data-exposure':
post:
summary: 'Set Data Exposure For Ai App'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- 'AI Apps'
operationId: setDataExposureForAiApp
security:
-
bearerAuth: []
description: 'Requires role: Admin or Editor'
'/ai-apps/from-shadow-ai/{shadowAiToolId}':
post:
summary: 'Promote From Shadow Ai'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- 'AI Apps'
operationId: promoteFromShadowAi
security:
-
bearerAuth: []
description: 'Requires role: Admin or Editor'
'/ai-apps/{id}/status':
patch:
summary: 'Update Ai App Status'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- 'AI Apps'
operationId: updateAiAppStatus
security:
-
bearerAuth: []
description: 'Requires role: Admin or Editor'
/ai-audit/analytics:
get:
summary: 'Get Analytics'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- 'AI Audit'
operationId: getAnalytics
security:
-
bearerAuth: []
/ai-audit/export:
get:
summary: 'Export Audit Log'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- 'AI Audit'
operationId: exportAuditLog
security:
-
bearerAuth: []
description: 'Requires role: Admin'
'/ai-audit/log/{actionId}':
get:
summary: 'Get Action Audit Trail'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- 'AI Audit'
operationId: getActionAuditTrail
security:
-
bearerAuth: []
/ai-audit/log:
get:
summary: 'Get Audit Log'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- 'AI Audit'
operationId: getAuditLog
security:
-
bearerAuth: []
/advisor:
post:
tags:
- 'AI Advisor'
summary: 'Run Advisor'
operationId: runAdvisor
security:
-
bearerAuth: []
requestBody:
content:
application/json:
schema:
type: object
responses:
'201':
description: 'Created successfully'
'401':
description: Unauthorized
'500':
description: 'Internal server error'
/advisor/stream:
post:
tags:
- 'AI Advisor'
summary: 'Stream Advisor'
operationId: streamAdvisor
security:
-
bearerAuth: []
requestBody:
content:
application/json:
schema:
type: object
responses:
'201':
description: 'Created successfully'
'401':
description: Unauthorized
'500':
description: 'Internal server error'
/advisor/chat:
post:
tags:
- 'AI Advisor'
summary: 'Stream Advisor V2'
operationId: streamAdvisorV2
security:
-
bearerAuth: []
requestBody:
content:
application/json:
schema:
type: object
responses:
'201':
description: 'Created successfully'
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/advisor/conversations/{domain}':
get:
tags:
- 'AI Advisor'
summary: 'List conversations for a domain'
description: 'Returns all conversations the current user has in the given advisor domain, most recent first. Lightweight summaries only — no message bodies.'
operationId: listConversations
security:
-
bearerAuth: []
parameters:
-
name: domain
in: path
required: true
schema:
type: string
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
post:
tags:
- 'AI Advisor'
summary: 'Create a new empty conversation'
description: 'Creates a fresh empty conversation in the given domain. Title is derived automatically when the first user message is saved.'
operationId: createConversation
security:
-
bearerAuth: []
parameters:
-
name: domain
in: path
required: true
schema:
type: string
responses:
'201':
description: 'Conversation created'
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/advisor/conversations/{domain}/{id}':
get:
tags:
- 'AI Advisor'
summary: 'Get a single conversation'
description: 'Returns the full conversation including its messages array.'
operationId: getConversationById
security:
-
bearerAuth: []
parameters:
-
name: domain
in: path
required: true
schema:
type: string
-
name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: Success
'401':
description: Unauthorized
'404':
description: 'Conversation not found'
'500':
description: 'Internal server error'
put:
tags:
- 'AI Advisor'
summary: 'Update conversation messages'
description: 'Replaces the messages array of an existing conversation. Bumps last_message_at and auto-derives the title on first save.'
operationId: updateConversation
security:
-
bearerAuth: []
parameters:
-
name: domain
in: path
required: true
schema:
type: string
-
name: id
in: path
required: true
schema:
type: integer
requestBody:
content:
application/json:
schema:
type: object
properties:
messages:
type: array
items: {type: object}
responses:
'200':
description: 'Updated successfully'
'401':
description: Unauthorized
'404':
description: 'Conversation not found'
'500':
description: 'Internal server error'
delete:
tags:
- 'AI Advisor'
summary: 'Delete a conversation'
operationId: deleteConversation
security:
-
bearerAuth: []
parameters:
-
name: domain
in: path
required: true
schema:
type: string
-
name: id
in: path
required: true
schema:
type: integer
responses:
'204':
description: Deleted
'401':
description: Unauthorized
'404':
description: 'Conversation not found'
'500':
description: 'Internal server error'
/advisor/memory:
get:
summary: 'Get Memory Summary'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- 'AI Advisor'
operationId: getMemorySummary
security:
-
bearerAuth: []
delete:
summary: 'Delete My Memory'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- 'AI Advisor'
operationId: deleteMyMemory
security:
-
bearerAuth: []
'/advisor/memory/admin/agent/{agentName}':
get:
summary: 'Admin List Agent Messages'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- 'AI Advisor'
operationId: adminListAgentMessages
security:
-
bearerAuth: []
delete:
summary: 'Admin Clear Agent Memory'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- 'AI Advisor'
operationId: adminClearAgentMemory
security:
-
bearerAuth: []
/policy-linked:
get:
tags:
- Policies
summary: 'Get All Linked Objects'
operationId: getAllLinkedObjects
security:
-
bearerAuth: []
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/policy-linked/{policyId}/linked-objects':
get:
tags:
- Policies
summary: 'Get Linked Objects For Policy'
operationId: getLinkedObjects
security:
-
bearerAuth: []
parameters:
-
name: policyId
in: path
required: true
schema:
type: integer
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
post:
tags:
- Policies
summary: 'Create Linked Object For Policy'
operationId: createLinkedObject
security:
-
bearerAuth: []
parameters:
-
name: policyId
in: path
required: true
schema:
type: integer
requestBody:
content:
application/json:
schema:
type: object
responses:
'201':
description: 'Created successfully'
'401':
description: Unauthorized
'500':
description: 'Internal server error'
delete:
tags:
- Policies
summary: 'Delete Linked Object For Policy'
operationId: deleteLinkedObject
security:
-
bearerAuth: []
parameters:
-
name: policyId
in: path
required: true
schema:
type: integer
requestBody:
content:
application/json:
schema:
type: object
responses:
'200':
description: 'Deleted successfully'
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/policy-linked/risk/{riskId}/unlink-all':
delete:
tags:
- Policies
summary: 'Unlink Risk From All Policies'
operationId: deleteRiskFromAllPolicies
security:
-
bearerAuth: []
parameters:
-
name: riskId
in: path
required: true
schema:
type: integer
responses:
'200':
description: 'Deleted successfully'
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/policy-linked/evidence/{evidenceId}/unlink-all':
delete:
tags:
- Policies
summary: 'Unlink Evidence From All Policies'
operationId: deleteEvidenceFromAllPolicies
security:
-
bearerAuth: []
parameters:
-
name: evidenceId
in: path
required: true
schema:
type: integer
responses:
'200':
description: 'Deleted successfully'
'401':
description: Unauthorized
'500':
description: 'Internal server error'
/ai-incident-managements:
get:
tags:
- Incidents
summary: 'Get All Incidents'
operationId: getAllIncidents
security:
-
bearerAuth: []
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
post:
tags:
- Incidents
summary: 'Create New Incident'
operationId: createNewIncident
security:
-
bearerAuth: []
requestBody:
content:
application/json:
schema:
type: object
responses:
'201':
description: 'Created successfully'
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/ai-incident-managements/{id}':
get:
tags:
- Incidents
summary: 'Get Incident By Id'
operationId: getIncidentById
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
patch:
tags:
- Incidents
summary: 'Update Incident By Id'
operationId: updateIncidentById
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
requestBody:
content:
application/json:
schema:
type: object
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
delete:
tags:
- Incidents
summary: 'Delete Incident By Id'
operationId: deleteIncidentById
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: 'Deleted successfully'
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/ai-incident-managements/{id}/archive':
patch:
tags:
- Incidents
summary: 'Archive Incident By Id'
operationId: archiveIncidentById
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
requestBody:
content:
application/json:
schema:
type: object
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/ce-marking/{projectId}':
get:
tags:
- 'CE Marking'
summary: 'Get C E Marking'
operationId: getCEMarking
security:
-
bearerAuth: []
parameters:
-
name: projectId
in: path
required: true
schema:
type: integer
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
put:
tags:
- 'CE Marking'
summary: 'Update C E Marking'
operationId: updateCEMarking
security:
-
bearerAuth: []
parameters:
-
name: projectId
in: path
required: true
schema:
type: integer
requestBody:
content:
application/json:
schema:
type: object
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
/search:
get:
tags:
- Search
summary: Search
operationId: search
security:
-
bearerAuth: []
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
/deepeval/playground/chat:
post:
summary: Provider
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- 'LLM Evals'
operationId: provider
security:
-
bearerAuth: []
/evaluation-llm-keys:
get:
tags:
- 'LLM Evals'
summary: 'Get All Evaluation LLM Keys'
operationId: evalKeysRetired
security:
-
bearerAuth: []
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
post:
tags:
- 'LLM Evals'
summary: 'Add Evaluation LLM Key'
operationId: evaluation_llm_keys_evalKeysRetired
security:
-
bearerAuth: []
description: 'Requires role: Admin'
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- provider
- apiKey
properties:
provider:
type: string
enum: [openai, anthropic, google, xai, mistral, huggingface]
apiKey:
type: string
responses:
'201':
description: 'Created successfully'
'401':
description: Unauthorized
'403':
description: 'Forbidden - insufficient role'
'500':
description: 'Internal server error'
/evaluation-llm-keys/verify:
post:
tags:
- 'LLM Evals'
summary: 'Verify Evaluation LLM Key'
operationId: evaluation_llm_keys_evalKeysRetired
security:
-
bearerAuth: []
description: 'Requires role: Admin'
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- provider
- apiKey
properties:
provider:
type: string
enum: [openai, anthropic, google, xai, mistral, huggingface, openrouter]
apiKey:
type: string
responses:
'200':
description: Success
'401':
description: Unauthorized
'403':
description: 'Forbidden - insufficient role'
'500':
description: 'Internal server error'
'/evaluation-llm-keys/{provider}':
delete:
tags:
- 'LLM Evals'
summary: 'Delete Evaluation LLM Key'
operationId: evaluation_llm_keys_evalKeysRetired
security:
-
bearerAuth: []
description: 'Requires role: Admin'
parameters:
-
name: provider
in: path
required: true
schema:
type: string
enum:
- openai
- anthropic
- google
- xai
- mistral
- huggingface
responses:
'200':
description: 'Deleted successfully'
'401':
description: Unauthorized
'403':
description: 'Forbidden - insufficient role'
'500':
description: 'Internal server error'
/evaluation-llm-keys/internal/decrypted:
get:
summary: 'Eval Keys Retired'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- 'LLM Evals'
operationId: evaluation_llm_keys_evalKeysRetired
/notes:
post:
tags:
- Notes
summary: 'Create Note'
operationId: createNote
security:
-
bearerAuth: []
requestBody:
content:
application/json:
schema:
type: object
responses:
'201':
description: 'Created successfully'
'401':
description: Unauthorized
'500':
description: 'Internal server error'
get:
tags:
- Notes
summary: 'Get Notes'
operationId: getNotes
security:
-
bearerAuth: []
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/notes/{id}':
put:
tags:
- Notes
summary: 'Update Note'
operationId: updateNote
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
requestBody:
content:
application/json:
schema:
type: object
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
delete:
tags:
- Notes
summary: 'Delete Note'
operationId: deleteNote
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: 'Deleted successfully'
'401':
description: Unauthorized
'500':
description: 'Internal server error'
/entity-graph/annotations:
post:
tags:
- 'Entity Graph'
summary: 'Save Annotation'
operationId: saveAnnotation
security:
-
bearerAuth: []
requestBody:
content:
application/json:
schema:
type: object
responses:
'201':
description: 'Created successfully'
'401':
description: Unauthorized
'500':
description: 'Internal server error'
get:
tags:
- 'Entity Graph'
summary: 'Get Annotations'
operationId: getAnnotations
security:
-
bearerAuth: []
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/entity-graph/annotations/{entityType}/{entityId}':
get:
tags:
- 'Entity Graph'
summary: 'Get Annotation By Entity'
operationId: getAnnotationByEntity
security:
-
bearerAuth: []
parameters:
-
name: entityType
in: path
required: true
schema:
type: string
-
name: entityId
in: path
required: true
schema:
type: integer
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/entity-graph/annotations/{id}':
delete:
tags:
- 'Entity Graph'
summary: 'Delete Annotation'
operationId: deleteAnnotation
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: 'Deleted successfully'
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/entity-graph/annotations/entity/{entityType}/{entityId}':
delete:
tags:
- 'Entity Graph'
summary: 'Delete Annotation By Entity'
operationId: deleteAnnotationByEntity
security:
-
bearerAuth: []
parameters:
-
name: entityType
in: path
required: true
schema:
type: string
-
name: entityId
in: path
required: true
schema:
type: integer
responses:
'200':
description: 'Deleted successfully'
'401':
description: Unauthorized
'500':
description: 'Internal server error'
/entity-graph/views:
post:
tags:
- 'Entity Graph'
summary: 'Create View'
operationId: createView
security:
-
bearerAuth: []
requestBody:
content:
application/json:
schema:
type: object
responses:
'201':
description: 'Created successfully'
'401':
description: Unauthorized
'500':
description: 'Internal server error'
get:
tags:
- 'Entity Graph'
summary: 'Get Views'
operationId: getViews
security:
-
bearerAuth: []
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/entity-graph/views/{id}':
get:
tags:
- 'Entity Graph'
summary: 'Get View By Id'
operationId: getViewById
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
put:
tags:
- 'Entity Graph'
summary: 'Update View'
operationId: updateView
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
requestBody:
content:
application/json:
schema:
type: object
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
delete:
tags:
- 'Entity Graph'
summary: 'Delete View'
operationId: deleteView
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: 'Deleted successfully'
'401':
description: Unauthorized
'500':
description: 'Internal server error'
/entity-graph/gap-rules/defaults:
get:
tags:
- 'Entity Graph'
summary: 'Get Default Gap Rules'
operationId: getDefaultGapRules
responses:
'200':
description: Success
'500':
description: 'Internal server error'
/entity-graph/gap-rules:
post:
tags:
- 'Entity Graph'
summary: 'Save Gap Rules'
operationId: saveGapRules
security:
-
bearerAuth: []
requestBody:
content:
application/json:
schema:
type: object
responses:
'201':
description: 'Created successfully'
'401':
description: Unauthorized
'500':
description: 'Internal server error'
get:
tags:
- 'Entity Graph'
summary: 'Get Gap Rules'
operationId: getGapRules
security:
-
bearerAuth: []
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
delete:
tags:
- 'Entity Graph'
summary: 'Reset Gap Rules'
operationId: resetGapRules
security:
-
bearerAuth: []
responses:
'200':
description: 'Deleted successfully'
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/vendor-risk-change-history/{id}':
get:
tags:
- 'Change History'
summary: 'Get Vendor Risk Change History By Id'
operationId: getVendorRiskChangeHistoryById
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/policy-change-history/{id}':
get:
tags:
- 'Change History'
summary: 'Get Policy Change History By Id'
operationId: getPolicyChangeHistoryById
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/incident-change-history/{incidentId}':
get:
tags:
- 'Change History'
summary: 'Get Incident History'
operationId: getIncidentHistory
security:
-
bearerAuth: []
parameters:
-
name: incidentId
in: path
required: true
schema:
type: integer
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/use-case-change-history/{useCaseId}':
get:
tags:
- 'Change History'
summary: 'Get Use Case History'
operationId: getUseCaseHistory
security:
-
bearerAuth: []
parameters:
-
name: useCaseId
in: path
required: true
schema:
type: integer
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/risk-change-history/{projectRiskId}':
get:
tags:
- 'Change History'
summary: 'Get Project Risk Change History By Risk Id'
operationId: getProjectRiskChangeHistoryByRiskId
security:
-
bearerAuth: []
parameters:
-
name: projectRiskId
in: path
required: true
schema:
type: integer
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/file-change-history/{id}':
get:
tags:
- 'Change History'
summary: 'Get File Change History By Id'
operationId: getFileChangeHistoryById
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/task-change-history/{id}':
get:
tags:
- 'Change History'
summary: 'Get Task Change History By Id'
operationId: getTaskChangeHistoryById
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/training-change-history/{id}':
get:
tags:
- 'Change History'
summary: 'Get Training Change History By Id'
operationId: getTrainingChangeHistoryById
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/model-risk-change-history/{id}':
get:
tags:
- 'Change History'
summary: 'Get Model Risk Change History By Id'
operationId: getModelRiskChangeHistoryById
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/dataset-change-history/{id}':
get:
tags:
- 'Change History'
summary: 'Get Dataset Change History By Id'
operationId: getDatasetChangeHistoryById
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
/approval-workflows:
get:
tags:
- 'Approval Workflows'
summary: 'Get All Approval Workflows'
operationId: getAllApprovalWorkflows
security:
-
bearerAuth: []
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
post:
tags:
- 'Approval Workflows'
summary: 'Create Approval Workflow'
operationId: createApprovalWorkflow
security:
-
bearerAuth: []
description: 'Requires role: Admin'
requestBody:
content:
application/json:
schema:
type: object
responses:
'201':
description: 'Created successfully'
'401':
description: Unauthorized
'403':
description: 'Forbidden - insufficient role'
'500':
description: 'Internal server error'
'/approval-workflows/{id}':
get:
tags:
- 'Approval Workflows'
summary: 'Get Approval Workflow By Id'
operationId: getApprovalWorkflowById
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
put:
tags:
- 'Approval Workflows'
summary: 'Update Approval Workflow'
operationId: updateApprovalWorkflow
security:
-
bearerAuth: []
description: 'Requires role: Admin'
parameters:
-
name: id
in: path
required: true
schema:
type: integer
requestBody:
content:
application/json:
schema:
type: object
responses:
'200':
description: Success
'401':
description: Unauthorized
'403':
description: 'Forbidden - insufficient role'
'500':
description: 'Internal server error'
delete:
tags:
- 'Approval Workflows'
summary: 'Delete Approval Workflow'
operationId: deleteApprovalWorkflow
security:
-
bearerAuth: []
description: 'Requires role: Admin'
parameters:
-
name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: 'Deleted successfully'
'401':
description: Unauthorized
'403':
description: 'Forbidden - insufficient role'
'500':
description: 'Internal server error'
/approval-requests:
post:
tags:
- 'Approval Workflows'
summary: 'Create Approval Request'
operationId: createApprovalRequest
security:
-
bearerAuth: []
requestBody:
content:
application/json:
schema:
type: object
responses:
'201':
description: 'Created successfully'
'401':
description: Unauthorized
'500':
description: 'Internal server error'
/approval-requests/my-requests:
get:
tags:
- 'Approval Workflows'
summary: 'Get My Approval Requests'
operationId: getMyApprovalRequests
security:
-
bearerAuth: []
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
/approval-requests/pending-approvals:
get:
tags:
- 'Approval Workflows'
summary: 'Get Pending Approvals'
operationId: getPendingApprovals
security:
-
bearerAuth: []
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
/approval-requests/all:
get:
tags:
- 'Approval Workflows'
summary: 'Get All Approval Requests'
operationId: getAllApprovalRequests
security:
-
bearerAuth: []
description: 'Requires role: Admin'
responses:
'200':
description: Success
'401':
description: Unauthorized
'403':
description: 'Forbidden - insufficient role'
'500':
description: 'Internal server error'
'/approval-requests/{id}':
get:
tags:
- 'Approval Workflows'
summary: 'Get Approval Request By Id'
operationId: getApprovalRequestById
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/approval-requests/{id}/approve':
post:
tags:
- 'Approval Workflows'
summary: 'Approve Request'
operationId: approveRequest
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
requestBody:
content:
application/json:
schema:
type: object
responses:
'201':
description: 'Created successfully'
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/approval-requests/{id}/reject':
post:
tags:
- 'Approval Workflows'
summary: 'Reject Request'
operationId: rejectRequest
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
requestBody:
content:
application/json:
schema:
type: object
responses:
'201':
description: 'Created successfully'
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/approval-requests/{id}/withdraw':
post:
tags:
- 'Approval Workflows'
summary: 'Withdraw approval request'
operationId: withdrawRequest
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
requestBody:
content:
application/json:
schema:
type: object
responses:
'201':
description: 'Created successfully'
'401':
description: Unauthorized
'500':
description: 'Internal server error'
/webhooks/github:
post:
tags:
- Webhooks
summary: 'Github Webhook Controller'
operationId: githubWebhookController
requestBody:
content:
application/json:
schema:
type: object
responses:
'201':
description: 'Created successfully'
'500':
description: 'Internal server error'
/ai-detection/scans:
post:
tags:
- 'AI Detection'
summary: 'Start Scan Controller'
operationId: startScanController
security:
-
bearerAuth: []
requestBody:
content:
application/json:
schema:
type: object
responses:
'201':
description: 'Created successfully'
'401':
description: Unauthorized
'500':
description: 'Internal server error'
get:
tags:
- 'AI Detection'
summary: 'Get Scans Controller'
operationId: getScansController
security:
-
bearerAuth: []
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
/ai-detection/scans/active:
get:
tags:
- 'AI Detection'
summary: 'Get Active Scan Controller'
operationId: getActiveScanController
security:
-
bearerAuth: []
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/ai-detection/scans/{scanId}':
get:
tags:
- 'AI Detection'
summary: 'Get Scan Controller'
operationId: getScanController
security:
-
bearerAuth: []
parameters:
-
name: scanId
in: path
required: true
schema:
type: integer
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
delete:
tags:
- 'AI Detection'
summary: 'Delete Scan Controller'
operationId: deleteScanController
security:
-
bearerAuth: []
parameters:
-
name: scanId
in: path
required: true
schema:
type: integer
responses:
'200':
description: 'Deleted successfully'
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/ai-detection/scans/{scanId}/status':
get:
tags:
- 'AI Detection'
summary: 'Get Scan Status Controller'
operationId: getScanStatusController
security:
-
bearerAuth: []
parameters:
-
name: scanId
in: path
required: true
schema:
type: integer
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/ai-detection/scans/{scanId}/findings':
get:
tags:
- 'AI Detection'
summary: 'Get Scan Findings Controller'
operationId: getScanFindingsController
security:
-
bearerAuth: []
parameters:
-
name: scanId
in: path
required: true
schema:
type: integer
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/ai-detection/scans/{scanId}/security-findings':
get:
tags:
- 'AI Detection'
summary: 'Get Security Findings Controller'
operationId: getSecurityFindingsController
security:
-
bearerAuth: []
parameters:
-
name: scanId
in: path
required: true
schema:
type: integer
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/ai-detection/scans/{scanId}/security-summary':
get:
tags:
- 'AI Detection'
summary: 'Get Security Summary Controller'
operationId: getSecuritySummaryController
security:
-
bearerAuth: []
parameters:
-
name: scanId
in: path
required: true
schema:
type: integer
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/ai-detection/scans/{scanId}/cancel':
post:
tags:
- 'AI Detection'
summary: 'Cancel Scan Controller'
operationId: cancelScanController
security:
-
bearerAuth: []
parameters:
-
name: scanId
in: path
required: true
schema:
type: integer
requestBody:
content:
application/json:
schema:
type: object
responses:
'201':
description: 'Created successfully'
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/ai-detection/scans/{scanId}/findings/{findingId}/governance':
patch:
tags:
- 'AI Detection'
summary: 'Update Governance Status Controller'
operationId: updateGovernanceStatusController
security:
-
bearerAuth: []
parameters:
-
name: scanId
in: path
required: true
schema:
type: integer
-
name: findingId
in: path
required: true
schema:
type: integer
requestBody:
content:
application/json:
schema:
type: object
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/ai-detection/scans/{scanId}/governance-summary':
get:
tags:
- 'AI Detection'
summary: 'Get Governance Summary Controller'
operationId: getGovernanceSummaryController
security:
-
bearerAuth: []
parameters:
-
name: scanId
in: path
required: true
schema:
type: integer
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
/ai-detection/stats:
get:
tags:
- 'AI Detection'
summary: 'Get A I Detection Stats Controller'
operationId: getAIDetectionStatsController
security:
-
bearerAuth: []
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/ai-detection/scans/{scanId}/export/ai-bom':
get:
tags:
- 'AI Detection'
summary: 'Export A I B O M Controller'
operationId: exportAIBOMController
security:
-
bearerAuth: []
parameters:
-
name: scanId
in: path
required: true
schema:
type: integer
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/ai-detection/scans/{scanId}/dependency-graph':
get:
tags:
- 'AI Detection'
summary: 'Get Dependency Graph Controller'
operationId: getDependencyGraphController
security:
-
bearerAuth: []
parameters:
-
name: scanId
in: path
required: true
schema:
type: integer
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/ai-detection/scans/{scanId}/compliance':
get:
tags:
- 'AI Detection'
summary: 'Get Compliance Mapping Controller'
operationId: getComplianceMappingController
security:
-
bearerAuth: []
parameters:
-
name: scanId
in: path
required: true
schema:
type: integer
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/ai-detection/scans/{scanId}/risk-score':
get:
tags:
- 'AI Detection'
summary: 'Get Risk Score Controller'
operationId: getRiskScoreController
security:
-
bearerAuth: []
parameters:
-
name: scanId
in: path
required: true
schema:
type: integer
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/ai-detection/scans/{scanId}/risk-score/recalculate':
post:
tags:
- 'AI Detection'
summary: 'Recalculate Risk Score Controller'
operationId: recalculateRiskScoreController
security:
-
bearerAuth: []
parameters:
-
name: scanId
in: path
required: true
schema:
type: integer
requestBody:
content:
application/json:
schema:
type: object
responses:
'201':
description: 'Created successfully'
'401':
description: Unauthorized
'500':
description: 'Internal server error'
/ai-detection/risk-scoring/config:
get:
tags:
- 'AI Detection'
summary: 'Get Risk Scoring Config Controller'
operationId: getRiskScoringConfigController
security:
-
bearerAuth: []
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
patch:
tags:
- 'AI Detection'
summary: 'Update Risk Scoring Config Controller'
operationId: updateRiskScoringConfigController
security:
-
bearerAuth: []
requestBody:
content:
application/json:
schema:
type: object
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
/ai-detection/suppressions:
post:
summary: 'Create Suppression Controller'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- 'AI Detection'
operationId: createSuppressionController
security:
-
bearerAuth: []
get:
summary: 'List Suppressions Controller'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- 'AI Detection'
operationId: listSuppressionsController
security:
-
bearerAuth: []
'/ai-detection/suppressions/{id}':
delete:
summary: 'Delete Suppression Controller'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- 'AI Detection'
operationId: deleteSuppressionController
security:
-
bearerAuth: []
/ai-detection/repositories:
get:
tags:
- 'AI Detection'
summary: 'List Repositories'
operationId: listRepositories
security:
-
bearerAuth: []
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
post:
tags:
- 'AI Detection'
summary: 'Create Repository'
operationId: createRepository
security:
-
bearerAuth: []
requestBody:
content:
application/json:
schema:
type: object
responses:
'201':
description: 'Created successfully'
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/ai-detection/repositories/{id}':
get:
tags:
- 'AI Detection'
summary: 'Get Repository'
operationId: getRepository
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
patch:
tags:
- 'AI Detection'
summary: 'Update Repository'
operationId: updateRepository
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
requestBody:
content:
application/json:
schema:
type: object
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
delete:
tags:
- 'AI Detection'
summary: 'Delete Repository'
operationId: deleteRepository
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: 'Deleted successfully'
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/ai-detection/repositories/{id}/scan':
post:
tags:
- 'AI Detection'
summary: 'Trigger Repository Scan'
operationId: triggerRepositoryScan
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
requestBody:
content:
application/json:
schema:
type: object
responses:
'201':
description: 'Created successfully'
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/ai-detection/repositories/{id}/webhook-secret':
post:
tags:
- 'AI Detection'
summary: 'Generate Webhook Secret Controller'
operationId: generateWebhookSecretController
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
requestBody:
content:
application/json:
schema:
type: object
responses:
'201':
description: 'Created successfully'
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/ai-detection/repositories/{id}/scans':
get:
tags:
- 'AI Detection'
summary: 'Get Repository Scans'
operationId: getRepositoryScans
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
/integrations/github/token:
get:
tags:
- Integrations
summary: 'Get Git Hub Token Status Controller'
operationId: getGitHubTokenStatusController
security:
-
bearerAuth: []
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
post:
tags:
- Integrations
summary: 'Save Git Hub Token Controller'
operationId: saveGitHubTokenController
security:
-
bearerAuth: []
requestBody:
content:
application/json:
schema:
type: object
responses:
'201':
description: 'Created successfully'
'401':
description: Unauthorized
'500':
description: 'Internal server error'
delete:
tags:
- Integrations
summary: 'Delete Git Hub Token Controller'
operationId: deleteGitHubTokenController
security:
-
bearerAuth: []
responses:
'200':
description: 'Deleted successfully'
'401':
description: Unauthorized
'500':
description: 'Internal server error'
/integrations/github/token/test:
post:
tags:
- Integrations
summary: 'Test Git Hub Token Controller'
operationId: testGitHubTokenController
security:
-
bearerAuth: []
requestBody:
content:
application/json:
schema:
type: object
responses:
'201':
description: 'Created successfully'
'401':
description: Unauthorized
'500':
description: 'Internal server error'
/notifications/stream:
get:
tags:
- Notifications
summary: 'Stream Notifications'
operationId: streamNotifications
security:
-
bearerAuth: []
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
/notifications:
get:
tags:
- Notifications
summary: 'Get Notifications'
operationId: getNotifications
security:
-
bearerAuth: []
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
/notifications/summary:
get:
tags:
- Notifications
summary: 'Get Notification Summary'
operationId: getNotificationSummary
security:
-
bearerAuth: []
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
/notifications/unread-count:
get:
tags:
- Notifications
summary: 'Get Unread Count'
operationId: getUnreadCount
security:
-
bearerAuth: []
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
/notifications/read-all:
patch:
tags:
- Notifications
summary: 'Mark All As Read'
operationId: markAllAsRead
security:
-
bearerAuth: []
requestBody:
content:
application/json:
schema:
type: object
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/notifications/{id}/read':
patch:
tags:
- Notifications
summary: 'Mark As Read'
operationId: markAsRead
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
requestBody:
content:
application/json:
schema:
type: object
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/notifications/{id}':
delete:
tags:
- Notifications
summary: 'Delete Notification'
operationId: deleteNotification
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: 'Deleted successfully'
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/pmm/config/{projectId}':
get:
tags:
- 'Post-Market Monitoring'
summary: 'Get Config By Project Id'
operationId: getConfigByProjectId
security:
-
bearerAuth: []
parameters:
-
name: projectId
in: path
required: true
schema:
type: integer
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
/pmm/config:
post:
tags:
- 'Post-Market Monitoring'
summary: 'Create Config'
operationId: createConfig
security:
-
bearerAuth: []
requestBody:
content:
application/json:
schema:
type: object
responses:
'201':
description: 'Created successfully'
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/pmm/config/{configId}':
put:
tags:
- 'Post-Market Monitoring'
summary: 'Update Config'
operationId: updateConfig
security:
-
bearerAuth: []
parameters:
-
name: configId
in: path
required: true
schema:
type: integer
requestBody:
content:
application/json:
schema:
type: object
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
delete:
tags:
- 'Post-Market Monitoring'
summary: 'Delete Config'
operationId: deleteConfig
security:
-
bearerAuth: []
parameters:
-
name: configId
in: path
required: true
schema:
type: integer
responses:
'200':
description: 'Deleted successfully'
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/pmm/config/{configId}/questions':
get:
tags:
- 'Post-Market Monitoring'
summary: 'Get Questions'
operationId: getQuestions
security:
-
bearerAuth: []
parameters:
-
name: configId
in: path
required: true
schema:
type: integer
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
post:
tags:
- 'Post-Market Monitoring'
summary: 'Add Question'
operationId: addQuestion
security:
-
bearerAuth: []
parameters:
-
name: configId
in: path
required: true
schema:
type: integer
requestBody:
content:
application/json:
schema:
type: object
responses:
'201':
description: 'Created successfully'
'401':
description: Unauthorized
'500':
description: 'Internal server error'
/pmm/org/questions:
get:
tags:
- 'Post-Market Monitoring'
summary: 'Get Questions'
operationId: pmm_getQuestions
security:
-
bearerAuth: []
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/pmm/questions/{questionId}':
put:
tags:
- 'Post-Market Monitoring'
summary: 'Update Question'
operationId: updateQuestion
security:
-
bearerAuth: []
parameters:
-
name: questionId
in: path
required: true
schema:
type: integer
requestBody:
content:
application/json:
schema:
type: object
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
delete:
tags:
- 'Post-Market Monitoring'
summary: 'Delete Question'
operationId: deleteQuestion
security:
-
bearerAuth: []
parameters:
-
name: questionId
in: path
required: true
schema:
type: integer
responses:
'200':
description: 'Deleted successfully'
'401':
description: Unauthorized
'500':
description: 'Internal server error'
/pmm/questions/reorder:
post:
tags:
- 'Post-Market Monitoring'
summary: 'Reorder Questions'
operationId: reorderQuestions
security:
-
bearerAuth: []
requestBody:
content:
application/json:
schema:
type: object
responses:
'201':
description: 'Created successfully'
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/pmm/active-cycle/{projectId}':
get:
tags:
- 'Post-Market Monitoring'
summary: 'Get Active Cycle'
operationId: getActiveCycle
security:
-
bearerAuth: []
parameters:
-
name: projectId
in: path
required: true
schema:
type: integer
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/pmm/cycles/{cycleId}':
get:
tags:
- 'Post-Market Monitoring'
summary: 'Get Cycle By Id'
operationId: getCycleById
security:
-
bearerAuth: []
parameters:
-
name: cycleId
in: path
required: true
schema:
type: integer
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/pmm/cycles/{cycleId}/responses':
get:
tags:
- 'Post-Market Monitoring'
summary: 'Get Responses'
operationId: getResponses
security:
-
bearerAuth: []
parameters:
-
name: cycleId
in: path
required: true
schema:
type: integer
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
post:
tags:
- 'Post-Market Monitoring'
summary: 'Save Responses'
operationId: saveResponses
security:
-
bearerAuth: []
parameters:
-
name: cycleId
in: path
required: true
schema:
type: integer
requestBody:
content:
application/json:
schema:
type: object
responses:
'201':
description: 'Created successfully'
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/pmm/cycles/{cycleId}/submit':
post:
tags:
- 'Post-Market Monitoring'
summary: 'Submit Cycle'
operationId: submitCycle
security:
-
bearerAuth: []
parameters:
-
name: cycleId
in: path
required: true
schema:
type: integer
requestBody:
content:
application/json:
schema:
type: object
responses:
'201':
description: 'Created successfully'
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/pmm/cycles/{cycleId}/flag':
post:
tags:
- 'Post-Market Monitoring'
summary: 'Flag Concern'
operationId: flagConcern
security:
-
bearerAuth: []
parameters:
-
name: cycleId
in: path
required: true
schema:
type: integer
requestBody:
content:
application/json:
schema:
type: object
responses:
'201':
description: 'Created successfully'
'401':
description: Unauthorized
'500':
description: 'Internal server error'
/pmm/reports:
get:
tags:
- 'Post-Market Monitoring'
summary: 'Get Reports'
operationId: getReports
security:
-
bearerAuth: []
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/pmm/reports/{reportId}/download':
get:
tags:
- 'Post-Market Monitoring'
summary: 'Download Report'
operationId: downloadReport
security:
-
bearerAuth: []
parameters:
-
name: reportId
in: path
required: true
schema:
type: integer
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/pmm/cycles/{cycleId}/reassign':
post:
tags:
- 'Post-Market Monitoring'
summary: 'Reassign Stakeholder'
operationId: reassignStakeholder
security:
-
bearerAuth: []
parameters:
-
name: cycleId
in: path
required: true
schema:
type: integer
requestBody:
content:
application/json:
schema:
type: object
responses:
'201':
description: 'Created successfully'
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/pmm/projects/{projectId}/start-cycle':
post:
tags:
- 'Post-Market Monitoring'
summary: 'Start New Cycle'
operationId: startNewCycle
security:
-
bearerAuth: []
parameters:
-
name: projectId
in: path
required: true
schema:
type: integer
requestBody:
content:
application/json:
schema:
type: object
responses:
'201':
description: 'Created successfully'
'401':
description: Unauthorized
'500':
description: 'Internal server error'
/compliance/score:
get:
tags:
- Compliance
summary: 'Get Compliance Score'
operationId: getComplianceScore
security:
-
bearerAuth: []
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/compliance/score/{organizationId}':
get:
tags:
- Compliance
summary: 'Get Compliance Score By Organization'
operationId: getComplianceScoreByOrganization
security:
-
bearerAuth: []
parameters:
-
name: organizationId
in: path
required: true
schema:
type: integer
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/compliance/details/{organizationId}':
get:
tags:
- Compliance
summary: 'Get Compliance Details'
operationId: getComplianceDetails
security:
-
bearerAuth: []
parameters:
-
name: organizationId
in: path
required: true
schema:
type: integer
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
/virtual-folders:
get:
tags:
- Files
summary: 'Get All Folders'
operationId: getAllFolders
security:
-
bearerAuth: []
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
post:
tags:
- Files
summary: 'Create Folder'
operationId: createFolder
security:
-
bearerAuth: []
requestBody:
content:
application/json:
schema:
type: object
responses:
'201':
description: 'Created successfully'
'401':
description: Unauthorized
'500':
description: 'Internal server error'
/virtual-folders/tree:
get:
tags:
- Files
summary: 'Get Folder Tree'
operationId: getFolderTree
security:
-
bearerAuth: []
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
/virtual-folders/uncategorized:
get:
tags:
- Files
summary: 'Get Uncategorized Files'
operationId: getUncategorizedFiles
security:
-
bearerAuth: []
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/virtual-folders/{id}':
get:
tags:
- Files
summary: 'Get Folder By Id'
operationId: getFolderById
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
patch:
tags:
- Files
summary: 'Update Folder'
operationId: updateFolder
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
requestBody:
content:
application/json:
schema:
type: object
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
delete:
tags:
- Files
summary: 'Delete Folder'
operationId: deleteFolder
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: 'Deleted successfully'
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/virtual-folders/{id}/path':
get:
tags:
- Files
summary: 'Get Folder Path'
operationId: getFolderPath
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/virtual-folders/{id}/files':
get:
tags:
- Files
summary: 'Get Files In Folder'
operationId: getFilesInFolder
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
post:
tags:
- Files
summary: 'Assign Files To Folder'
operationId: assignFilesToFolder
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
requestBody:
content:
application/json:
schema:
type: object
responses:
'201':
description: 'Created successfully'
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/virtual-folders/{id}/files/{fileId}':
delete:
tags:
- Files
summary: 'Remove File From Folder'
operationId: removeFileFromFolder
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
-
name: fileId
in: path
required: true
schema:
type: integer
responses:
'200':
description: 'Deleted successfully'
'401':
description: Unauthorized
'500':
description: 'Internal server error'
/files/tree:
get:
tags:
- Files
summary: 'Get Folder Tree'
operationId: files_getFolderTree
security:
-
bearerAuth: []
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
/files/uncategorized:
get:
tags:
- Files
summary: 'Get Uncategorized Files'
operationId: files_getUncategorizedFiles
security:
-
bearerAuth: []
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/files/{id}/path':
get:
tags:
- Files
summary: 'Get Folder Path'
operationId: files_getFolderPath
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/files/{id}/files':
get:
tags:
- Files
summary: 'Get Files In Folder'
operationId: files_getFilesInFolder
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
post:
tags:
- Files
summary: 'Assign Files To Folder'
operationId: files_assignFilesToFolder
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
requestBody:
content:
application/json:
schema:
type: object
responses:
'201':
description: 'Created successfully'
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/files/{id}/files/{fileId}':
delete:
tags:
- Files
summary: 'Remove File From Folder'
operationId: files_removeFileFromFolder
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
-
name: fileId
in: path
required: true
schema:
type: integer
responses:
'200':
description: 'Deleted successfully'
'401':
description: Unauthorized
'500':
description: 'Internal server error'
/shadow-ai/api-keys:
post:
tags:
- 'Shadow AI'
summary: 'Create Api Key'
operationId: createApiKey
security:
-
bearerAuth: []
requestBody:
content:
application/json:
schema:
type: object
responses:
'201':
description: 'Created successfully'
'401':
description: Unauthorized
'500':
description: 'Internal server error'
get:
tags:
- 'Shadow AI'
summary: 'List Api Keys'
operationId: listApiKeys
security:
-
bearerAuth: []
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/shadow-ai/api-keys/{id}':
delete:
tags:
- 'Shadow AI'
summary: 'Revoke Api Key'
operationId: revokeApiKey
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: 'Deleted successfully'
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/shadow-ai/api-keys/{id}/permanent':
delete:
tags:
- 'Shadow AI'
summary: 'Delete Api Key'
operationId: deleteApiKey
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: 'Deleted successfully'
'401':
description: Unauthorized
'500':
description: 'Internal server error'
/shadow-ai/insights/summary:
get:
tags:
- 'Shadow AI'
summary: 'Get Insights Summary'
operationId: getInsightsSummary
security:
-
bearerAuth: []
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
/shadow-ai/insights/tools-by-events:
get:
tags:
- 'Shadow AI'
summary: 'Get Tools By Events'
operationId: getToolsByEvents
security:
-
bearerAuth: []
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
/shadow-ai/insights/tools-by-users:
get:
tags:
- 'Shadow AI'
summary: 'Get Tools By Users'
operationId: getToolsByUsers
security:
-
bearerAuth: []
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
/shadow-ai/insights/users-by-department:
get:
tags:
- 'Shadow AI'
summary: 'Get Users By Department'
operationId: getUsersByDepartment
security:
-
bearerAuth: []
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
/shadow-ai/insights/trend:
get:
tags:
- 'Shadow AI'
summary: 'Get Trend'
operationId: getTrend
security:
-
bearerAuth: []
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
/shadow-ai/users:
get:
tags:
- 'Shadow AI'
summary: 'Get Users'
operationId: getUsers
security:
-
bearerAuth: []
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/shadow-ai/users/{email}/activity':
get:
tags:
- 'Shadow AI'
summary: 'Get User Detail'
operationId: getUserDetail
security:
-
bearerAuth: []
parameters:
-
name: email
in: path
required: true
schema:
type: string
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
/shadow-ai/departments:
get:
tags:
- 'Shadow AI'
summary: 'Get Department Activity'
operationId: getDepartmentActivity
security:
-
bearerAuth: []
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
/shadow-ai/tools:
get:
tags:
- 'Shadow AI'
summary: 'Get Tools'
operationId: getTools
security:
-
bearerAuth: []
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/shadow-ai/tools/{id}':
get:
tags:
- 'Shadow AI'
summary: 'Get Tool By Id'
operationId: getToolById
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/shadow-ai/tools/{id}/status':
patch:
tags:
- 'Shadow AI'
summary: 'Update Tool Status'
operationId: updateToolStatus
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
requestBody:
content:
application/json:
schema:
type: object
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/shadow-ai/tools/{id}/start-governance':
post:
tags:
- 'Shadow AI'
summary: 'Start Governance'
operationId: startGovernance
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
requestBody:
content:
application/json:
schema:
type: object
responses:
'201':
description: 'Created successfully'
'401':
description: Unauthorized
'500':
description: 'Internal server error'
/shadow-ai/rules:
get:
tags:
- 'Shadow AI'
summary: 'Get Rules'
operationId: getRules
security:
-
bearerAuth: []
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
post:
tags:
- 'Shadow AI'
summary: 'Create Rule'
operationId: createRule
security:
-
bearerAuth: []
requestBody:
content:
application/json:
schema:
type: object
responses:
'201':
description: 'Created successfully'
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/shadow-ai/rules/{id}':
patch:
tags:
- 'Shadow AI'
summary: 'Update Rule'
operationId: updateRule
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
requestBody:
content:
application/json:
schema:
type: object
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
delete:
tags:
- 'Shadow AI'
summary: 'Delete Rule'
operationId: deleteRule
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: 'Deleted successfully'
'401':
description: Unauthorized
'500':
description: 'Internal server error'
/shadow-ai/rules/alert-history:
get:
tags:
- 'Shadow AI'
summary: 'Get Alert History'
operationId: getAlertHistory
security:
-
bearerAuth: []
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
/shadow-ai/config/syslog:
get:
tags:
- 'Shadow AI'
summary: 'Get Syslog Configs'
operationId: getSyslogConfigs
security:
-
bearerAuth: []
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
post:
tags:
- 'Shadow AI'
summary: 'Create Syslog Config'
operationId: createSyslogConfig
security:
-
bearerAuth: []
requestBody:
content:
application/json:
schema:
type: object
responses:
'201':
description: 'Created successfully'
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/shadow-ai/config/syslog/{id}':
patch:
tags:
- 'Shadow AI'
summary: 'Update Syslog Config'
operationId: updateSyslogConfig
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
requestBody:
content:
application/json:
schema:
type: object
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
delete:
tags:
- 'Shadow AI'
summary: 'Delete Syslog Config'
operationId: deleteSyslogConfig
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: 'Deleted successfully'
'401':
description: Unauthorized
'500':
description: 'Internal server error'
/shadow-ai/settings:
get:
tags:
- 'Shadow AI'
summary: 'Get Settings'
operationId: getSettings
security:
-
bearerAuth: []
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
patch:
tags:
- 'Shadow AI'
summary: 'Update Settings'
operationId: updateSettings
security:
-
bearerAuth: []
requestBody:
content:
application/json:
schema:
type: object
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
/v1/shadow-ai/events:
post:
tags:
- 'Shadow AI'
summary: 'Ingest Events'
operationId: ingestEvents
requestBody:
content:
application/json:
schema:
type: object
responses:
'201':
description: 'Created successfully'
'500':
description: 'Internal server error'
/agent-primitives:
get:
tags:
- 'Agent Discovery'
summary: 'Get All Agent Primitives'
operationId: getAllAgentPrimitives
security:
-
bearerAuth: []
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
post:
tags:
- 'Agent Discovery'
summary: 'Create Agent Primitive'
operationId: createAgentPrimitive
security:
-
bearerAuth: []
requestBody:
content:
application/json:
schema:
type: object
responses:
'201':
description: 'Created successfully'
'401':
description: Unauthorized
'500':
description: 'Internal server error'
description: 'Requires role: Admin'
/agent-primitives/stats:
get:
tags:
- 'Agent Discovery'
summary: 'Get Agent Stats'
operationId: getAgentStats
security:
-
bearerAuth: []
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
/agent-primitives/sync/logs:
get:
tags:
- 'Agent Discovery'
summary: 'Get Sync Logs'
operationId: getSyncLogs
security:
-
bearerAuth: []
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
/agent-primitives/sync/status:
get:
tags:
- 'Agent Discovery'
summary: 'Get Sync Status'
operationId: getSyncStatus
security:
-
bearerAuth: []
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/agent-primitives/{id}':
get:
tags:
- 'Agent Discovery'
summary: 'Get Agent Primitive By Id'
operationId: getAgentPrimitiveById
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
patch:
tags:
- 'Agent Discovery'
summary: 'Update Agent Primitive'
operationId: updateAgentPrimitive
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
requestBody:
content:
application/json:
schema:
type: object
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
description: 'Requires role: Admin'
delete:
tags:
- 'Agent Discovery'
summary: 'Delete Agent Primitive By Id'
operationId: deleteAgentPrimitiveById
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: 'Deleted successfully'
'401':
description: Unauthorized
'500':
description: 'Internal server error'
description: 'Requires role: Admin'
/agent-primitives/sync:
post:
tags:
- 'Agent Discovery'
summary: 'Trigger Sync'
operationId: triggerSync
security:
-
bearerAuth: []
requestBody:
content:
application/json:
schema:
type: object
responses:
'201':
description: 'Created successfully'
'401':
description: Unauthorized
'500':
description: 'Internal server error'
description: 'Requires role: Admin'
'/agent-primitives/{id}/review':
patch:
tags:
- 'Agent Discovery'
summary: 'Review Agent Primitive'
operationId: reviewAgentPrimitive
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
requestBody:
content:
application/json:
schema:
type: object
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
description: 'Requires role: Admin'
'/agent-primitives/{id}/link-model':
patch:
tags:
- 'Agent Discovery'
summary: 'Link Model To Agent'
operationId: linkModelToAgent
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
requestBody:
content:
application/json:
schema:
type: object
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
description: 'Requires role: Admin'
'/agent-primitives/{id}/unlink-model':
patch:
tags:
- 'Agent Discovery'
summary: 'Unlink Model From Agent'
operationId: unlinkModelFromAgent
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
requestBody:
content:
application/json:
schema:
type: object
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
description: 'Requires role: Admin'
'/agent-primitives/{id}/audit-logs':
get:
tags:
- 'Agent Discovery'
summary: 'Get Agent Audit Logs'
operationId: getAgentAuditLogs
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
/intake/forms:
get:
tags:
- 'Intake Forms'
summary: 'Get All Intake Forms'
operationId: getAllIntakeForms
security:
-
bearerAuth: []
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
post:
tags:
- 'Intake Forms'
summary: 'Create Intake Form'
operationId: createIntakeForm
security:
-
bearerAuth: []
requestBody:
content:
application/json:
schema:
type: object
responses:
'201':
description: 'Created successfully'
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/intake/forms/{id}':
get:
tags:
- 'Intake Forms'
summary: 'Get Intake Form By Id'
operationId: getIntakeFormById
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
patch:
tags:
- 'Intake Forms'
summary: 'Update Intake Form'
operationId: updateIntakeForm
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
requestBody:
content:
application/json:
schema:
type: object
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
delete:
tags:
- 'Intake Forms'
summary: 'Delete Intake Form'
operationId: deleteIntakeForm
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: 'Deleted successfully'
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/intake/forms/{id}/archive':
post:
tags:
- 'Intake Forms'
summary: 'Archive Intake Form'
operationId: archiveIntakeForm
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
requestBody:
content:
application/json:
schema:
type: object
responses:
'201':
description: 'Created successfully'
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/intake/forms/{id}/preview':
get:
tags:
- 'Intake Forms'
summary: 'Preview Form'
operationId: previewForm
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
/intake/forms/suggested-questions:
post:
tags:
- 'Intake Forms'
summary: 'Get L L M Suggested Questions'
operationId: getLLMSuggestedQuestions
security:
-
bearerAuth: []
requestBody:
content:
application/json:
schema:
type: object
responses:
'201':
description: 'Created successfully'
'401':
description: Unauthorized
'500':
description: 'Internal server error'
/intake/forms/field-guidance:
post:
tags:
- 'Intake Forms'
summary: 'Get Field Guidance'
operationId: getFieldGuidance
security:
-
bearerAuth: []
requestBody:
content:
application/json:
schema:
type: object
responses:
'201':
description: 'Created successfully'
'401':
description: Unauthorized
'500':
description: 'Internal server error'
/intake/submissions:
get:
tags:
- 'Intake Forms'
summary: 'Get Pending Submissions'
operationId: getPendingSubmissions
security:
-
bearerAuth: []
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
/intake/submissions/stats:
get:
tags:
- 'Intake Forms'
summary: 'Get Submission Stats'
operationId: getSubmissionStats
security:
-
bearerAuth: []
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/intake/submissions/by-entity/{entityType}/{entityId}':
get:
tags:
- 'Intake Forms'
summary: 'Get Submission By Entity'
operationId: getSubmissionByEntity
security:
-
bearerAuth: []
parameters:
-
name: entityType
in: path
required: true
schema:
type: string
-
name: entityId
in: path
required: true
schema:
type: integer
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/intake/submissions/{id}':
get:
tags:
- 'Intake Forms'
summary: 'Get Submission By Id'
operationId: getSubmissionById
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/intake/submissions/{id}/preview':
get:
tags:
- 'Intake Forms'
summary: 'Get Submission Preview'
operationId: getSubmissionPreview
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/intake/submissions/{id}/risk-override':
patch:
tags:
- 'Intake Forms'
summary: 'Override Submission Risk'
operationId: overrideSubmissionRisk
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
requestBody:
content:
application/json:
schema:
type: object
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/intake/forms/{id}/submissions':
get:
tags:
- 'Intake Forms'
summary: 'Get Form Submissions'
operationId: getFormSubmissions
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/intake/submissions/{id}/approve':
post:
tags:
- 'Intake Forms'
summary: 'Approve Submission'
operationId: approveSubmission
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
requestBody:
content:
application/json:
schema:
type: object
responses:
'201':
description: 'Created successfully'
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/intake/submissions/{id}/reject':
post:
tags:
- 'Intake Forms'
summary: 'Reject Submission'
operationId: rejectSubmission
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
requestBody:
content:
application/json:
schema:
type: object
responses:
'201':
description: 'Created successfully'
'401':
description: Unauthorized
'500':
description: 'Internal server error'
/intake/public/captcha:
get:
tags:
- 'Intake Forms'
summary: 'Get Captcha'
operationId: getCaptcha
responses:
'200':
description: Success
'500':
description: 'Internal server error'
'/intake/public/by-id/{publicId}':
get:
tags:
- 'Intake Forms'
summary: 'Get Public Form By Public Id'
operationId: getPublicFormByPublicId
parameters:
-
name: publicId
in: path
required: true
schema:
type: integer
responses:
'200':
description: Success
'500':
description: 'Internal server error'
post:
tags:
- 'Intake Forms'
summary: 'Submit Public Form By Public Id'
operationId: submitPublicFormByPublicId
parameters:
-
name: publicId
in: path
required: true
schema:
type: integer
requestBody:
content:
application/json:
schema:
type: object
responses:
'201':
description: 'Created successfully'
'500':
description: 'Internal server error'
'/intake/public/{tenantSlug}/{formSlug}':
get:
tags:
- 'Intake Forms'
summary: 'Get Public Form'
operationId: getPublicForm
parameters:
-
name: tenantSlug
in: path
required: true
schema:
type: string
-
name: formSlug
in: path
required: true
schema:
type: string
responses:
'200':
description: Success
'500':
description: 'Internal server error'
post:
tags:
- 'Intake Forms'
summary: 'Submit Public Form'
operationId: submitPublicForm
parameters:
-
name: tenantSlug
in: path
required: true
schema:
type: string
-
name: formSlug
in: path
required: true
schema:
type: string
requestBody:
content:
application/json:
schema:
type: object
responses:
'201':
description: 'Created successfully'
'500':
description: 'Internal server error'
/version:
get:
tags:
- System
summary: 'Get application version'
operationId: version_anonymous
responses:
'200':
description: Success
'500':
description: 'Internal server error'
/audit-ledger:
get:
tags:
- Audit
summary: 'Get Audit Ledger'
operationId: getAuditLedger
security:
-
bearerAuth: []
description: 'Requires role: Admin or SuperAdmin'
responses:
'200':
description: Success
'401':
description: Unauthorized
'403':
description: 'Forbidden - insufficient role'
'500':
description: 'Internal server error'
/audit-ledger/verify:
get:
tags:
- Audit
summary: 'Verify Audit Ledger'
operationId: verifyAuditLedger
security:
-
bearerAuth: []
description: 'Requires role: Admin'
responses:
'200':
description: Success
'401':
description: Unauthorized
'403':
description: 'Forbidden - insufficient role'
'500':
description: 'Internal server error'
/feature-settings:
get:
tags:
- Settings
summary: 'Get Feature Settings'
operationId: getFeatureSettings
security:
-
bearerAuth: []
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
patch:
tags:
- Settings
summary: 'Update Feature Settings'
operationId: updateFeatureSettings
security:
-
bearerAuth: []
requestBody:
content:
application/json:
schema:
type: object
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/fria/{friaId}/rights':
put:
tags:
- FRIA
summary: 'Update Fria Rights'
operationId: updateFriaRights
security:
-
bearerAuth: []
description: 'Requires role: Admin or Editor'
parameters:
-
name: friaId
in: path
required: true
schema:
type: integer
requestBody:
content:
application/json:
schema:
type: object
responses:
'200':
description: Success
'401':
description: Unauthorized
'403':
description: 'Forbidden - insufficient role'
'500':
description: 'Internal server error'
'/fria/{friaId}/risk-items':
get:
tags:
- FRIA
summary: 'Get Risk Items'
operationId: getRiskItems
security:
-
bearerAuth: []
parameters:
-
name: friaId
in: path
required: true
schema:
type: integer
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
post:
tags:
- FRIA
summary: 'Add Risk Item'
operationId: addRiskItem
security:
-
bearerAuth: []
description: 'Requires role: Admin or Editor'
parameters:
-
name: friaId
in: path
required: true
schema:
type: integer
requestBody:
content:
application/json:
schema:
type: object
responses:
'201':
description: 'Created successfully'
'401':
description: Unauthorized
'403':
description: 'Forbidden - insufficient role'
'500':
description: 'Internal server error'
'/fria/{friaId}/risk-items/{itemId}':
patch:
tags:
- FRIA
summary: 'Update Risk Item'
operationId: updateRiskItem
security:
-
bearerAuth: []
description: 'Requires role: Admin or Editor'
parameters:
-
name: friaId
in: path
required: true
schema:
type: integer
-
name: itemId
in: path
required: true
schema:
type: integer
requestBody:
content:
application/json:
schema:
type: object
responses:
'200':
description: Success
'401':
description: Unauthorized
'403':
description: 'Forbidden - insufficient role'
'500':
description: 'Internal server error'
delete:
tags:
- FRIA
summary: 'Delete Risk Item'
operationId: deleteRiskItem
security:
-
bearerAuth: []
description: 'Requires role: Admin or Editor'
parameters:
-
name: friaId
in: path
required: true
schema:
type: integer
-
name: itemId
in: path
required: true
schema:
type: integer
responses:
'200':
description: 'Deleted successfully'
'401':
description: Unauthorized
'403':
description: 'Forbidden - insufficient role'
'500':
description: 'Internal server error'
'/fria/{friaId}/models':
get:
tags:
- FRIA
summary: 'Get Model Links'
operationId: getModelLinks
security:
-
bearerAuth: []
parameters:
-
name: friaId
in: path
required: true
schema:
type: integer
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/fria/{friaId}/models/{modelId}':
post:
tags:
- FRIA
summary: 'Link Model'
operationId: linkModel
security:
-
bearerAuth: []
description: 'Requires role: Admin or Editor'
parameters:
-
name: friaId
in: path
required: true
schema:
type: integer
-
name: modelId
in: path
required: true
schema:
type: integer
requestBody:
content:
application/json:
schema:
type: object
responses:
'201':
description: 'Created successfully'
'401':
description: Unauthorized
'403':
description: 'Forbidden - insufficient role'
'500':
description: 'Internal server error'
delete:
tags:
- FRIA
summary: 'Unlink Model'
operationId: unlinkModel
security:
-
bearerAuth: []
description: 'Requires role: Admin or Editor'
parameters:
-
name: friaId
in: path
required: true
schema:
type: integer
-
name: modelId
in: path
required: true
schema:
type: integer
responses:
'200':
description: 'Deleted successfully'
'401':
description: Unauthorized
'403':
description: 'Forbidden - insufficient role'
'500':
description: 'Internal server error'
'/fria/{friaId}/evidence':
get:
tags:
- FRIA
summary: 'Get Fria Evidence'
operationId: getFriaEvidence
security:
-
bearerAuth: []
parameters:
-
name: friaId
in: path
required: true
schema:
type: integer
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
post:
tags:
- FRIA
summary: 'Link Fria Evidence'
operationId: linkFriaEvidence
security:
-
bearerAuth: []
description: 'Requires role: Admin or Editor'
parameters:
-
name: friaId
in: path
required: true
schema:
type: integer
requestBody:
content:
application/json:
schema:
type: object
responses:
'201':
description: 'Created successfully'
'401':
description: Unauthorized
'403':
description: 'Forbidden - insufficient role'
'500':
description: 'Internal server error'
'/fria/{friaId}/evidence/{linkId}':
delete:
tags:
- FRIA
summary: 'Unlink Fria Evidence'
operationId: unlinkFriaEvidence
security:
-
bearerAuth: []
description: 'Requires role: Admin or Editor'
parameters:
-
name: friaId
in: path
required: true
schema:
type: integer
-
name: linkId
in: path
required: true
schema:
type: integer
responses:
'200':
description: 'Deleted successfully'
'401':
description: Unauthorized
'403':
description: 'Forbidden - insufficient role'
'500':
description: 'Internal server error'
'/fria/{friaId}/submit':
post:
tags:
- FRIA
summary: 'Submit Fria'
operationId: submitFria
security:
-
bearerAuth: []
description: 'Requires role: Admin or Editor'
parameters:
-
name: friaId
in: path
required: true
schema:
type: integer
requestBody:
content:
application/json:
schema:
type: object
responses:
'201':
description: 'Created successfully'
'401':
description: Unauthorized
'403':
description: 'Forbidden - insufficient role'
'500':
description: 'Internal server error'
'/fria/{friaId}/versions':
get:
tags:
- FRIA
summary: 'Get Versions'
operationId: getVersions
security:
-
bearerAuth: []
parameters:
-
name: friaId
in: path
required: true
schema:
type: integer
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/fria/{friaId}/versions/{version}':
get:
tags:
- FRIA
summary: 'Get Version'
operationId: getVersion
security:
-
bearerAuth: []
parameters:
-
name: friaId
in: path
required: true
schema:
type: integer
-
name: version
in: path
required: true
schema:
type: integer
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/fria/{projectId}':
get:
tags:
- FRIA
summary: 'Get Fria'
operationId: getFria
security:
-
bearerAuth: []
parameters:
-
name: projectId
in: path
required: true
schema:
type: integer
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
put:
tags:
- FRIA
summary: 'Update Fria'
operationId: updateFria
security:
-
bearerAuth: []
description: 'Requires role: Admin or Editor'
parameters:
-
name: projectId
in: path
required: true
schema:
type: integer
requestBody:
content:
application/json:
schema:
type: object
responses:
'200':
description: Success
'401':
description: Unauthorized
'403':
description: 'Forbidden - insufficient role'
'500':
description: 'Internal server error'
/governance-os/mappings:
get:
summary: 'Get All Mappings'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- 'Governance OS'
operationId: getAllMappings
security:
-
bearerAuth: []
post:
summary: 'Create Mapping'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- 'Governance OS'
operationId: createMapping
security:
-
bearerAuth: []
description: 'Requires role: Admin or Editor'
'/governance-os/mappings/between/{sourceId}/{targetId}':
get:
summary: 'Get Mappings Between'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- 'Governance OS'
operationId: getMappingsBetween
security:
-
bearerAuth: []
'/governance-os/mappings/control/{controlType}/{controlId}':
get:
summary: 'Get Mappings For Control'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- 'Governance OS'
operationId: getMappingsForControl
security:
-
bearerAuth: []
'/governance-os/mappings/{id}':
put:
summary: 'Update Mapping'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- 'Governance OS'
operationId: updateMapping
security:
-
bearerAuth: []
description: 'Requires role: Admin or Editor'
delete:
summary: 'Delete Mapping'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- 'Governance OS'
operationId: deleteMapping
security:
-
bearerAuth: []
description: 'Requires role: Admin'
/governance-os/mappings/bulk:
post:
summary: 'Create Bulk Mappings'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- 'Governance OS'
operationId: createBulkMappings
security:
-
bearerAuth: []
description: 'Requires role: Admin or Editor'
/governance-os/scenarios:
get:
summary: 'Get All Scenarios'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- 'Governance OS'
operationId: getAllScenarios
security:
-
bearerAuth: []
post:
summary: 'Create Scenario'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- 'Governance OS'
operationId: createScenario
security:
-
bearerAuth: []
description: 'Requires role: Admin or Editor'
'/governance-os/scenarios/{id}':
get:
summary: 'Get Scenario By Id'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- 'Governance OS'
operationId: getScenarioById
security:
-
bearerAuth: []
put:
summary: 'Update Scenario'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- 'Governance OS'
operationId: updateScenario
security:
-
bearerAuth: []
description: 'Requires role: Admin or Editor'
delete:
summary: 'Delete Scenario'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- 'Governance OS'
operationId: deleteScenario
security:
-
bearerAuth: []
description: 'Requires role: Admin'
'/governance-os/scenarios/{id}/activate':
post:
summary: 'Activate Scenario'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- 'Governance OS'
operationId: activateScenario
security:
-
bearerAuth: []
description: 'Requires role: Admin or Editor'
/governance-os/scenarios/simulate:
post:
summary: 'Simulate Scenario'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- 'Governance OS'
operationId: simulateScenario
security:
-
bearerAuth: []
/governance-os/activations:
get:
summary: 'Get Activation History'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- 'Governance OS'
operationId: getActivationHistory
security:
-
bearerAuth: []
'/governance-os/activations/{id}/deactivate':
post:
summary: 'Deactivate Scenario'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- 'Governance OS'
operationId: deactivateScenario
security:
-
bearerAuth: []
description: 'Requires role: Admin or Editor'
'/governance-os/activations/{id}/progress':
get:
summary: 'Get Scenario Progress'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- 'Governance OS'
operationId: getScenarioProgress
security:
-
bearerAuth: []
/governance-os/recommend:
post:
summary: 'Get Recommendations'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- 'Governance OS'
operationId: governance_os_getRecommendations
security:
-
bearerAuth: []
'/governance-os/coverage/{projectId}':
get:
summary: 'Get Coverage'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- 'Governance OS'
operationId: getCoverage
security:
-
bearerAuth: []
'/governance-os/coverage/{projectId}/refresh':
post:
summary: 'Refresh Coverage'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- 'Governance OS'
operationId: refreshCoverage
security:
-
bearerAuth: []
description: 'Requires role: Admin or Editor'
'/governance-os/unified-view/{projectId}':
get:
summary: 'Get Unified View'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- 'Governance OS'
operationId: getUnifiedView
security:
-
bearerAuth: []
/governance-os/eligibility:
get:
summary: 'Get Eligibility'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- 'Governance OS'
operationId: getEligibility
security:
-
bearerAuth: []
/governance-os/preferences:
get:
summary: 'Get Preferences'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- 'Governance OS'
operationId: getPreferences
security:
-
bearerAuth: []
put:
summary: 'Update Preferences'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- 'Governance OS'
operationId: updatePreferences
security:
-
bearerAuth: []
description: 'Requires role: Admin'
/risk-benchmarks:
get:
tags:
- 'Risk Benchmarks'
summary: 'Get All Benchmarks'
operationId: getAllBenchmarks
security:
-
bearerAuth: []
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
/risk-benchmarks/filters:
get:
tags:
- 'Risk Benchmarks'
summary: 'Get Benchmark Filters'
operationId: getBenchmarkFilters
security:
-
bearerAuth: []
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/risk-benchmarks/{id}':
get:
tags:
- 'Risk Benchmarks'
summary: 'Get Benchmark By Id'
operationId: getBenchmarkById
security:
-
bearerAuth: []
parameters:
-
name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
/quantitative-risks/portfolio/org:
get:
tags:
- 'Quantitative Risks'
summary: 'Get Org Portfolio'
operationId: getOrgPortfolio
security:
-
bearerAuth: []
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/quantitative-risks/portfolio/project/{projectId}':
get:
tags:
- 'Quantitative Risks'
summary: 'Get Project Portfolio'
operationId: getProjectPortfolio
security:
-
bearerAuth: []
parameters:
-
name: projectId
in: path
required: true
schema:
type: integer
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
/quantitative-risks/portfolio/trend:
get:
tags:
- 'Quantitative Risks'
summary: 'Get Portfolio Trend Handler'
operationId: getPortfolioTrendHandler
security:
-
bearerAuth: []
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/quantitative-risks/{riskId}/apply-benchmark/{benchmarkId}':
post:
tags:
- 'Quantitative Risks'
summary: 'Apply Benchmark'
operationId: applyBenchmark
security:
-
bearerAuth: []
parameters:
-
name: riskId
in: path
required: true
schema:
type: integer
-
name: benchmarkId
in: path
required: true
schema:
type: integer
requestBody:
content:
application/json:
schema:
type: object
responses:
'201':
description: 'Created successfully'
'401':
description: Unauthorized
'500':
description: 'Internal server error'
/quantitative-risks/assessment-mode:
get:
tags:
- 'Quantitative Risks'
summary: 'Get Risk Assessment Mode'
operationId: getRiskAssessmentMode
security:
-
bearerAuth: []
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
put:
tags:
- 'Quantitative Risks'
summary: 'Update Risk Assessment Mode'
operationId: updateRiskAssessmentMode
security:
-
bearerAuth: []
requestBody:
content:
application/json:
schema:
type: object
responses:
'200':
description: Success
'401':
description: Unauthorized
'500':
description: 'Internal server error'
'/custom-fields/definitions/by-id/{id}':
get:
summary: 'Get Custom Field Definition By Id'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- 'Custom Fields'
operationId: getCustomFieldDefinitionById
security:
-
bearerAuth: []
'/custom-fields/definitions/{entityType}':
get:
summary: 'List Custom Field Definitions'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- 'Custom Fields'
operationId: listCustomFieldDefinitions
security:
-
bearerAuth: []
/custom-fields/definitions:
post:
summary: 'Create Custom Field Definition'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- 'Custom Fields'
operationId: createCustomFieldDefinition
security:
-
bearerAuth: []
description: 'Requires role: Admin'
'/custom-fields/definitions/{id}':
patch:
summary: 'Update Custom Field Definition'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- 'Custom Fields'
operationId: updateCustomFieldDefinition
security:
-
bearerAuth: []
description: 'Requires role: Admin'
delete:
summary: 'Delete Custom Field Definition'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- 'Custom Fields'
operationId: deleteCustomFieldDefinition
security:
-
bearerAuth: []
description: 'Requires role: Admin'
'/custom-fields/values/{entityType}/{entityId}/missing-required':
get:
summary: 'Get Missing Required Custom Fields'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- 'Custom Fields'
operationId: getMissingRequiredCustomFields
security:
-
bearerAuth: []
'/custom-fields/values/{entityType}/{entityId}':
get:
summary: 'Get Custom Field Values For Entity'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- 'Custom Fields'
operationId: getCustomFieldValuesForEntity
security:
-
bearerAuth: []
/custom-fields/values:
put:
summary: 'Set Custom Field Value'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- 'Custom Fields'
operationId: setCustomFieldValue
security:
-
bearerAuth: []
'/custom-fields/values/{definitionId}/{entityId}':
delete:
summary: 'Delete Custom Field Value'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- 'Custom Fields'
operationId: deleteCustomFieldValue
security:
-
bearerAuth: []
/super-admin/organizations:
get:
tags:
- 'Super Admin'
summary: 'List Organizations'
operationId: listOrganizations
security:
-
bearerAuth: []
description: 'Requires role: Super Admin'
responses:
'200':
description: Success
'401':
description: Unauthorized
'403':
description: 'Forbidden - insufficient role'
'500':
description: 'Internal server error'
post:
tags:
- 'Super Admin'
summary: 'Create Org'
operationId: createOrg
security:
-
bearerAuth: []
description: 'Requires role: Super Admin'
requestBody:
content:
application/json:
schema:
type: object
responses:
'201':
description: 'Created successfully'
'401':
description: Unauthorized
'403':
description: 'Forbidden - insufficient role'
'500':
description: 'Internal server error'
'/super-admin/organizations/{id}':
delete:
tags:
- 'Super Admin'
summary: 'Delete Org'
operationId: deleteOrg
security:
-
bearerAuth: []
description: 'Requires role: Super Admin'
parameters:
-
name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: 'Deleted successfully'
'401':
description: Unauthorized
'403':
description: 'Forbidden - insufficient role'
'500':
description: 'Internal server error'
patch:
tags:
- 'Super Admin'
summary: 'Update Org'
operationId: updateOrg
security:
-
bearerAuth: []
description: 'Requires role: Super Admin'
parameters:
-
name: id
in: path
required: true
schema:
type: integer
requestBody:
content:
application/json:
schema:
type: object
responses:
'200':
description: Success
'401':
description: Unauthorized
'403':
description: 'Forbidden - insufficient role'
'500':
description: 'Internal server error'
/super-admin/users/count:
get:
tags:
- 'Super Admin'
summary: 'Get User Count'
operationId: getUserCount
security:
-
bearerAuth: []
description: 'Requires role: Super Admin'
responses:
'200':
description: Success
'401':
description: Unauthorized
'403':
description: 'Forbidden - insufficient role'
'500':
description: 'Internal server error'
/super-admin/users:
get:
tags:
- 'Super Admin'
summary: 'List All Users'
operationId: listAllUsers
security:
-
bearerAuth: []
description: 'Requires role: Super Admin'
responses:
'200':
description: Success
'401':
description: Unauthorized
'403':
description: 'Forbidden - insufficient role'
'500':
description: 'Internal server error'
'/super-admin/organizations/{id}/users':
get:
tags:
- 'Super Admin'
summary: 'List Org Users'
operationId: listOrgUsers
security:
-
bearerAuth: []
description: 'Requires role: Super Admin'
parameters:
-
name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: Success
'401':
description: Unauthorized
'403':
description: 'Forbidden - insufficient role'
'500':
description: 'Internal server error'
'/super-admin/organizations/{id}/invite':
post:
tags:
- 'Super Admin'
summary: 'Invite User To Org'
operationId: inviteUserToOrg
security:
-
bearerAuth: []
description: 'Requires role: Super Admin'
parameters:
-
name: id
in: path
required: true
schema:
type: integer
requestBody:
content:
application/json:
schema:
type: object
responses:
'201':
description: 'Created successfully'
'401':
description: Unauthorized
'403':
description: 'Forbidden - insufficient role'
'500':
description: 'Internal server error'
'/super-admin/users/{id}':
patch:
summary: 'Update User'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- 'Super Admin'
operationId: updateUser
security:
-
bearerAuth: []
description: 'Requires role: Super Admin'
delete:
tags:
- 'Super Admin'
summary: 'Remove User'
operationId: removeUser
security:
-
bearerAuth: []
description: 'Requires role: Super Admin'
parameters:
-
name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: 'Deleted successfully'
'401':
description: Unauthorized
'403':
description: 'Forbidden - insufficient role'
'500':
description: 'Internal server error'
/internal/ai-gateway/notify:
post:
tags:
- Internal
summary: 'AI Gateway notification callback'
operationId: internal_anonymous
requestBody:
content:
application/json:
schema:
type: object
responses:
'201':
description: 'Created successfully'
'500':
description: 'Internal server error'
/ssoConfig/feature:
get:
summary: 'Get S S O Feature Status'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- 'SSO Config'
operationId: getSSOFeatureStatus
/ssoConfig/check-status:
get:
summary: 'Check S S O Status'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- 'SSO Config'
operationId: checkSSOStatus
/ssoConfig/orgs:
get:
summary: 'List S S O Orgs'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- 'SSO Config'
operationId: listSSOOrgs
/ssoConfig:
get:
summary: 'Get S S O Config'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- 'SSO Config'
operationId: getSSOConfig
security:
-
bearerAuth: []
description: 'Requires role: Admin'
put:
summary: 'Save S S O Config'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- 'SSO Config'
operationId: saveSSOConfig
security:
-
bearerAuth: []
description: 'Requires role: Admin'
/ssoConfig/enable:
put:
summary: 'Enable S S O'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- 'SSO Config'
operationId: enableSSO
security:
-
bearerAuth: []
description: 'Requires role: Admin'
/ssoConfig/disable:
put:
summary: 'Disable S S O'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- 'SSO Config'
operationId: disableSSO
security:
-
bearerAuth: []
description: 'Requires role: Admin'
/ai-trust-index/apps:
get:
summary: 'Get Apps'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- 'Ai Trust Index'
operationId: getApps
security:
-
bearerAuth: []
'/ai-trust-index/apps/{slug}':
get:
summary: 'Get App'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- 'Ai Trust Index'
operationId: getApp
security:
-
bearerAuth: []
/ai-trust-index/tracked:
get:
summary: 'Get Tracked'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- 'Ai Trust Index'
operationId: getTracked
security:
-
bearerAuth: []
post:
summary: 'Track App'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- 'Ai Trust Index'
operationId: trackApp
security:
-
bearerAuth: []
/ai-trust-index/tracked/bulk:
post:
summary: 'Track Apps Bulk'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- 'Ai Trust Index'
operationId: trackAppsBulk
security:
-
bearerAuth: []
'/ai-trust-index/tracked/{slug}':
delete:
summary: 'Untrack App'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- 'Ai Trust Index'
operationId: untrackApp
security:
-
bearerAuth: []
/ai-trust-index/settings:
get:
summary: 'Get Settings'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- 'Ai Trust Index'
operationId: ai_trust_index_getSettings
security:
-
bearerAuth: []
put:
summary: 'Update Settings'
responses:
'200':
description: Success
'500':
description: 'Internal server error'
tags:
- 'Ai Trust Index'
operationId: ai_trust_index_updateSettings
security:
-
bearerAuth: []
/health:
get:
tags:
- System
summary: 'Health Check'
operationId: healthCheck
responses:
'200':
description: Success
'500':
description: 'Internal server error'