API documentation

Tenant API v1 for systems that read your organisation's registers and send evidence. This page is generated from the OpenAPI 3.1 specification.

API version: 1.0.0

Download the OpenAPI specification (YAML)

The specification and a guide with examples are also available in the product under Settings > API.

Authentication and abilities

  • Base address: https://<your-domain>/api/v1
  • Send the token as Authorization: Bearer <token>. The token is shown once, when it is created.
  • A token belongs to a service account, a non-personal user that can never sign in. It is created by a super admin under Settings > API.
  • Each token has abilities, an expiry date (at most 12 months ahead; a token without an expiry is refused) and can be limited to IP addresses or CIDR ranges.
  • Every request, including refused ones, is logged in the audit log (method, path without query string, status and address).

Abilities

read:risks, read:assets, read:controls, read:vendors, read:audit, read:kri, read:evidence, write:evidence

Rate limits and pagination

  • Hourly limit per token, 600 requests by default. When it is used up the API answers 429 with a Retry-After header.
  • Lists use cursor pagination ordered by updated_at, then id. Use per_page (1 to 200, default 50) and follow links.next, or pass meta.next_cursor as cursor, until it is null.
  • filter[updated_after] returns rows updated at or after that time, for incremental sync.

Error format

Errors always have this form:

{ "success": false, "error": { "code": "validation_failed", "message": "...", "details": { "field": ["..."] } } }
  • 401 Missing, unknown or expired token.
  • 403 Missing ability, not a service account's token, or address not allowed.
  • 422 Validation failed. error.details maps fields to messages.
  • 429 The hourly limit is used up.

Endpoints

Method Path Ability  
GET /api/v1/risks read:risks List risks
GET /api/v1/assets read:assets List information assets
GET /api/v1/controls read:controls List controls of the current statements of applicability with effectiveness
GET /api/v1/vendors read:vendors List suppliers
GET /api/v1/findings read:audit List audit findings
GET /api/v1/kri read:kri List indicators (KRI, KCI, KPI)
GET /api/v1/evidence read:evidence List evidence items
POST /api/v1/evidence write:evidence Submit evidence for a control

GET /api/v1/risks

List risks

Ability: read:risks · Response codes: 200, 401, 403, 422, 429

Parameters

NameInTypeDescription
per_pagequeryinteger
cursorquerystringThe meta.next_cursor of the previous page.
filter[updated_after]querystring (date-time)Only rows updated at or after this time (inclusive, so the newest updated_at you hold can be passed back; deduplicate on id).
Response fields (data) (20)
FieldTypeDescription
idinteger
titlestring
descriptionstring
categorystring | null
risk_typestring | null
statusstring
likelihood_inherentinteger
impact_inherentinteger
score_inherentinteger
risk_levelstring
likelihood_residualinteger | null
impact_residualinteger | null
score_residualinteger | null
residual_risk_levelstring | null
appetite_statusstring | null
is_emergingboolean
ownerobject | null
owner_confirmed_atstring | null (date-time)
created_atstring (date-time)
updated_atstring (date-time)

GET /api/v1/assets

List information assets

Ability: read:assets · Response codes: 200, 401, 403, 422, 429

Parameters

NameInTypeDescription
per_pagequeryinteger
cursorquerystringThe meta.next_cursor of the previous page.
filter[updated_after]querystring (date-time)Only rows updated at or after this time (inclusive, so the newest updated_at you hold can be passed back; deduplicate on id).
Response fields (data) (19)
FieldTypeDescription
idinteger
uuidstring
asset_identifierstring | null
namestring
descriptionstring | null
categorystring | null
statusstring
confidentiality_levelinteger | null
integrity_levelinteger | null
availability_levelinteger | null
overall_classificationinteger | null
business_criticalitystring | null
is_essential_serviceboolean
is_important_serviceboolean
ownerobject | null
classification_datestring | null (date)
next_review_datestring | null (date)
created_atstring (date-time)
updated_atstring (date-time)

GET /api/v1/controls

List controls of the current statements of applicability with effectiveness

Ability: read:controls · Response codes: 200, 401, 403, 422, 429

Parameters

NameInTypeDescription
per_pagequeryinteger
cursorquerystringThe meta.next_cursor of the previous page.
filter[updated_after]querystring (date-time)Only rows updated at or after this time (inclusive, so the newest updated_at you hold can be passed back; deduplicate on id).
Response fields (data) (18)
FieldTypeDescription
idinteger
soa_document_idinteger
frameworkstring | null
control_codestring | null
titlestring | null
is_applicableboolean
implementation_statusstring | null
is_key_controlboolean
frequencystring | null
design_effectivenessstring
design_assessed_atstring | null (date-time)
operating_effectivenessstring
operating_tested_atstring | null (date-time)
operating_test_period_startstring | null (date)
operating_test_period_endstring | null (date)
verifiedbooleanEffective operation counts only with valid evidence and no active exception.
exceptedboolean
updated_atstring (date-time)

GET /api/v1/vendors

List suppliers

Ability: read:vendors · Response codes: 200, 401, 403, 422, 429

Parameters

NameInTypeDescription
per_pagequeryinteger
cursorquerystringThe meta.next_cursor of the previous page.
filter[updated_after]querystring (date-time)Only rows updated at or after this time (inclusive, so the newest updated_at you hold can be passed back; deduplicate on id).
Response fields (data) (20)
FieldTypeDescription
idinteger
namestring
organization_numberstring | null
vendor_typestring | null
criticalitystring | null
statusstring | null
countrystring | null
inherent_risk_scorenumber | null
residual_risk_scorenumber | null
last_assessed_atstring | null (date-time)
next_assessment_duestring | null (date-time)
contract_start_datestring | null (date)
contract_end_datestring | null (date)
processes_personal_databoolean
is_ict_providerboolean
supports_critical_functionboolean
certificationsarray | null
ownerobject | null
created_atstring (date-time)
updated_atstring (date-time)

GET /api/v1/findings

List audit findings

Ability: read:audit · Response codes: 200, 401, 403, 422, 429

Parameters

NameInTypeDescription
per_pagequeryinteger
cursorquerystringThe meta.next_cursor of the previous page.
filter[updated_after]querystring (date-time)Only rows updated at or after this time (inclusive, so the newest updated_at you hold can be passed back; deduplicate on id).
Response fields (data) (18)
FieldTypeDescription
idinteger
uuidstring
audit_idinteger
finding_typestring
severitystring
statusstring
control_idstring | null
titlestring
descriptionstring | null
audit_criteria_referencestring | null
corrective_action_requiredboolean
due_datestring | null (date)
resolved_atstring | null (date-time)
verified_atstring | null (date-time)
withdrawn_atstring | null (date-time)
assigned_toobject | null
created_atstring (date-time)
updated_atstring (date-time)

GET /api/v1/kri

List indicators (KRI, KCI, KPI)

Ability: read:kri · Response codes: 200, 401, 403, 422, 429

Parameters

NameInTypeDescription
per_pagequeryinteger
cursorquerystringThe meta.next_cursor of the previous page.
filter[updated_after]querystring (date-time)Only rows updated at or after this time (inclusive, so the newest updated_at you hold can be passed back; deduplicate on id).
Response fields (data) (19)
FieldTypeDescription
idinteger
uuidstring
namestring
indicator_typestring
unitstring | null
statusstring
measurement_frequencystring | null
threshold_directionstring | null
threshold_greennumber | null
threshold_yellownumber | null
threshold_rednumber | null
current_valuenumber | null
current_zonestring
zone_sincestring | null (date-time)
days_in_current_zoneinteger | null
last_measurement_atstring | null (date-time)
ownerobject | null
created_atstring (date-time)
updated_atstring (date-time)

GET /api/v1/evidence

List evidence items

Ability: read:evidence · Response codes: 200, 401, 403, 422, 429

Parameters

NameInTypeDescription
per_pagequeryinteger
cursorquerystringThe meta.next_cursor of the previous page.
filter[updated_after]querystring (date-time)Only rows updated at or after this time (inclusive, so the newest updated_at you hold can be passed back; deduplicate on id).
Response fields (data) (18)
FieldTypeDescription
idstring
control_idstring | null
frameworkstring | null
titlestring
descriptionstring | null
categorystring | null
source_typestring
source_systemstring | null
external_referencestring | null
sha256string | null
statusstring
resultstring | nullVerdict of an automatic check. The collected data is never returned.
has_fileboolean
collected_atstring (date-time)
expires_atstring | null (date-time)
is_expiredboolean
created_atstring (date-time)
updated_atstring (date-time)

POST /api/v1/evidence

Submit evidence for a control

Ability: write:evidence · Response codes: 200, 201, 401, 403, 422, 429

Request (fields) (JSON or multipart/form-data)

FieldTypeRequiredDescription
control_idstringyesCatalog code of the control.
frameworkstringyesFramework label or slug, for example iso27001.
source_systemstringyes
collected_atstring (date-time)yesNot more than five minutes in the future.
titlestringyes
descriptionstring
categorystring
expires_atstring (date-time)After collected_at.
external_referencestringThe sending system's own reference; makes retries safe.
dataobjectyesStructured content (at most 1 MiB). Send this or a file.

Evidence is provenance, never a declared status: a request cannot change the implementation or effectiveness status of a control.

Response fields (data) (18)
FieldTypeDescription
idstring
control_idstring | null
frameworkstring | null
titlestring
descriptionstring | null
categorystring | null
source_typestring
source_systemstring | null
external_referencestring | null
sha256string | null
statusstring
resultstring | nullVerdict of an automatic check. The collected data is never returned.
has_fileboolean
collected_atstring (date-time)
expires_atstring | null (date-time)
is_expiredboolean
created_atstring (date-time)
updated_atstring (date-time)

Questions about the API: info@securapilot.com

We use anonymous statistics without cookies to improve the website. Read more