Every API here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for apis
7 MCP tools reach this
find_apisBrowse and filter every API in the catalog.
get_api_artifactsOne API's artifacts, grouped by type.
get_openapiThe primary OpenAPI for this API.
find_similar_apisAPIs that look like this one.
apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
resolveTurn a domain, URL or GitHub org into the provider it belongs to.
find_cohortsEvery scored population of providers in the catalog.
All 92 tools →
Call it yourself
curl for this page
This API
curl "https://apis.io/api/v1/apis/drata-risks-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we
store it to create your key and to recognise you if you sign in with another
provider. See our Privacy Policy and
Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: Drata Risks API
version: V2
contact: {}
description: 'Operations tagged Risks across 2 of this provider''s published API definitions: drata-api-v2-openapi.json, drata-api-v2-openapi.yml. Each path carries the servers of the definition it was published in.'
servers:
- url: https://public-api.drata.com/public/v2
- url: https://public-api.eu.drata.com/public/v2
- url: https://public-api.apac.drata.com/public/v2
tags:
- name: Risks
description: Risks are potential events that could impact the security, reputation, and financial health of a company.
paths:
/risk-registers/{riskRegisterId}/risks:
get:
description: 'Find Risks matching the provided filters.
🔒 Requires **Risk Management: List Risks** permission.'
operationId: RiskManagementPublicV2Controller_listRisks
parameters:
- name: riskRegisterId
required: true
in: path
description: The Risk Register ID
schema:
example: 1
type: number
- name: cursor
required: false
in: query
description: This parameter is used to paginate through results. No value is needed for the first request. If there are additional results, the response will contain a `pagination.cursor` value that can be used in the subsequent request to retrieve the next page of results
schema:
type: string
- name: size
required: false
in: query
description: Number of results to return
schema:
minimum: 1
maximum: 500
default: 50
type: number
- name: sort
required: false
in: query
description: Which field to sort by
schema:
$ref: '#/components/schemas/SortTypeLimitedEnum'
- name: sortDir
required: false
in: query
description: The direction to sort the data
schema:
$ref: '#/components/schemas/SortDirectionEnum'
- name: includeTotalCount
required: false
in: query
description: Include total count of all matching records in response. Only honored on first page (when cursor is null).
schema:
default: false
example: false
type: boolean
- name: expand[]
required: false
in: query
description: List of subcollections and sub-objects to expand
schema:
type: array
items:
$ref: '#/components/schemas/RiskExpandV2Enum'
- name: title
required: false
in: query
description: Filter Risks by title. Performs a case-insensitive partial match on the Risk title field.
schema:
example: Activity Log Evaluation - Unauthorized System Access
type: string
- name: status
required: false
in: query
description: Filter Risks by status
schema:
$ref: '#/components/schemas/RiskStatusTypeEnum'
- name: treatmentPlan
required: false
in: query
description: 'Filter Risks by their treatment strategy. Treatment plans define how the organization addresses each Risk: ACCEPT (acknowledge and monitor), AVOID (eliminate the Risk source), MITIGATE (reduce impact/likelihood), TRANSFER (shift to third party via insurance/contracts), or UNTREATED (no action taken yet).'
schema:
$ref: '#/components/schemas/RiskTreatmentPlanEnum'
- name: minScore
required: false
in: query
description: Filter Risks by minimum calculated Risk score (impact × likelihood). Score range depends on organization settings (1-25 with thresholds 1-4=low, 5-9=medium, 10-16=high, 17-25=critical)
schema:
minimum: 1
maximum: 25
example: 5
type:
- number
- 'null'
- name: maxScore
required: false
in: query
description: Filter Risks by maximum calculated Risk score (impact × likelihood). Score range depends on organization settings (1-25 with thresholds 1-4=low, 5-9=medium, 10-16=high, 17-25=critical)
schema:
minimum: 1
maximum: 25
example: 16
type:
- number
- 'null'
- name: vendorId
required: false
in: query
description: Filter Risks by vendor/third-party provider. Specify the unique vendor identifier to return only Risks associated with that specific vendor, such as Risks related to vendor security assessments, data processing agreements, or third-party service dependencies.
schema:
example: 1
type:
- number
- 'null'
responses:
'200':
description: ''
content:
application/json:
schema:
$ref: '#/components/schemas/RisksResponsePublicV2Dto'
'400':
description: Malformed data and/or validation errors
'401':
description: Invalid Authorization
content:
application/json:
schema:
$ref: '#/components/schemas/ExceptionResponseDto'
'403':
description: You are not allowed to perform this action
content:
application/json:
schema:
$ref: '#/components/schemas/ExceptionResponseDto'
'412':
description: You must accept the Drata terms and conditions to use the API
content:
application/json:
schema:
$ref: '#/components/schemas/ExceptionResponseDto'
'500':
description: Internal server error
content:
application/json:
schema:
$ref: '#/components/schemas/ExceptionResponseDto'
security:
- bearer: []
summary: List Risks
tags:
- Risks
x-drata-permissions:
- risk-management-get
x-product-area:
- RISK_MANAGEMENT
post:
description: 'Create a new custom Risk in the Risk Register.
🔒 Requires **Risk Management: Create Risk** permission.'
operationId: RiskManagementPublicV2Controller_createRisk
parameters:
- name: riskRegisterId
required: true
in: path
description: The Risk Register ID
schema:
example: 1
type: number
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/RiskCreateRequestPublicV2Dto'
responses:
'201':
description: Created
content:
application/json:
schema:
$ref: '#/components/schemas/RiskResponsePublicV2Dto'
'400':
description: Malformed data and/or validation errors
content:
application/json:
schema:
$ref: '#/components/schemas/ExceptionResponsePublicV2Dto'
'401':
description: Invalid Authorization
content:
application/json:
schema:
$ref: '#/components/schemas/ExceptionResponseDto'
'403':
description: You are not allowed to perform this action
content:
application/json:
schema:
$ref: '#/components/schemas/ExceptionResponseDto'
'409':
description: There is a conflict in the business rules with this request
content:
application/json:
schema:
$ref: '#/components/schemas/ExceptionResponsePublicV2Dto'
'412':
description: You must accept the Drata terms and conditions to use the API
content:
application/json:
schema:
$ref: '#/components/schemas/ExceptionResponseDto'
'422':
description: Unprocessable Entity
content:
application/json:
schema:
$ref: '#/components/schemas/ExceptionResponsePublicV2Dto'
'500':
description: Internal server error
content:
application/json:
schema:
$ref: '#/components/schemas/ExceptionResponseDto'
security:
- bearer: []
summary: Create Risk
tags:
- Risks
x-drata-permissions:
- risk-management-post
x-product-area:
- RISK_MANAGEMENT
servers:
- url: https://public-api.drata.com/public/v2
- url: https://public-api.eu.drata.com/public/v2
- url: https://public-api.apac.drata.com/public/v2
/risk-registers/{riskRegisterId}/risks-search:
get:
description: 'Search Risks in a Risk Register with rich filtering, sorting, faceting, and expand. Supports cursor-based pagination.
🔒 Requires **Risk Management: List Risks** permission.'
operationId: RiskManagementPublicV2Controller_searchRisks
parameters:
- name: riskRegisterId
required: true
in: path
description: The Risk Register ID
schema:
example: 1
type: number
- name: cursor
required: false
in: query
description: This parameter is used to paginate through results. No value is needed for the first request. If there are additional results, the response will contain a `pagination.cursor` value that can be used in the subsequent request to retrieve the next page of results.
schema:
type: string
- name: size
required: false
in: query
description: Number of results to return.
schema:
minimum: 1
maximum: 500
default: 50
type: number
- name: sort
required: false
in: query
description: Which field to sort by. Highest residual risk first (with `sortDir=DESC`, the default) is the natural default view for a risk register.
schema:
$ref: '#/components/schemas/RiskSortEnum'
- name: sortDir
required: false
in: query
description: The direction to sort the data.
schema:
$ref: '#/components/schemas/SortDirectionEnum'
- name: includeTotalCount
required: false
in: query
description: Include total count of all matching records in response. Only honored on first page (when cursor is null).
schema:
default: false
example: false
type: boolean
- name: expand[]
required: false
in: query
description: List of subcollections and sub-objects to expand.
schema:
type: array
items:
$ref: '#/components/schemas/RiskSearchExpandEnum'
- name: facets[]
required: false
in: query
description: Filter dimensions for which to return value counts in the response. Only honored on the first page (when `cursor` is null). Each requested facet adds one terms aggregation to the search query. Bounded enum facets (`status`, `treatmentPlan`, `type`) are enriched with zero-count entries; unbounded facets (`categories`, `controls`, `ownerEmails`, `reviewerEmails`, `vendorNames`) return only values present in the result set.
schema:
type: array
items:
$ref: '#/components/schemas/RiskSearchInRegisterFacetEnum'
- name: q
required: false
in: query
description: Free-text search across `title`, `description`, `riskId`, and `vendorName`. Fuzzy, prefix-aware, and relevance-ranked.
schema:
maxLength: 191
example: unauthorized access
type: string
- name: status[]
required: false
in: query
description: Filter Risks by one or more workflow statuses.
schema:
type: array
items:
$ref: '#/components/schemas/RiskStatusTypeEnum'
- name: treatmentPlan[]
required: false
in: query
description: Filter Risks by treatment plan.
schema:
type: array
items:
$ref: '#/components/schemas/RiskTreatmentPlanEnum'
- name: type[]
required: false
in: query
description: Filter Risks by version type.
schema:
type: array
items:
$ref: '#/components/schemas/RiskVersionTypeEnum'
- name: inherentScoreGte
required: false
in: query
description: Filter Risks by minimum inherent (pre-mitigation) score (inclusive).
schema:
type: number
- name: inherentScoreLte
required: false
in: query
description: Filter Risks by maximum inherent (pre-mitigation) score (inclusive).
schema:
type: number
- name: residualScoreGte
required: false
in: query
description: Filter Risks by minimum residual (post-mitigation) score (inclusive).
schema:
type: number
- name: residualScoreLte
required: false
in: query
description: Filter Risks by maximum residual (post-mitigation) score (inclusive).
schema:
type: number
- name: anticipatedCompletionDateGte
required: false
in: query
description: Filter Risks with anticipated completion date on or after this ISO 8601 timestamp.
schema:
format: date-time
type: string
- name: anticipatedCompletionDateLte
required: false
in: query
description: Filter Risks with anticipated completion date on or before this ISO 8601 timestamp.
schema:
format: date-time
type: string
- name: completedDateGte
required: false
in: query
description: Filter Risks with actual completion date on or after this ISO 8601 timestamp.
schema:
format: date-time
type: string
- name: completedDateLte
required: false
in: query
description: Filter Risks with actual completion date on or before this ISO 8601 timestamp.
schema:
format: date-time
type: string
- name: categories[]
required: false
in: query
description: Filter Risks by exact category name membership.
schema:
type: array
items:
type: string
- name: controls[]
required: false
in: query
description: Filter Risks by exact control code membership (e.g. `AC-04`).
schema:
type: array
items:
type: string
- name: ownerEmails[]
required: false
in: query
description: Filter Risks by owner email membership.
schema:
type: array
items:
type: string
- name: reviewerEmails[]
required: false
in: query
description: Filter Risks by reviewer email membership.
schema:
type: array
items:
type: string
- name: vendorNames[]
required: false
in: query
description: Filter Risks by exact vendor name membership. Each Risk is indexed with a single vendor name (the first associated vendor), so a Risk matches if that vendor name is in the supplied list.
schema:
type: array
items:
type: string
- name: customFields
required: false
in: query
description: Filter Risks by Custom Field equality. Repeat the parameter with bracketed indices, e.g. `customFields[0][customFieldId]=42&customFields[0][value]=Financial` (or `customFields[0][name]=Category` in place of `customFieldId`). Multiple entries are AND-ed.
schema:
type: array
items:
$ref: '#/components/schemas/CustomFieldFilterPublicV2Dto'
- name: customRangeFields
required: false
in: query
description: Filter Risks by Custom Field range. Repeat the parameter with bracketed indices, e.g. `customRangeFields[0][customFieldId]=99&customRangeFields[0][gte]=5&customRangeFields[0][lte]=10` (or `customRangeFields[0][name]=Score` in place of `customFieldId`). At least one of `gte` / `lte` must be supplied per entry. Multiple entries are AND-ed.
schema:
type: array
items:
$ref: '#/components/schemas/CustomRangeFieldFilterPublicV2Dto'
responses:
'200':
description: ''
content:
application/json:
schema:
$ref: '#/components/schemas/RiskSearchResponsePublicV2Dto'
'400':
description: Malformed data and/or validation errors
content:
application/json:
schema:
$ref: '#/components/schemas/ExceptionResponsePublicV2Dto'
'401':
description: Invalid Authorization
content:
application/json:
schema:
$ref: '#/components/schemas/ExceptionResponseDto'
'403':
description: You are not allowed to perform this action
content:
application/json:
schema:
$ref: '#/components/schemas/ExceptionResponseDto'
'404':
description: The specified Risk Register does not exist or is not accessible to the caller.
content:
application/json:
schema:
$ref: '#/components/schemas/ExceptionResponsePublicV2Dto'
'412':
description: You must accept the Drata terms and conditions to use the API
content:
application/json:
schema:
$ref: '#/components/schemas/ExceptionResponseDto'
'500':
description: Internal server error
content:
application/json:
schema:
$ref: '#/components/schemas/ExceptionResponseDto'
security:
- bearer: []
summary: Search Risks by Risk Register
tags:
- Risks
x-drata-permissions:
- risk-management-get
x-product-area:
- RISK_MANAGEMENT
servers:
- url: https://public-api.drata.com/public/v2
- url: https://public-api.eu.drata.com/public/v2
- url: https://public-api.apac.drata.com/public/v2
/risks-search:
get:
description: 'Search Risks across every Risk Register the caller can access, with rich filtering, sorting, faceting, and expand.
🔒 Requires **Risk Management: List Risks** permission.'
operationId: RiskManagementPublicV2Controller_searchRisksAcrossRegisters
parameters:
- name: cursor
required: false
in: query
description: This parameter is used to paginate through results. No value is needed for the first request. If there are additional results, the response will contain a `pagination.cursor` value that can be used in the subsequent request to retrieve the next page of results.
schema:
type: string
- name: size
required: false
in: query
description: Number of results to return.
schema:
minimum: 1
maximum: 500
default: 50
type: number
- name: sort
required: false
in: query
description: Which field to sort by. Highest residual risk first (with `sortDir=DESC`, the default) is the natural default view for a risk register.
schema:
$ref: '#/components/schemas/RiskSortEnum'
- name: sortDir
required: false
in: query
description: The direction to sort the data.
schema:
$ref: '#/components/schemas/SortDirectionEnum'
- name: includeTotalCount
required: false
in: query
description: Include total count of all matching records in response. Only honored on first page (when cursor is null).
schema:
default: false
example: false
type: boolean
- name: expand[]
required: false
in: query
description: List of subcollections and sub-objects to expand.
schema:
type: array
items:
$ref: '#/components/schemas/RiskSearchExpandEnum'
- name: facets[]
required: false
in: query
description: Filter dimensions for which to return value counts in the response. Only honored on the first page (when `cursor` is null). Each requested facet adds one terms aggregation to the search query. Bounded enum facets (`status`, `treatmentPlan`, `type`) are enriched with zero-count entries; unbounded facets (`categories`, `controls`, `ownerEmails`, `reviewerEmails`, `vendorNames`, `riskRegisterId`) return only values present in the result set.
schema:
type: array
items:
$ref: '#/components/schemas/RiskSearchFacetEnum'
- name: q
required: false
in: query
description: Free-text search across `title`, `description`, `riskId`, and `vendorName`. Fuzzy, prefix-aware, and relevance-ranked.
schema:
maxLength: 191
example: unauthorized access
type: string
- name: status[]
required: false
in: query
description: Filter Risks by one or more workflow statuses.
schema:
type: array
items:
$ref: '#/components/schemas/RiskStatusTypeEnum'
- name: treatmentPlan[]
required: false
in: query
description: Filter Risks by treatment plan.
schema:
type: array
items:
$ref: '#/components/schemas/RiskTreatmentPlanEnum'
- name: type[]
required: false
in: query
description: Filter Risks by version type.
schema:
type: array
items:
$ref: '#/components/schemas/RiskVersionTypeEnum'
- name: inherentScoreGte
required: false
in: query
description: Filter Risks by minimum inherent (pre-mitigation) score (inclusive).
schema:
type: number
- name: inherentScoreLte
required: false
in: query
description: Filter Risks by maximum inherent (pre-mitigation) score (inclusive).
schema:
type: number
- name: residualScoreGte
required: false
in: query
description: Filter Risks by minimum residual (post-mitigation) score (inclusive).
schema:
type: number
- name: residualScoreLte
required: false
in: query
description: Filter Risks by maximum residual (post-mitigation) score (inclusive).
schema:
type: number
- name: anticipatedCompletionDateGte
required: false
in: query
description: Filter Risks with anticipated completion date on or after this ISO 8601 timestamp.
schema:
format: date-time
type: string
- name: anticipatedCompletionDateLte
required: false
in: query
description: Filter Risks with anticipated completion date on or before this ISO 8601 timestamp.
schema:
format: date-time
type: string
- name: completedDateGte
required: false
in: query
description: Filter Risks with actual completion date on or after this ISO 8601 timestamp.
schema:
format: date-time
type: string
- name: completedDateLte
required: false
in: query
description: Filter Risks with actual completion date on or before this ISO 8601 timestamp.
schema:
format: date-time
type: string
- name: categories[]
required: false
in: query
description: Filter Risks by exact category name membership.
schema:
type: array
items:
type: string
- name: controls[]
required: false
in: query
description: Filter Risks by exact control code membership (e.g. `AC-04`).
schema:
type: array
items:
type: string
- name: ownerEmails[]
required: false
in: query
description: Filter Risks by owner email membership.
schema:
type: array
items:
type: string
- name: reviewerEmails[]
required: false
in: query
description: Filter Risks by reviewer email membership.
schema:
type: array
items:
type: string
- name: vendorNames[]
required: false
in: query
description: Filter Risks by exact vendor name membership. Each Risk is indexed with a single vendor name (the first associated vendor), so a Risk matches if that vendor name is in the supplied list.
schema:
type: array
items:
type: string
- name: customFields
required: false
in: query
description: Filter Risks by Custom Field equality. Repeat the parameter with bracketed indices, e.g. `customFields[0][customFieldId]=42&customFields[0][value]=Financial` (or `customFields[0][name]=Category` in place of `customFieldId`). Multiple entries are AND-ed.
schema:
type: array
items:
$ref: '#/components/schemas/CustomFieldFilterPublicV2Dto'
- name: customRangeFields
required: false
in: query
description: Filter Risks by Custom Field range. Repeat the parameter with bracketed indices, e.g. `customRangeFields[0][customFieldId]=99&customRangeFields[0][gte]=5&customRangeFields[0][lte]=10` (or `customRangeFields[0][name]=Score` in place of `customFieldId`). At least one of `gte` / `lte` must be supplied per entry. Multiple entries are AND-ed.
schema:
type: array
items:
$ref: '#/components/schemas/CustomRangeFieldFilterPublicV2Dto'
- name: riskRegisterId[]
required: false
in: query
description: Narrow results to Risks in this subset of Risk Registers. Each ID must be a Risk Register the caller can access; unknown or inaccessible IDs are silently filtered out. Omit to search every Risk Register accessible to the caller.
schema:
type: array
items:
type: number
minimum: 1
responses:
'200':
description: ''
content:
application/json:
schema:
$ref: '#/components/schemas/RiskSearchResponsePublicV2Dto'
'400':
description: Malformed data and/or validation errors
content:
application/json:
schema:
$ref: '#/components/schemas/ExceptionResponsePublicV2Dto'
'401':
description: Invalid Authorization
content:
application/json:
schema:
$ref: '#/components/schemas/ExceptionResponseDto'
'403':
description: You are not allowed to perform this action
content:
application/json:
schema:
$ref: '#/components/schemas/ExceptionResponseDto'
'412':
description: You must accept the Drata terms and conditions to use the API
content:
application/json:
schema:
$ref: '#/components/schemas/ExceptionResponseDto'
'500':
description: Internal server error
content:
application/json:
schema:
$ref: '#/components/schemas/ExceptionResponseDto'
security:
- bearer: []
summary: Search Risks
tags:
- Risks
x-drata-permissions:
- risk-management-get
x-product-area:
- RISK_MANAGEMENT
servers:
- url: https://public-api.drata.com/public/v2
- url: https://public-api.eu.drata.com/public/v2
- url: https://public-api.apac.drata.com/public/v2
/risk-registers/{riskRegisterId}/risks/{riskId}:
get:
description: 'Get detail for a Risk item.
🔒 Requires **Risk Management: Get Risk** permission.'
operationId: RiskManagementPublicV2Controller_getRisk
parameters:
- name: riskRegisterId
required: true
in: path
description: The Risk Register ID
schema:
example: 1
type: number
- name: riskId
required: true
in: path
description: An integer Risk ID or string risk identifier (e.g., "RISK-001")
schema:
oneOf:
- type: number
description: Risk ID
example: 123
- type: string
description: Risk identifier
example: RISK-001
- name: expand[]
required: false
in: query
description: List of subcollections and sub-objects to expand
schema:
type: array
items:
$ref: '#/components/schemas/RiskExpandEnum'
responses:
'200':
description: Successful
content:
application/json:
schema:
$ref: '#/components/schemas/RiskResponsePublicV2Dto'
'400':
description: Malformed data and/or validation errors
'401':
description: Invalid Authorization
content:
application/json:
schema:
$ref: '#/components/schemas/ExceptionResponseDto'
'403':
description: You are not allowed to perform this action
content:
application/json:
schema:
$ref: '#/components/schemas/ExceptionResponseDto'
'404':
description: Not Found
'412':
description: You must accept the Drata terms and conditions to use the API
content:
application/json:
schema:
$ref: '#/components/schemas/ExceptionResponseDto'
'500':
description: Internal server error
content:
application/json:
schema:
$ref: '#/components/schemas/ExceptionResponseDto'
security:
- bearer: []
summary: Get Risk
tags:
- Risks
x-drata-permissions:
- risk-management-get-risk-details
x-product-area:
- RISK_MANAGEMENT
put:
description: 'Update an existing Risk.
🔒 Requires **Risk Management: Update Risk** permission.'
operationId: RiskManagementPublicV2Controller_updateRisk
parameters:
- name: riskRegisterId
required: true
in: path
description: The Risk Register ID
schema:
example: 1
type: number
- name: riskId
required: true
in: path
description: An integer Risk ID or string risk identifier (e.g., "RISK-001")
schema:
oneOf:
- type: number
description: Risk ID
example: 123
- type: string
description: Risk identifier
example: RISK-001
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/RiskUpdateRequestPublicV2Dto'
responses:
'200':
description: Successful
content:
application/json:
schema:
$ref: '#/components/schemas/RiskResponsePublicV2Dto'
'400':
description: Malformed data and/or validation errors
content:
application/json:
schema:
$ref: '#/components/schemas/ExceptionResponsePublicV2Dto'
'401':
description: Invalid Authorization
content:
application/json:
schema:
$ref: '#/components/schemas/ExceptionResponseDto'
'403':
description: You are not allowed to perform this action
content:
application/json:
schema:
$ref: '#/components/schemas/ExceptionResponseDto'
'404':
description: Not Found
content:
application/json:
schema:
$ref: '#/components/schemas/ExceptionResponsePublicV2Dto'
'412':
description: You must accept the Drata terms and conditions to use the API
content:
application/json:
schema:
# --- truncated at 32 KB (91 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/drata/refs/heads/main/openapi/drata-risks-api-openapi.yml