Security Control
Security Control endpoints on the External API cover the measures library CRUD and inventory↔measure connections.
All paths are under /external. Authenticate with an API key (see Authentication).
Typical workflows
Create a security measure
- Resolve deliverable IDs from your framework/compliance context (each entry is
{ "deliverableId": <integer> }) POST /external/security-measure/newwith name,inventoryTypeId, CIA levels, andsecurityDeliverables- Verify:
GET /external/security-measure/{securityMeasureUniqueId}/item
Update a measure
GET /external/security-measure/listorGET /external/security-measure/{securityMeasureUniqueId}/itemPATCH /external/security-measure/{securityMeasureUniqueId}/edit— send only fields to change- Verify with item GET
Delete a measure
DELETE /external/security-measure/{securityMeasureUniqueId}/delete
Connect a measure to an inventory record
- Resolve the inventory uniqueId (vendor, asset, or process) and the measure uniqueId from the measures library
- Confirm the measure
inventoryTypeIdmatches the inventory type (1= process,2= vendor,3= asset) POST /external/inventory/{inventoryUniqueId}/security-measure/{securityMeasureUniqueId}/connect- Verify:
GET /external/inventory/{inventoryUniqueId}/security-measure/list
Update connection status
Use the connection inventorySecurityMeasureUniqueId from the list or item GET:
| Action | Endpoint | Resulting status |
|---|---|---|
| Mark implemented | PATCH .../cover |
implemented |
| Mark not implemented | PATCH .../uncover |
not_implemented |
| Mark not applicable | PATCH .../irrelevant |
not_applicable |
| Mark pending | PATCH .../mark-pending |
pending |
Assign responsible department
PATCH /external/inventory/{inventoryUniqueId}/security-measure/{inventorySecurityMeasureUniqueId}/edit
View the security dashboard
GET /external/security-dashboard
Returns company-scoped aggregates only (no write operations). The company is taken from the API key — there is no company path parameter.
Response shape:
overall.processes|vendors|assets—total,secured,atRisk,toAssess,notClassifiedexposureAndAction.securityMeasures— counts by status (implemented,notImplemented,notApplicable,pending)exposureAndAction.topFiveMeasuresCreatingGapsexposureAndAction.priorityActions
Field reference
Measures library
| Field | Type | Notes |
|---|---|---|
name |
string | Required on create |
description |
string | Optional |
inventoryTypeId |
integer | 1 = process (ROPA), 2 = vendor, 3 = asset |
confidentialityLevel |
integer | CIA level 1–4 |
availabilityLevel |
integer | CIA level 1–4 |
integrityLevel |
integer | CIA level 1–4 |
securityDeliverables |
array | Required on create. Each item: { "deliverableId": <integer> } |
category |
string | Optional |
type |
string | Optional |
goal |
string | Optional |
Inventory connections
| Field | Type | Notes |
|---|---|---|
inventorySecurityMeasureUniqueId |
string | Connection uniqueId |
status |
string | pending, implemented, not_implemented, not_applicable |
departmentUniqueId |
string | Responsible department (optional on connect; editable via PATCH edit) |
inventoryUniqueId |
string | Vendor, asset, or process uniqueId |
inventoryTypeId |
integer | 1 = process, 2 = vendor, 3 = asset |
Endpoint summary
Measures library
| Endpoint | Method | Description |
|---|---|---|
/security-dashboard |
GET | Read-only company security dashboard aggregates |
/security-measure/list |
GET | List measures (supports filter, sort, maxResults, page) |
/security-measure/{id}/item |
GET | Measure detail |
/security-measure/new |
POST | Create measure |
/security-measure/{id}/edit |
PATCH | Update measure (partial) |
/security-measure/{id}/delete |
DELETE | Delete measure |
/security-measure/{id}/connected-inventory/list |
GET | Inventories linked to a measure |
Inventory connections
| Endpoint | Method | Description |
|---|---|---|
/inventory/{inventoryUniqueId}/security-measure/list |
GET | Measures linked to an inventory |
/inventory/{inventoryUniqueId}/security-measure/{connectionId}/item |
GET | Connection detail |
/inventory/{inventoryUniqueId}/security-measure/{measureId}/connect |
POST | Connect measure to inventory |
/inventory/{inventoryUniqueId}/security-measure/{connectionId}/edit |
PATCH | Update connection (department) |
/inventory/{inventoryUniqueId}/security-measure/{connectionId}/cover |
PATCH | Mark implemented |
/inventory/{inventoryUniqueId}/security-measure/{connectionId}/uncover |
PATCH | Mark not implemented |
/inventory/{inventoryUniqueId}/security-measure/{connectionId}/irrelevant |
PATCH | Mark not applicable |
/inventory/{inventoryUniqueId}/security-measure/{connectionId}/mark-pending |
PATCH | Mark pending |
Create example
{
"name": "Encrypt data at rest",
"description": "Apply encryption to stored personal data",
"inventoryTypeId": 3,
"confidentialityLevel": 4,
"availabilityLevel": 3,
"integrityLevel": 3,
"securityDeliverables": [
{ "deliverableId": 42 }
],
"category": "Technical",
"type": "Preventive",
"goal": "Protect confidentiality of stored data"
}
Response:
Connect example
No request body required. The measure must have the same inventoryTypeId as the inventory record.
List filters
The measures list endpoint accepts the same advanced filter structure as the internal API. Example name search:
Inventory connection lists support pagination via maxResults and page query parameters.
Not included yet
The following remain internal-only (Evertrust admin / not company External API):
- Measure templates, packages, and package cast
- Package traffic light (cast preview)
- CIA GenAI suggestions / classification questionnaire