Skip to content

Get a framework breakdown

GET
/compliance/frameworks/{code}
curl --request GET \
--url https://api.vendorica.com/v1/compliance/frameworks/example \
--header 'Authorization: Bearer <token>'

The per-category and per-citation breakdown for one framework, addressed by CODE (dora, nis2, iso27001-2022, soc2, …) rather than by the per-environment uuid. byCitation names the controls mapped to each article, which is what turns “we are 78% ready” into a list of what is missing. An unknown code is a 404.

code
required
string
>= 1 characters <= 50 characters

Success

Media typeapplication/json
object
success
required
boolean
data
required
object
overall
required
object
frameworkId
required
string format: uuid
code
required
string
name
required
string
controlsTotal
required
integer
controlsOk
required
integer
controlsNeedsEvidence
required
integer
controlsExpiringSoon
required
integer
controlsExpired
required
integer
controlsDeactivated
required
integer
readinessPct
required
number | null
byCategory
required
Array<object>
object
category
required
string
controlsTotal
required
integer
controlsOk
required
integer
readinessPct
required
number | null
byCitation
required
Array<object>
object
citationId
required
string format: uuid
articleRef
required
string
title
required
string
mappedControls
required
Array<object>
object
controlId
required
string format: uuid
displayId
required
string
name
required
string
status
required
string
timestamp
required
string format: date-time
requestId
string
message
string
Example
{
"success": true,
"data": {
"overall": {
"frameworkId": "30f00833-3adc-4523-89bc-b160f80b406c",
"code": "string",
"name": "string",
"controlsTotal": 1,
"controlsOk": 1,
"controlsNeedsEvidence": 1,
"controlsExpiringSoon": 1,
"controlsExpired": 1,
"controlsDeactivated": 1,
"readinessPct": 1
},
"byCategory": [
{
"category": "string",
"controlsTotal": 1,
"controlsOk": 1,
"readinessPct": 1
}
],
"byCitation": [
{
"citationId": "296381d3-f8a5-4c03-8c4f-d40085aac24c",
"articleRef": "string",
"title": "string",
"mappedControls": [
{
"controlId": "22050386-11e4-48cc-89c3-5ddd078cbc9b",
"displayId": "string",
"name": "string",
"status": "string"
}
]
}
]
},
"timestamp": "2026-08-19T09:41:12.004Z",
"requestId": "req_01J5X8ZC3K4T7Q9M2W6B0N1V4H",
"message": "string"
}

Validation error

Media typeapplication/json
object
success
required
boolean
error
required
string
code
required
string
details
timestamp
required
string format: date-time
requestId
string
Example
{
"success": false,
"error": "Bad request",
"code": "BAD_REQUEST",
"timestamp": "2026-08-19T09:41:12.004Z",
"requestId": "req_01J5X8ZC3K4T7Q9M2W6B0N1V4H"
}

Unauthorized

Media typeapplication/json
object
success
required
boolean
error
required
string
code
required
string
details
timestamp
required
string format: date-time
requestId
string
Example
{
"success": false,
"error": "Unauthorized",
"code": "UNAUTHORIZED",
"timestamp": "2026-08-19T09:41:12.004Z",
"requestId": "req_01J5X8ZC3K4T7Q9M2W6B0N1V4H"
}

Forbidden — missing scope

Media typeapplication/json
object
success
required
boolean
error
required
string
code
required
string
details
timestamp
required
string format: date-time
requestId
string
Example
{
"success": false,
"error": "Forbidden",
"code": "FORBIDDEN",
"timestamp": "2026-08-19T09:41:12.004Z",
"requestId": "req_01J5X8ZC3K4T7Q9M2W6B0N1V4H"
}

No framework with that code

Media typeapplication/json
object
success
required
boolean
error
required
string
code
required
string
details
timestamp
required
string format: date-time
requestId
string
Example
{
"success": false,
"error": "Resource not found",
"code": "NOT_FOUND",
"timestamp": "2026-08-19T09:41:12.004Z",
"requestId": "req_01J5X8ZC3K4T7Q9M2W6B0N1V4H"
}

Rate limit exceeded

Media typeapplication/json
object
success
required
boolean
error
required
string
code
required
string
details
timestamp
required
string format: date-time
requestId
string
Example
{
"success": false,
"error": "Too many requests",
"code": "TOO_MANY_REQUESTS",
"timestamp": "2026-08-19T09:41:12.004Z",
"requestId": "req_01J5X8ZC3K4T7Q9M2W6B0N1V4H"
}