Skip to content

List evidence (cursor-paginated)

GET
/evidence
curl --request GET \
--url 'https://api.vendorica.com/v1/evidence?limit=50&testType=manual&status=pass' \
--header 'Authorization: Bearer <token>'

Cursor-paginated read of the test_evidence feed. Pass ?cursor=<opaque>&limit=<n> to advance; the response carries cursor.nextCursor (null on the last page) plus cursor.hasMore. The legacy ?page= parameter returns 400.

cursor
string
>= 1 characters
limit
integer
default: 50 >= 1 <= 500
controlId
string format: uuid
testType
string
Allowed values: manual attestation automated semi_auto
status
string
Allowed values: pass fail warn error
isSensitive
Any of:
boolean
includeSuperseded
Any of:
boolean
collectedFrom
string format: date-time
collectedTo
string format: date-time
from
string format: date-time
to
string format: date-time

Success

Media typeapplication/json
object
success
required
boolean
data
required
Array<object>
object
id
required
string format: uuid
organizationId
required
string format: uuid
controlId
required
string format: uuid
controlDisplayId
required
string | null
controlName
required
string | null
testType
required
string
source
required
string
status
required
string
summary
required
string | null
isSensitive
required
boolean
collectedAt
required
string format: date-time
expiresAt
required
string | null format: date-time
supersededBy
required
string | null format: uuid
key
additional properties
timestamp
required
string format: date-time
requestId
string
message
string
cursor
required
object
nextCursor
required
string | null
hasMore
required
boolean
limit
required
integer
Example
{
"success": true,
"data": [
{
"id": "336749c2-ab99-4940-8502-c479805b50c7",
"organizationId": "65cc03cb-0929-456b-850d-52b81ff93df4",
"controlId": "2af92ac9-713e-4d91-872d-4cd68e4fee96",
"controlDisplayId": "string",
"controlName": "string",
"testType": "string",
"source": "string",
"status": "string",
"summary": "string",
"isSensitive": true,
"collectedAt": "2026-08-19T09:41:12.004Z",
"expiresAt": "2026-08-19T09:41:12.004Z",
"supersededBy": "1a80c892-48bb-4ab0-8286-e7c9575ee7b7"
}
],
"timestamp": "2026-08-19T09:41:12.004Z",
"requestId": "req_01J5X8ZC3K4T7Q9M2W6B0N1V4H",
"message": "string",
"cursor": {
"nextCursor": "string",
"hasMore": true,
"limit": 1
}
}

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"
}

Not found

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"
}