Skip to content

Rules​

Rule CRUD, revert, section locks, and satisfaction relationships


List all rules for a component​

GET
/components/{componentId}/rules

Returns all rules in the component with full content fields (title, fixtext, check_content, vuln_discussion, etc.). Used by the component editor to populate the rule list. Requires project membership.

Authorizations​

tokenAuth

Personal access token authentication. Send via Authorization header: Authorization: Token vulcan_xxx. Tokens are SHA-256 hashed server-side (never stored in plaintext). Scopes: read (GET), write (mutations), admin (everything). Create tokens via Settings → API Tokens in the web UI.

Type
HTTP (token)

Responses​

All component rules

application/json
JSON
[
  
{
  
  
"id": 100,
  
  
"rule_id": "CNTR-00-000050",
  
  
"title": "Container images must be signed",
  
  
"status": "Applicable - Configurable",
  
  
"locked": false,
  
  
"satisfies": [
  
  
],
  
  
"satisfied_by": [
  
  
]
  
},
  
{
  
  
"id": 101,
  
  
"rule_id": "CNTR-00-000051",
  
  
"title": "Container images must come from approved registries",
  
  
"status": "Applicable - Configurable",
  
  
"locked": false,
  
  
"satisfies": [
  
  
],
  
  
"satisfied_by": [
  
  
]
  
}
]

Playground​

Server
Authorization

Samples​


Create a new requirement in a component​

POST
/components/{componentId}/rules

Creates a requirement in one call, shaped by the component's document_type — a STIG rule (seeded from the source SRG's CCI-000366 baseline row; severity and weight are inherited from it) or an authored SRG requirement. Content fields apply at creation: provided values win over seeded defaults, and provided nested attributes replace the built defaults. Duplicate mode copies an existing requirement of THIS component. Requirement numbers are server-owned and assigned from the component's sequence. Blank/content creation requires project admin; duplication requires author. Returns 422 when a STIG component's source SRG has no CCI-000366 baseline row, or when provided content fails the kind's validations.

Authorizations​

tokenAuth

Personal access token authentication. Send via Authorization header: Authorization: Token vulcan_xxx. Tokens are SHA-256 hashed server-side (never stored in plaintext). Scopes: read (GET), write (mutations), admin (everything). Create tokens via Settings → API Tokens in the web UI.

Type
HTTP (token)

Request Body​

application/json
JSON
{
  
"rule": {
  
  
"duplicate": false
  
}
}

Responses​

Rule created

application/json
JSON
{
  
"toast": {
  
  
"title": "Control created.",
  
  
"message": [
  
  
  
"Successfully created control."
  
  
],
  
  
"variant": "success"
  
},
  
"data": {
  
  
"id": 5000,
  
  
"rule_id": "000204",
  
  
"title": "New container security requirement",
  
  
"status": "Not Yet Determined",
  
  
"locked": false,
  
  
"satisfies": [
  
  
],
  
  
"satisfied_by": [
  
  
]
  
}
}

Playground​

Server
Authorization
Body

Samples​


Lightweight rule list for picker UI​

GET
/components/{componentId}/rules_picker

Returns a compact list of requirements for dropdown/picker selection (e.g., the move-to-rule admin action or duplicate-of picker). Lighter than the full rules list — omits content fields. Rows are shaped by the component's document_type: STIG rule objects carry the satisfaction relationships, authored SRG requirement objects omit them entirely. Requires project membership.

Authorizations​

tokenAuth

Personal access token authentication. Send via Authorization header: Authorization: Token vulcan_xxx. Tokens are SHA-256 hashed server-side (never stored in plaintext). Scopes: read (GET), write (mutations), admin (everything). Create tokens via Settings → API Tokens in the web UI.

Type
HTTP (token)

Responses​

Requirements for picker selection

application/json
JSON
{
  
"rules": [
  
  
{
  
  
  
"id": 100,
  
  
  
"rule_id": "000050",
  
  
  
"displayed_name": "CNTR-00-000050",
  
  
  
"title": "Container images must be signed",
  
  
  
"locked": false,
  
  
  
"satisfies": [
  
  
  
],
  
  
  
"satisfied_by": [
  
  
  
]
  
  
},
  
  
{
  
  
  
"id": 101,
  
  
  
"rule_id": "000051",
  
  
  
"displayed_name": "CNTR-00-000051",
  
  
  
"title": "Container images must come from approved registries",
  
  
  
"locked": true,
  
  
  
"satisfies": [
  
  
  
],
  
  
  
"satisfied_by": [
  
  
  
]
  
  
}
  
]
}

Playground​

Server
Authorization

Samples​


Rule detail​

GET
/rules/{ruleId}

Returns the full requirement editor payload for either document kind — checks, descriptions, and review history for both; satisfactions (satisfies/satisfied_by) appear on stig rules only, and authored SRG requirements omit those keys entirely.

Authorizations​

tokenAuth

Personal access token authentication. Send via Authorization header: Authorization: Token vulcan_xxx. Tokens are SHA-256 hashed server-side (never stored in plaintext). Scopes: read (GET), write (mutations), admin (everything). Create tokens via Settings → API Tokens in the web UI.

Type
HTTP (token)

Responses​

Rule data

application/json
JSON
{
  
"id": 1786,
  
"rule_id": "000001",
  
"title": "The operating system must provide automated mechanisms for supporting account management functions.",
  
"version": "SRG-OS-000001-GPOS-00001",
  
"status": "Not Yet Determined",
  
"rule_severity": "medium",
  
"locked": true,
  
"review_requestor_id": 0,
  
"changes_requested": false,
  
"comment_summary": {
  
  
"open": 0,
  
  
"total": 0
  
},
  
"rule_weight": "10.0",
  
"fixtext": "Configure the operating system to provide automated mechanisms...",
  
"fixtext_fixref": "F-3716r557030_fix",
  
"ident": "CCI-000015",
  
"ident_system": "http://cyber.mil/cci",
  
"vendor_comments": "string",
  
"vuln_id": "string",
  
"legacy_ids": "V-56571, SV-70831",
  
"component_id": 1,
  
"status_justification": "string",
  
"artifact_description": "string",
  
"locked_fields": {
  
  
"additionalProperties": true
  
},
  
"nist_control_family": "AC-2 (1)",
  
"srg_id": "SRG-OS-000001-GPOS-00001",
  
"inspec_control_body": "string",
  
"inspec_control_file": "string",
  
"inspec_control_body_lang": "ruby",
  
"inspec_control_file_lang": "ruby",
  
"fix_id": "F-3716r557030_fix",
  
"disa_rule_descriptions_attributes": [
  
  
{
  
  
  
"id": 300,
  
  
  
"vuln_discussion": "Without verification, containers may execute untrusted code...",
  
  
  
"false_positives": "string",
  
  
  
"false_negatives": "string",
  
  
  
"documentable": false,
  
  
  
"mitigations": "string",
  
  
  
"severity_override_guidance": "string",
  
  
  
"potential_impacts": "string",
  
  
  
"third_party_tools": "string",
  
  
  
"mitigation_control": "string",
  
  
  
"responsibility": "string",
  
  
  
"ia_controls": "string",
  
  
  
"mitigations_available": "string",
  
  
  
"poam_available": "string",
  
  
  
"poam": "string",
  
  
  
"_destroy": false
  
  
}
  
],
  
"checks_attributes": [
  
  
{
  
  
  
"id": 200,
  
  
  
"system": "C-56947r840354_chk",
  
  
  
"content_ref_name": "M",
  
  
  
"content_ref_href": "DPMS_XCCDF-Container_Platform_SRG.xml",
  
  
  
"content": "Verify the container platform restricts access to container images...",
  
  
  
"_destroy": false
  
  
}
  
],
  
"satisfies": [
  
  
{
  
  
  
"id": 50,
  
  
  
"rule_id": 100,
  
  
  
"srg_id": "CNTR-00-000050"
  
  
}
  
],
  
"satisfied_by": [
  
  
{
  
  
  
"id": 50,
  
  
  
"rule_id": 100,
  
  
  
"srg_id": "CNTR-00-000050",
  
  
  
"fixtext": "Configure the container platform to restrict access..."
  
  
}
  
],
  
"histories": [
  
  
{
  
  
  
"id": 224,
  
  
  
"action": "update",
  
  
  
"auditable_type": "Component",
  
  
  
"auditable_id": 1,
  
  
  
"name": "Demo Admin",
  
  
  
"audited_name": "string",
  
  
  
"comment": "string",
  
  
  
"created_at": "2026-05-19 14:07:49 UTC",
  
  
  
"audited_changes": [
  
  
  
  
{
  
  
  
  
  
"field": "released",
  
  
  
  
  
"prev_value": false,
  
  
  
  
  
"new_value": true
  
  
  
  
}
  
  
  
]
  
  
}
  
],
  
"rule_descriptions_attributes": [
  
  
{
  
  
  
"id": 400,
  
  
  
"description": "<VulnDiscussion>Without verification, containers may execute untrusted code.</VulnDiscussion>",
  
  
  
"_destroy": false
  
  
}
  
],
  
"reviews": [
  
  
{
  
  
  
"id": 1,
  
  
  
"action": "comment",
  
  
  
"comment": "The check says "verify that TLS 1.2 or greater is being used" but does not specify HOW to verify.",
  
  
  
"created_at": "2026-05-19 14:08:17 UTC",
  
  
  
"triage_status": "pending",
  
  
  
"triage_set_at": "string",
  
  
  
"adjudicated_at": "string",
  
  
  
"rule_id": 2976,
  
  
  
"section": "check_content",
  
  
  
"responding_to_review_id": 0,
  
  
  
"duplicate_of_review_id": 0,
  
  
  
"addressed_by_rule_id": 0,
  
  
  
"triage_set_by_id": 0,
  
  
  
"name": "Demo Viewer",
  
  
  
"author_name": "Demo Viewer",
  
  
  
"triager_display_name": "string",
  
  
  
"triager_imported": false,
  
  
  
"adjudicator_display_name": "string",
  
  
  
"adjudicator_imported": false,
  
  
  
"commenter_display_name": "Demo Viewer",
  
  
  
"commenter_imported": false,
  
  
  
"commentable_type": "BaseRule",
  
  
  
"responses_count": 0,
  
  
  
"rule_displayed_name": "PHOS-03-000001",
  
  
  
"author_email": "string",
  
  
  
"commenter_email": "string",
  
  
  
"reactions": {
  
  
  
  
"up": 1,
  
  
  
  
"down": 0,
  
  
  
  
"mine": "string"
  
  
  
}
  
  
}
  
],
  
"additional_answers_attributes": [
  
  
{
  
  
  
"id": 10,
  
  
  
"additional_question_id": 3,
  
  
  
"answer": "Yes, this applies to all container runtime environments."
  
  
}
  
],
  
"srg_rule_attributes": {
  
  
"id": 500,
  
  
"rule_id": "SV-222396r857506_rule",
  
  
"title": "The container platform must enforce approved authorizations for access.",
  
  
"version": "CNTR-00-000050",
  
  
"rule_severity": "medium",
  
  
"rule_weight": "10.0",
  
  
"ident": "CCI-000213",
  
  
"ident_system": "http://cyber.mil/cci",
  
  
"fixtext": "Configure the container platform to enforce approved authorizations...",
  
  
"fixtext_fixref": "F-25073r857505_fix",
  
  
"fix_id": "F-25073r857505_fix",
  
  
"inspec_control_body": "string",
  
  
"inspec_control_file": "string",
  
  
"inspec_control_body_lang": "string",
  
  
"inspec_control_file_lang": "string",
  
  
"vuln_id": "V-222396",
  
  
"legacy_ids": "SV-42474, V-32157",
  
  
"rule_descriptions_attributes": [
  
  
  
{
  
  
  
  
"id": 400,
  
  
  
  
"description": "<VulnDiscussion>Without verification, containers may execute untrusted code.</VulnDiscussion>",
  
  
  
  
"_destroy": false
  
  
  
}
  
  
],
  
  
"disa_rule_descriptions_attributes": [
  
  
  
{
  
  
  
  
"id": 300,
  
  
  
  
"vuln_discussion": "Without verification, containers may execute untrusted code...",
  
  
  
  
"false_positives": "string",
  
  
  
  
"false_negatives": "string",
  
  
  
  
"documentable": false,
  
  
  
  
"mitigations": "string",
  
  
  
  
"severity_override_guidance": "string",
  
  
  
  
"potential_impacts": "string",
  
  
  
  
"third_party_tools": "string",
  
  
  
  
"mitigation_control": "string",
  
  
  
  
"responsibility": "string",
  
  
  
  
"ia_controls": "string",
  
  
  
  
"mitigations_available": "string",
  
  
  
  
"poam_available": "string",
  
  
  
  
"poam": "string",
  
  
  
  
"_destroy": false
  
  
  
}
  
  
],
  
  
"checks_attributes": [
  
  
  
{
  
  
  
  
"id": 200,
  
  
  
  
"system": "C-56947r840354_chk",
  
  
  
  
"content_ref_name": "M",
  
  
  
  
"content_ref_href": "DPMS_XCCDF-Container_Platform_SRG.xml",
  
  
  
  
"content": "Verify the container platform restricts access to container images...",
  
  
  
  
"_destroy": false
  
  
  
}
  
  
]
  
},
  
"srg_info": {
  
  
"version": "V2R4"
  
}
}

Playground​

Server
Authorization

Samples​


Full replacement of rule attributes​

PUT
/rules/{ruleId}

Full replacement — all fields required. Updates rule fields. Requires author or admin role on the component.

Authorizations​

tokenAuth

Personal access token authentication. Send via Authorization header: Authorization: Token vulcan_xxx. Tokens are SHA-256 hashed server-side (never stored in plaintext). Scopes: read (GET), write (mutations), admin (everything). Create tokens via Settings → API Tokens in the web UI.

Type
HTTP (token)

Request Body​

application/json
JSON
{
  
"rule": {
  
  
"status": "Applicable - Configurable",
  
  
"title": "The container platform must enforce approved authorizations.",
  
  
"fixtext": "Configure the container platform to enforce approved authorizations.",
  
  
"vendor_comments": "Met by the recommended runtime configuration."
  
}
}

Responses​

Rule updated

application/json
JSON
{
  
"toast": {
  
  
"title": "User updated.",
  
  
"message": [
  
  
  
[
  
  
  
  
"Successfully updated user."
  
  
  
]
  
  
],
  
  
"variant": "success"
  
}
}

Playground​

Server
Authorization
Body

Samples​


Soft-delete a rule​

DELETE
/rules/{ruleId}

Marks the rule as deleted. Requires admin role on the component.

Authorizations​

tokenAuth

Personal access token authentication. Send via Authorization header: Authorization: Token vulcan_xxx. Tokens are SHA-256 hashed server-side (never stored in plaintext). Scopes: read (GET), write (mutations), admin (everything). Create tokens via Settings → API Tokens in the web UI.

Type
HTTP (token)

Responses​

Rule deleted

application/json
JSON
{
  
"toast": {
  
  
"title": "User updated.",
  
  
"message": [
  
  
  
[
  
  
  
  
"Successfully updated user."
  
  
  
]
  
  
],
  
  
"variant": "success"
  
}
}

Playground​

Server
Authorization

Samples​


Partial update of rule attributes​

PATCH
/rules/{ruleId}

Partial update — send only changed fields. Updates one or more rule fields. Requires author or admin role on the component.

Authorizations​

tokenAuth

Personal access token authentication. Send via Authorization header: Authorization: Token vulcan_xxx. Tokens are SHA-256 hashed server-side (never stored in plaintext). Scopes: read (GET), write (mutations), admin (everything). Create tokens via Settings → API Tokens in the web UI.

Type
HTTP (token)

Request Body​

application/json
JSON
{
  
"rule": {
  
  
"status": "Applicable - Configurable",
  
  
"vendor_comments": "Met by the recommended runtime configuration."
  
}
}

Responses​

Rule updated

application/json
JSON
{
  
"toast": {
  
  
"title": "User updated.",
  
  
"message": [
  
  
  
[
  
  
  
  
"Successfully updated user."
  
  
  
]
  
  
],
  
  
"variant": "success"
  
}
}

Playground​

Server
Authorization
Body

Samples​


Revert requirement fields to a previous audit version​

POST
/rules/{ruleId}/revert

Restores the named audited fields to their prior values from the specified history entry. Applies to both document kinds — stig rules and authored SRG requirements. Requires author or admin role.

Authorizations​

tokenAuth

Personal access token authentication. Send via Authorization header: Authorization: Token vulcan_xxx. Tokens are SHA-256 hashed server-side (never stored in plaintext). Scopes: read (GET), write (mutations), admin (everything). Create tokens via Settings → API Tokens in the web UI.

Type
HTTP (token)

Request Body​

application/json
JSON
{
  
"audit_id": 4211,
  
"fields": [
  
  
[
  
  
  
"title"
  
  
]
  
],
  
"audit_comment": "Restore the original wording"
}

Responses​

Rule reverted

application/json
JSON
{
  
"toast": {
  
  
"title": "User updated.",
  
  
"message": [
  
  
  
[
  
  
  
  
"Successfully updated user."
  
  
  
]
  
  
],
  
  
"variant": "success"
  
}
}

Playground​

Server
Authorization
Body

Samples​


Lock or unlock a single section on a rule​

PATCH
/rules/{ruleId}/section_locks

Locks or unlocks a single section (e.g., Fix, Check) on a rule. Requires reviewer role or higher on the parent component. Creates an audit entry.

Authorizations​

tokenAuth

Personal access token authentication. Send via Authorization header: Authorization: Token vulcan_xxx. Tokens are SHA-256 hashed server-side (never stored in plaintext). Scopes: read (GET), write (mutations), admin (everything). Create tokens via Settings → API Tokens in the web UI.

Type
HTTP (token)

Request Body​

application/json
JSON
{
  
"section": "Fix",
  
"locked": true,
  
"comment": "Locking the Fix section for final review"
}

Responses​

Section locks updated

application/json
JSON
{
  
"rule": {
  
  
"id": 1786,
  
  
"rule_id": "000001",
  
  
"title": "The operating system must provide automated mechanisms for supporting account management functions.",
  
  
"version": "SRG-OS-000001-GPOS-00001",
  
  
"status": "Not Yet Determined",
  
  
"rule_severity": "medium",
  
  
"locked": true,
  
  
"review_requestor_id": 0,
  
  
"changes_requested": false,
  
  
"comment_summary": {
  
  
  
"open": 0,
  
  
  
"total": 0
  
  
},
  
  
"rule_weight": "10.0",
  
  
"fixtext": "Configure the operating system to provide automated mechanisms...",
  
  
"fixtext_fixref": "F-3716r557030_fix",
  
  
"ident": "CCI-000015",
  
  
"ident_system": "http://cyber.mil/cci",
  
  
"vendor_comments": "string",
  
  
"vuln_id": "string",
  
  
"legacy_ids": "V-56571, SV-70831",
  
  
"component_id": 1,
  
  
"status_justification": "string",
  
  
"artifact_description": "string",
  
  
"locked_fields": {
  
  
  
"additionalProperties": true
  
  
},
  
  
"nist_control_family": "AC-2 (1)",
  
  
"srg_id": "SRG-OS-000001-GPOS-00001",
  
  
"inspec_control_body": "string",
  
  
"inspec_control_file": "string",
  
  
"inspec_control_body_lang": "ruby",
  
  
"inspec_control_file_lang": "ruby",
  
  
"fix_id": "F-3716r557030_fix",
  
  
"disa_rule_descriptions_attributes": [
  
  
  
{
  
  
  
  
"id": 300,
  
  
  
  
"vuln_discussion": "Without verification, containers may execute untrusted code...",
  
  
  
  
"false_positives": "string",
  
  
  
  
"false_negatives": "string",
  
  
  
  
"documentable": false,
  
  
  
  
"mitigations": "string",
  
  
  
  
"severity_override_guidance": "string",
  
  
  
  
"potential_impacts": "string",
  
  
  
  
"third_party_tools": "string",
  
  
  
  
"mitigation_control": "string",
  
  
  
  
"responsibility": "string",
  
  
  
  
"ia_controls": "string",
  
  
  
  
"mitigations_available": "string",
  
  
  
  
"poam_available": "string",
  
  
  
  
"poam": "string",
  
  
  
  
"_destroy": false
  
  
  
}
  
  
],
  
  
"checks_attributes": [
  
  
  
{
  
  
  
  
"id": 200,
  
  
  
  
"system": "C-56947r840354_chk",
  
  
  
  
"content_ref_name": "M",
  
  
  
  
"content_ref_href": "DPMS_XCCDF-Container_Platform_SRG.xml",
  
  
  
  
"content": "Verify the container platform restricts access to container images...",
  
  
  
  
"_destroy": false
  
  
  
}
  
  
],
  
  
"satisfies": [
  
  
  
{
  
  
  
  
"id": 50,
  
  
  
  
"rule_id": 100,
  
  
  
  
"srg_id": "CNTR-00-000050"
  
  
  
}
  
  
],
  
  
"satisfied_by": [
  
  
  
{
  
  
  
  
"id": 50,
  
  
  
  
"rule_id": 100,
  
  
  
  
"srg_id": "CNTR-00-000050",
  
  
  
  
"fixtext": "Configure the container platform to restrict access..."
  
  
  
}
  
  
],
  
  
"histories": [
  
  
  
{
  
  
  
  
"id": 224,
  
  
  
  
"action": "update",
  
  
  
  
"auditable_type": "Component",
  
  
  
  
"auditable_id": 1,
  
  
  
  
"name": "Demo Admin",
  
  
  
  
"audited_name": "string",
  
  
  
  
"comment": "string",
  
  
  
  
"created_at": "2026-05-19 14:07:49 UTC",
  
  
  
  
"audited_changes": [
  
  
  
  
  
{
  
  
  
  
  
  
"field": "released",
  
  
  
  
  
  
"prev_value": false,
  
  
  
  
  
  
"new_value": true
  
  
  
  
  
}
  
  
  
  
]
  
  
  
}
  
  
],
  
  
"rule_descriptions_attributes": [
  
  
  
{
  
  
  
  
"id": 400,
  
  
  
  
"description": "<VulnDiscussion>Without verification, containers may execute untrusted code.</VulnDiscussion>",
  
  
  
  
"_destroy": false
  
  
  
}
  
  
],
  
  
"reviews": [
  
  
  
{
  
  
  
  
"id": 1,
  
  
  
  
"action": "comment",
  
  
  
  
"comment": "The check says "verify that TLS 1.2 or greater is being used" but does not specify HOW to verify.",
  
  
  
  
"created_at": "2026-05-19 14:08:17 UTC",
  
  
  
  
"triage_status": "pending",
  
  
  
  
"triage_set_at": "string",
  
  
  
  
"adjudicated_at": "string",
  
  
  
  
"rule_id": 2976,
  
  
  
  
"section": "check_content",
  
  
  
  
"responding_to_review_id": 0,
  
  
  
  
"duplicate_of_review_id": 0,
  
  
  
  
"addressed_by_rule_id": 0,
  
  
  
  
"triage_set_by_id": 0,
  
  
  
  
"name": "Demo Viewer",
  
  
  
  
"author_name": "Demo Viewer",
  
  
  
  
"triager_display_name": "string",
  
  
  
  
"triager_imported": false,
  
  
  
  
"adjudicator_display_name": "string",
  
  
  
  
"adjudicator_imported": false,
  
  
  
  
"commenter_display_name": "Demo Viewer",
  
  
  
  
"commenter_imported": false,
  
  
  
  
"commentable_type": "BaseRule",
  
  
  
  
"responses_count": 0,
  
  
  
  
"rule_displayed_name": "PHOS-03-000001",
  
  
  
  
"author_email": "string",
  
  
  
  
"commenter_email": "string",
  
  
  
  
"reactions": {
  
  
  
  
  
"up": 1,
  
  
  
  
  
"down": 0,
  
  
  
  
  
"mine": "string"
  
  
  
  
}
  
  
  
}
  
  
],
  
  
"additional_answers_attributes": [
  
  
  
{
  
  
  
  
"id": 10,
  
  
  
  
"additional_question_id": 3,
  
  
  
  
"answer": "Yes, this applies to all container runtime environments."
  
  
  
}
  
  
],
  
  
"srg_rule_attributes": {
  
  
  
"id": 500,
  
  
  
"rule_id": "SV-222396r857506_rule",
  
  
  
"title": "The container platform must enforce approved authorizations for access.",
  
  
  
"version": "CNTR-00-000050",
  
  
  
"rule_severity": "medium",
  
  
  
"rule_weight": "10.0",
  
  
  
"ident": "CCI-000213",
  
  
  
"ident_system": "http://cyber.mil/cci",
  
  
  
"fixtext": "Configure the container platform to enforce approved authorizations...",
  
  
  
"fixtext_fixref": "F-25073r857505_fix",
  
  
  
"fix_id": "F-25073r857505_fix",
  
  
  
"inspec_control_body": "string",
  
  
  
"inspec_control_file": "string",
  
  
  
"inspec_control_body_lang": "string",
  
  
  
"inspec_control_file_lang": "string",
  
  
  
"vuln_id": "V-222396",
  
  
  
"legacy_ids": "SV-42474, V-32157",
  
  
  
"rule_descriptions_attributes": [
  
  
  
  
{
  
  
  
  
  
"id": 400,
  
  
  
  
  
"description": "<VulnDiscussion>Without verification, containers may execute untrusted code.</VulnDiscussion>",
  
  
  
  
  
"_destroy": false
  
  
  
  
}
  
  
  
],
  
  
  
"disa_rule_descriptions_attributes": [
  
  
  
  
{
  
  
  
  
  
"id": 300,
  
  
  
  
  
"vuln_discussion": "Without verification, containers may execute untrusted code...",
  
  
  
  
  
"false_positives": "string",
  
  
  
  
  
"false_negatives": "string",
  
  
  
  
  
"documentable": false,
  
  
  
  
  
"mitigations": "string",
  
  
  
  
  
"severity_override_guidance": "string",
  
  
  
  
  
"potential_impacts": "string",
  
  
  
  
  
"third_party_tools": "string",
  
  
  
  
  
"mitigation_control": "string",
  
  
  
  
  
"responsibility": "string",
  
  
  
  
  
"ia_controls": "string",
  
  
  
  
  
"mitigations_available": "string",
  
  
  
  
  
"poam_available": "string",
  
  
  
  
  
"poam": "string",
  
  
  
  
  
"_destroy": false
  
  
  
  
}
  
  
  
],
  
  
  
"checks_attributes": [
  
  
  
  
{
  
  
  
  
  
"id": 200,
  
  
  
  
  
"system": "C-56947r840354_chk",
  
  
  
  
  
"content_ref_name": "M",
  
  
  
  
  
"content_ref_href": "DPMS_XCCDF-Container_Platform_SRG.xml",
  
  
  
  
  
"content": "Verify the container platform restricts access to container images...",
  
  
  
  
  
"_destroy": false
  
  
  
  
}
  
  
  
]
  
  
},
  
  
"srg_info": {
  
  
  
"version": "V2R4"
  
  
}
  
},
  
"toast": {
  
  
"title": "User updated.",
  
  
"message": [
  
  
  
[
  
  
  
  
"Successfully updated user."
  
  
  
]
  
  
],
  
  
"variant": "success"
  
}
}

Playground​

Server
Authorization
Body

Samples​


Bulk update locked sections​

PATCH
/rules/{ruleId}/bulk_section_locks

Locks or unlocks multiple sections at once on a rule. Requires reviewer role or higher on the parent component. Creates an audit trail entry.

Authorizations​

tokenAuth

Personal access token authentication. Send via Authorization header: Authorization: Token vulcan_xxx. Tokens are SHA-256 hashed server-side (never stored in plaintext). Scopes: read (GET), write (mutations), admin (everything). Create tokens via Settings → API Tokens in the web UI.

Type
HTTP (token)

Request Body​

application/json
JSON
{
  
"sections": [
  
  
[
  
  
  
"Fix",
  
  
  
"Check"
  
  
]
  
],
  
"locked": true,
  
"comment": "Locking the Fix and Check sections for review"
}

Responses​

Section locks updated, returns updated rule + toast

application/json
JSON
{
  
"rule": {
  
  
"id": 1786,
  
  
"rule_id": "000001",
  
  
"title": "The operating system must provide automated mechanisms for supporting account management functions.",
  
  
"version": "SRG-OS-000001-GPOS-00001",
  
  
"status": "Not Yet Determined",
  
  
"rule_severity": "medium",
  
  
"locked": true,
  
  
"review_requestor_id": 0,
  
  
"changes_requested": false,
  
  
"comment_summary": {
  
  
  
"open": 0,
  
  
  
"total": 0
  
  
},
  
  
"rule_weight": "10.0",
  
  
"fixtext": "Configure the operating system to provide automated mechanisms...",
  
  
"fixtext_fixref": "F-3716r557030_fix",
  
  
"ident": "CCI-000015",
  
  
"ident_system": "http://cyber.mil/cci",
  
  
"vendor_comments": "string",
  
  
"vuln_id": "string",
  
  
"legacy_ids": "V-56571, SV-70831",
  
  
"component_id": 1,
  
  
"status_justification": "string",
  
  
"artifact_description": "string",
  
  
"locked_fields": {
  
  
  
"additionalProperties": true
  
  
},
  
  
"nist_control_family": "AC-2 (1)",
  
  
"srg_id": "SRG-OS-000001-GPOS-00001",
  
  
"inspec_control_body": "string",
  
  
"inspec_control_file": "string",
  
  
"inspec_control_body_lang": "ruby",
  
  
"inspec_control_file_lang": "ruby",
  
  
"fix_id": "F-3716r557030_fix",
  
  
"disa_rule_descriptions_attributes": [
  
  
  
{
  
  
  
  
"id": 300,
  
  
  
  
"vuln_discussion": "Without verification, containers may execute untrusted code...",
  
  
  
  
"false_positives": "string",
  
  
  
  
"false_negatives": "string",
  
  
  
  
"documentable": false,
  
  
  
  
"mitigations": "string",
  
  
  
  
"severity_override_guidance": "string",
  
  
  
  
"potential_impacts": "string",
  
  
  
  
"third_party_tools": "string",
  
  
  
  
"mitigation_control": "string",
  
  
  
  
"responsibility": "string",
  
  
  
  
"ia_controls": "string",
  
  
  
  
"mitigations_available": "string",
  
  
  
  
"poam_available": "string",
  
  
  
  
"poam": "string",
  
  
  
  
"_destroy": false
  
  
  
}
  
  
],
  
  
"checks_attributes": [
  
  
  
{
  
  
  
  
"id": 200,
  
  
  
  
"system": "C-56947r840354_chk",
  
  
  
  
"content_ref_name": "M",
  
  
  
  
"content_ref_href": "DPMS_XCCDF-Container_Platform_SRG.xml",
  
  
  
  
"content": "Verify the container platform restricts access to container images...",
  
  
  
  
"_destroy": false
  
  
  
}
  
  
],
  
  
"satisfies": [
  
  
  
{
  
  
  
  
"id": 50,
  
  
  
  
"rule_id": 100,
  
  
  
  
"srg_id": "CNTR-00-000050"
  
  
  
}
  
  
],
  
  
"satisfied_by": [
  
  
  
{
  
  
  
  
"id": 50,
  
  
  
  
"rule_id": 100,
  
  
  
  
"srg_id": "CNTR-00-000050",
  
  
  
  
"fixtext": "Configure the container platform to restrict access..."
  
  
  
}
  
  
],
  
  
"histories": [
  
  
  
{
  
  
  
  
"id": 224,
  
  
  
  
"action": "update",
  
  
  
  
"auditable_type": "Component",
  
  
  
  
"auditable_id": 1,
  
  
  
  
"name": "Demo Admin",
  
  
  
  
"audited_name": "string",
  
  
  
  
"comment": "string",
  
  
  
  
"created_at": "2026-05-19 14:07:49 UTC",
  
  
  
  
"audited_changes": [
  
  
  
  
  
{
  
  
  
  
  
  
"field": "released",
  
  
  
  
  
  
"prev_value": false,
  
  
  
  
  
  
"new_value": true
  
  
  
  
  
}
  
  
  
  
]
  
  
  
}
  
  
],
  
  
"rule_descriptions_attributes": [
  
  
  
{
  
  
  
  
"id": 400,
  
  
  
  
"description": "<VulnDiscussion>Without verification, containers may execute untrusted code.</VulnDiscussion>",
  
  
  
  
"_destroy": false
  
  
  
}
  
  
],
  
  
"reviews": [
  
  
  
{
  
  
  
  
"id": 1,
  
  
  
  
"action": "comment",
  
  
  
  
"comment": "The check says "verify that TLS 1.2 or greater is being used" but does not specify HOW to verify.",
  
  
  
  
"created_at": "2026-05-19 14:08:17 UTC",
  
  
  
  
"triage_status": "pending",
  
  
  
  
"triage_set_at": "string",
  
  
  
  
"adjudicated_at": "string",
  
  
  
  
"rule_id": 2976,
  
  
  
  
"section": "check_content",
  
  
  
  
"responding_to_review_id": 0,
  
  
  
  
"duplicate_of_review_id": 0,
  
  
  
  
"addressed_by_rule_id": 0,
  
  
  
  
"triage_set_by_id": 0,
  
  
  
  
"name": "Demo Viewer",
  
  
  
  
"author_name": "Demo Viewer",
  
  
  
  
"triager_display_name": "string",
  
  
  
  
"triager_imported": false,
  
  
  
  
"adjudicator_display_name": "string",
  
  
  
  
"adjudicator_imported": false,
  
  
  
  
"commenter_display_name": "Demo Viewer",
  
  
  
  
"commenter_imported": false,
  
  
  
  
"commentable_type": "BaseRule",
  
  
  
  
"responses_count": 0,
  
  
  
  
"rule_displayed_name": "PHOS-03-000001",
  
  
  
  
"author_email": "string",
  
  
  
  
"commenter_email": "string",
  
  
  
  
"reactions": {
  
  
  
  
  
"up": 1,
  
  
  
  
  
"down": 0,
  
  
  
  
  
"mine": "string"
  
  
  
  
}
  
  
  
}
  
  
],
  
  
"additional_answers_attributes": [
  
  
  
{
  
  
  
  
"id": 10,
  
  
  
  
"additional_question_id": 3,
  
  
  
  
"answer": "Yes, this applies to all container runtime environments."
  
  
  
}
  
  
],
  
  
"srg_rule_attributes": {
  
  
  
"id": 500,
  
  
  
"rule_id": "SV-222396r857506_rule",
  
  
  
"title": "The container platform must enforce approved authorizations for access.",
  
  
  
"version": "CNTR-00-000050",
  
  
  
"rule_severity": "medium",
  
  
  
"rule_weight": "10.0",
  
  
  
"ident": "CCI-000213",
  
  
  
"ident_system": "http://cyber.mil/cci",
  
  
  
"fixtext": "Configure the container platform to enforce approved authorizations...",
  
  
  
"fixtext_fixref": "F-25073r857505_fix",
  
  
  
"fix_id": "F-25073r857505_fix",
  
  
  
"inspec_control_body": "string",
  
  
  
"inspec_control_file": "string",
  
  
  
"inspec_control_body_lang": "string",
  
  
  
"inspec_control_file_lang": "string",
  
  
  
"vuln_id": "V-222396",
  
  
  
"legacy_ids": "SV-42474, V-32157",
  
  
  
"rule_descriptions_attributes": [
  
  
  
  
{
  
  
  
  
  
"id": 400,
  
  
  
  
  
"description": "<VulnDiscussion>Without verification, containers may execute untrusted code.</VulnDiscussion>",
  
  
  
  
  
"_destroy": false
  
  
  
  
}
  
  
  
],
  
  
  
"disa_rule_descriptions_attributes": [
  
  
  
  
{
  
  
  
  
  
"id": 300,
  
  
  
  
  
"vuln_discussion": "Without verification, containers may execute untrusted code...",
  
  
  
  
  
"false_positives": "string",
  
  
  
  
  
"false_negatives": "string",
  
  
  
  
  
"documentable": false,
  
  
  
  
  
"mitigations": "string",
  
  
  
  
  
"severity_override_guidance": "string",
  
  
  
  
  
"potential_impacts": "string",
  
  
  
  
  
"third_party_tools": "string",
  
  
  
  
  
"mitigation_control": "string",
  
  
  
  
  
"responsibility": "string",
  
  
  
  
  
"ia_controls": "string",
  
  
  
  
  
"mitigations_available": "string",
  
  
  
  
  
"poam_available": "string",
  
  
  
  
  
"poam": "string",
  
  
  
  
  
"_destroy": false
  
  
  
  
}
  
  
  
],
  
  
  
"checks_attributes": [
  
  
  
  
{
  
  
  
  
  
"id": 200,
  
  
  
  
  
"system": "C-56947r840354_chk",
  
  
  
  
  
"content_ref_name": "M",
  
  
  
  
  
"content_ref_href": "DPMS_XCCDF-Container_Platform_SRG.xml",
  
  
  
  
  
"content": "Verify the container platform restricts access to container images...",
  
  
  
  
  
"_destroy": false
  
  
  
  
}
  
  
  
]
  
  
},
  
  
"srg_info": {
  
  
  
"version": "V2R4"
  
  
}
  
},
  
"toast": {
  
  
"title": "User updated.",
  
  
"message": [
  
  
  
[
  
  
  
  
"Successfully updated user."
  
  
  
]
  
  
],
  
  
"variant": "success"
  
}
}

Playground​

Server
Authorization
Body

Samples​


Find rules sharing the same SRG requirement​

GET
/rules/{ruleId}/search/related_rules

Returns rules from other components and published STIGs that implement the same SRG requirement (matched by version/srg_id). Results are scoped to components the current user can access unless the user is an admin. The rules array is a mix of RuleEditorResponse (component rules) and StigRuleSummary (published STIG rules). The parents array is a mix of ComponentBlueprint :related and StigBlueprint :index for grouping. Stig rules only — the search keys off the stig rule's SRG-version linkage, so requests for an authored SRG requirement return 404 (no related-rules surface exists for that kind).

Authorizations​

tokenAuth

Personal access token authentication. Send via Authorization header: Authorization: Token vulcan_xxx. Tokens are SHA-256 hashed server-side (never stored in plaintext). Scopes: read (GET), write (mutations), admin (everything). Create tokens via Settings → API Tokens in the web UI.

Type
HTTP (token)

Responses​

Related rules with parent containers

application/json
JSON
{
  
"rules": [
  
  
{
  
  
  
"id": 200,
  
  
  
"rule_id": "SV-222387r960735_rule",
  
  
  
"title": "The application must limit logon sessions",
  
  
  
"version": "APSC-DV-000010",
  
  
  
"rule_severity": "medium"
  
  
},
  
  
{
  
  
  
"id": 1800,
  
  
  
"rule_id": "000001",
  
  
  
"title": "The operating system must provide automated mechanisms",
  
  
  
"status": "Not Yet Determined",
  
  
  
"component_id": 1
  
  
}
  
],
  
"parents": [
  
  
{
  
  
  
"id": 1,
  
  
  
"stig_id": "Application_Security_Development_STIG",
  
  
  
"name": "Application Security Development STIG - Ver 6, Rel 4",
  
  
  
"title": "Application Security and Development STIG"
  
  
},
  
  
{
  
  
  
"id": 1,
  
  
  
"name": "Photon OS 3",
  
  
  
"prefix": "PHOS-03",
  
  
  
"project": {
  
  
  
  
"id": 1,
  
  
  
  
"name": "Photon 3"
  
  
  
}
  
  
}
  
]
}

Playground​

Server
Authorization

Samples​


Create a satisfaction relationship between two rules​

POST
/rule_satisfactions

Links a child rule to a parent rule that satisfies it. Triggers ADNM status automation on the child.

Authorizations​

tokenAuth

Personal access token authentication. Send via Authorization header: Authorization: Token vulcan_xxx. Tokens are SHA-256 hashed server-side (never stored in plaintext). Scopes: read (GET), write (mutations), admin (everything). Create tokens via Settings → API Tokens in the web UI.

Type
HTTP (token)

Request Body​

application/json
JSON
{
  
"rule_id": 101,
  
"satisfied_by_rule_id": 102
}

Responses​

Satisfaction created

application/json
JSON
{
  
"toast": {
  
  
"title": "User updated.",
  
  
"message": [
  
  
  
[
  
  
  
  
"Successfully updated user."
  
  
  
]
  
  
],
  
  
"variant": "success"
  
}
}

Playground​

Server
Authorization
Body

Samples​


Remove a satisfaction relationship​

DELETE
/rule_satisfactions/{ruleId}

Removes the parent-child satisfaction link and reverts ADNM status on the child rule.

Authorizations​

tokenAuth

Personal access token authentication. Send via Authorization header: Authorization: Token vulcan_xxx. Tokens are SHA-256 hashed server-side (never stored in plaintext). Scopes: read (GET), write (mutations), admin (everything). Create tokens via Settings → API Tokens in the web UI.

Type
HTTP (token)

Request Body​

application/json
JSON
{
  
"rule_id": 0,
  
"satisfied_by_rule_id": 0
}

Responses​

Satisfaction removed

application/json
JSON
{
  
"toast": {
  
  
"title": "User updated.",
  
  
"message": [
  
  
  
[
  
  
  
  
"Successfully updated user."
  
  
  
]
  
  
],
  
  
"variant": "success"
  
}
}

Playground​

Server
Authorization
Body

Samples​


Propose relocating an authored SRG requirement​

POST
/rules/{ruleId}/relocations

Creates an OPEN relocation proposal for an authored requirement of an SRG component, naming the destination SRG's abbreviation. Requires author role on the component. One open proposal per requirement; a second returns 422. The proposal is a record, never a status change on the requirement — the destination SRG's authors concur or non-concur.

Authorizations​

tokenAuth

Personal access token authentication. Send via Authorization header: Authorization: Token vulcan_xxx. Tokens are SHA-256 hashed server-side (never stored in plaintext). Scopes: read (GET), write (mutations), admin (everything). Create tokens via Settings → API Tokens in the web UI.

Type
HTTP (token)

Request Body​

application/json
JSON
{
  
"requirement_relocation": {
  
  
"target_technology_token": "CTR"
  
}
}

Responses​

Relocation proposed

application/json
JSON
{
  
"toast": {
  
  
"title": "Relocation proposed.",
  
  
"message": [
  
  
  
"Proposed for the CTR SRG."
  
  
],
  
  
"variant": "success"
  
}
}

Playground​

Server
Authorization
Body

Samples​


List the open relocation-proposal backlog​

GET
/requirement_relocations

Returns relocation proposals, optionally filtered to one destination SRG's abbreviation — the standing per-SRG backlog and the creation/open-time prompt count both read this. Rows are scoped to projects the caller can see. Executed records are immutable history and never listed.

Authorizations​

tokenAuth

Personal access token authentication. Send via Authorization header: Authorization: Token vulcan_xxx. Tokens are SHA-256 hashed server-side (never stored in plaintext). Scopes: read (GET), write (mutations), admin (everything). Create tokens via Settings → API Tokens in the web UI.

Type
HTTP (token)

Parameters​

Query Parameters

target_technology_token

The destination SRG's abbreviation to filter by.

Type
string
Example"CTR"

Responses​

Open proposals (and retained declines), oldest first

application/json
JSON
[
  
{
  
  
"id": 12,
  
  
"source_rule_id": 5137,
  
  
"target_technology_token": "CTR",
  
  
"created_at": "2026-07-20 15:36:06 UTC",
  
  
"source_displayed_name": "CNTR-00-000051",
  
  
"component_id": 42,
  
  
"component_name": "Container Platform SRG",
  
  
"requested_by_name": "Jane Doe"
  
}
]

Playground​

Server
Authorization
Variables
Key
Value

Samples​


List destination SRG options for the propose flow​

GET
/requirement_relocations/destinations

Serves the Destination SRG picker: one row per SRG abbreviation across the SRG components in projects the caller can see (member or discoverable). An open component wins its abbreviation's row; released true marks the queued next-release case. Hidden projects' SRGs never appear — proposing to them remains possible through the free abbreviation entry, which discloses nothing.

Authorizations​

tokenAuth

Personal access token authentication. Send via Authorization header: Authorization: Token vulcan_xxx. Tokens are SHA-256 hashed server-side (never stored in plaintext). Scopes: read (GET), write (mutations), admin (everything). Create tokens via Settings → API Tokens in the web UI.

Type
HTTP (token)

Responses​

Destination options, ordered by abbreviation

application/json
JSON
[
  
{
  
  
"token": "CTR",
  
  
"name": "Container Platform SRG",
  
  
"released": false
  
},
  
{
  
  
"token": "GPOS",
  
  
"name": "General Purpose Operating System SRG",
  
  
"released": true
  
}
]

Playground​

Server
Authorization

Samples​


Un-mark a requirement for relocation​

DELETE
/requirement_relocations/{id}

Destroys a PENDING relocation record, removing the move marker. Audited. Requires author role on the source component. Executed records are immutable — they answer 404 exactly like a record that never existed.

Authorizations​

tokenAuth

Personal access token authentication. Send via Authorization header: Authorization: Token vulcan_xxx. Tokens are SHA-256 hashed server-side (never stored in plaintext). Scopes: read (GET), write (mutations), admin (everything). Create tokens via Settings → API Tokens in the web UI.

Type
HTTP (token)

Responses​

Marker removed

application/json
JSON
{
  
"toast": {
  
  
"title": "Relocation marker removed.",
  
  
"message": [
  
  
  
"The requirement is no longer marked for relocation."
  
  
],
  
  
"variant": "success"
  
}
}

Playground​

Server
Authorization

Samples​


Preview accepting a relocation with zero writes​

POST
/requirement_relocations/{id}/dry_run

Returns exactly what accepting the proposal would do for this destination component — or every reason it cannot run — without writing anything. This preview is the adjudication review artifact. Requires author role on the DESTINATION component only. Adjudicated proposals (declined or executed) answer 404 like a record that never existed.

Authorizations​

tokenAuth

Personal access token authentication. Send via Authorization header: Authorization: Token vulcan_xxx. Tokens are SHA-256 hashed server-side (never stored in plaintext). Scopes: read (GET), write (mutations), admin (everything). Create tokens via Settings → API Tokens in the web UI.

Type
HTTP (token)

Request Body​

application/json
JSON
{
  
"target_component_id": 42
}

Responses​

The preview, valid or not

application/json
JSON
{
  
"valid": true,
  
"errors": [
  
],
  
"source_displayed_name": "CNTR-00-000051",
  
"target_component_id": 42,
  
"target_component_name": "Container Platform SRG",
  
"would_create": {
  
  
"title": "The application must enforce approved authorizations",
  
  
"status": "Applicable",
  
  
"derived_from_srg_rule_id": 5137
  
},
  
"would_tombstone_source": true
}

Playground​

Server
Authorization
Body

Samples​


Concur with a relocation proposal — land the requirement​

POST
/requirement_relocations/{id}/accept

Receiver-side adjudication (displayed as Concur): acceptance and landing are ONE transaction — creates the requirement in the destination component with content and core lineage carried over, tombstones the source row, and stamps the record executed with the accepting actor — atomically, or not at all. Requires author role on the DESTINATION component only; the proposal itself carries source consent. Audited. Adjudicated proposals (declined or executed) answer 404 like a record that never existed.

Authorizations​

tokenAuth

Personal access token authentication. Send via Authorization header: Authorization: Token vulcan_xxx. Tokens are SHA-256 hashed server-side (never stored in plaintext). Scopes: read (GET), write (mutations), admin (everything). Create tokens via Settings → API Tokens in the web UI.

Type
HTTP (token)

Request Body​

application/json
JSON
{
  
"target_component_id": 42
}

Responses​

Proposal concurred with and requirement landed

application/json
JSON
{
  
"toast": {
  
  
"title": "Concurred.",
  
  
"message": [
  
  
  
"Moved to Container Platform SRG — the source requirement is now history."
  
  
],
  
  
"variant": "success"
  
},
  
"landed_rule_id": 5137
}

Playground​

Server
Authorization
Body

Samples​


Non-concur with a relocation proposal, with a rationale​

POST
/requirement_relocations/{id}/decline

Receiver-side adjudication (displayed as Non-concur): declines the proposal with a REQUIRED rationale. The record is retained as terminal history — never destroyed — and the rationale surfaces to the source author in the backlog, so the refusal communicates back across the ownership boundary. Requires author role on the destination component named in the request, and that component must be an ELIGIBLE receiver — an unreleased SRG component, other than the source, that declares the source requirement's core SRG (the same eligibility accept enforces). Audited. A declined source may be proposed again.

Authorizations​

tokenAuth

Personal access token authentication. Send via Authorization header: Authorization: Token vulcan_xxx. Tokens are SHA-256 hashed server-side (never stored in plaintext). Scopes: read (GET), write (mutations), admin (everything). Create tokens via Settings → API Tokens in the web UI.

Type
HTTP (token)

Request Body​

application/json
JSON
{
  
"target_component_id": 42,
  
"requirement_relocation": {
  
  
"adjudication_rationale": "Covered by CNTR-00-000001 already."
  
}
}

Responses​

Proposal non-concurred with and retained with the rationale

application/json
JSON
{
  
"toast": {
  
  
"title": "Non-concurred.",
  
  
"message": [
  
  
  
"The source author can see your rationale in the backlog."
  
  
],
  
  
"variant": "success"
  
}
}

Playground​

Server
Authorization
Body

Samples​


Powered by VitePress OpenAPI

Part of the MITRE Security Automation Framework (SAF)