{"info":{"_postman_id":"cb72ac78-9f59-4348-88a5-9296a535807c","name":"NopSec API Documentation v2 - Prod","description":"<html><head></head><body><p>Welcome to the NopSec API!</p>\n<p>Using the NopSec API, you can have visibility into your scanned targets and vulnerabilities, kick off remediation workflows by creating remediation plans, or submit exception requests to formally exclude vulnerabilities from remediation.</p>\n<h1 id=\"quick-start\">Quick start</h1>\n<ol>\n<li><p><strong>Get an API key,</strong> submit a Support Ticket or contact your Customer Success team.</p>\n</li>\n<li><p><strong>Pick the base URL</strong>, <code>https://us2.nopsec.com/api</code></p>\n</li>\n<li><p><strong>Send the key on every request</strong>, as the <code>X-NOPSEC-API-KEY</code> header:</p>\n</li>\n</ol>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>curl https://us2.nopsec.com/api/remediate/exceptionplan \\\n  -H \"X-NOPSEC-API-KEY: &lt;your-api-key&gt;\"\n\n</code></pre><h1 id=\"what-you-can-do\">What you can do</h1>\n<ul>\n<li><p><strong>Prioritize</strong> — pull saved column presets and saved queries for vulnerability triage</p>\n</li>\n<li><p><strong>Exception Plans</strong> — formally exclude vulnerabilities from remediation, with an approval workflow</p>\n</li>\n<li><p><strong>Remediation Actions</strong> — kick off remediation plans, track their progress, and push tickets to ITSM destinations like Jira</p>\n</li>\n<li><p><strong>Reports</strong> — generate and download CSV exports of your vulnerability data</p>\n</li>\n<li><p><strong>Ingestion</strong> — upload asset tags and other data into the platform</p>\n</li>\n<li><p><strong>AuditLog</strong> — query the audit trail of actions taken in your account</p>\n</li>\n</ul>\n<h1 id=\"prerequisites\">Prerequisites</h1>\n<p>To begin using the NopSec API, you need an active NopSec Account that has been given API access, the API endpoint URL, and the correct credentials and permissions.</p>\n<h2 id=\"active-account\">Active Account</h2>\n<p>A NopSec Account is used to authenticate with the NopSec API.</p>\n<p>Please submit a Service Request or contact your Customer Success team to receive your API Key.</p>\n<h2 id=\"permissions\">Permissions</h2>\n<p>Each user account within the NopSec platform is assigned to one or more Teams. Each Team is assigned a role which the user inherits. These roles dictate the permissions a user has within the platform. Your API Key will inherit the same permissions your user account has and will utilize the highest level of access for each API call.</p>\n<p>You may create a new local user manually or ask your Customer Success team to do so with limited permissions if you prefer to use a service account for your API calls.</p>\n<h2 id=\"api-server\">API Server</h2>\n<p>The NopSec API has a single endpoint:</p>\n<ul>\n<li><a href=\"https://us2.nopsec.com/api\">https://us2.nopsec.com/api</a></li>\n</ul>\n<h2 id=\"api-key\">API Key</h2>\n<p>Please submit a Support Ticket or contact your Customer Success Team directly and request an API key.</p>\n<p>You will need to provide this key with all of your API requests via the <code>X-NOPSEC-API-KEY</code> header.</p>\n<h1 id=\"rate-limits\">Rate Limits</h1>\n<p>The API allows up to <strong>5 requests per second</strong>. Exceeding this returns a <code>429 Too Many Requests</code> — back off and retry rather than hammering the API.</p>\n<h1 id=\"error-codes\">Error Codes</h1>\n<p>HTTP status codes will be returned in the response header in the event there is an error or unaccepted parameter in the api call. An error message (JSON formatted) will be returned in the response body to help guide you towards creating an acceptable request.</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Code</th>\n<th>Meaning</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>102</td>\n<td>Processing</td>\n</tr>\n<tr>\n<td>200</td>\n<td>OK</td>\n</tr>\n<tr>\n<td>201</td>\n<td>Created</td>\n</tr>\n<tr>\n<td>204</td>\n<td>No Content</td>\n</tr>\n<tr>\n<td>400</td>\n<td>Bad Request</td>\n</tr>\n<tr>\n<td>401</td>\n<td>Unauthorized</td>\n</tr>\n<tr>\n<td>404</td>\n<td>Not Found</td>\n</tr>\n<tr>\n<td>409</td>\n<td>Conflict</td>\n</tr>\n<tr>\n<td>412</td>\n<td>Precondition Failed</td>\n</tr>\n<tr>\n<td>422</td>\n<td>Unprocessable Entity</td>\n</tr>\n<tr>\n<td>429</td>\n<td>Too Many Requests (more than 5 per second)</td>\n</tr>\n<tr>\n<td>500</td>\n<td>Internal Server Error</td>\n</tr>\n</tbody>\n</table>\n</div><h1 id=\"limitations\">Limitations</h1>\n<p>Contact your Customer Success Team for details regarding your plan.</p>\n<h1 id=\"troubleshooting\">Troubleshooting</h1>\n<p>Before using NopSec APIs, we recommend that you familiarize yourself with <a href=\"https://support.nopsec.com/knowledge\">the user documentation</a>. There is a strong correlation between the business logic of NopSec Platform UI and the API.</p>\n<p>You will also find detailed step-by-step instructions for specific use cases, for example, importing asset data and importing scan data.</p>\n<p>If you experience any errors please submit a support ticket in your <a href=\"https://support.nopsec.com/customer-portal\">customer portal</a>.</p>\n</body></html>","schema":"https://schema.getpostman.com/json/collection/v2.0.0/collection.json","toc":[{"content":"Quick start","slug":"quick-start"},{"content":"What you can do","slug":"what-you-can-do"},{"content":"Prerequisites","slug":"prerequisites"},{"content":"Rate Limits","slug":"rate-limits"},{"content":"Error Codes","slug":"error-codes"},{"content":"Limitations","slug":"limitations"},{"content":"Troubleshooting","slug":"troubleshooting"}],"owner":"56962595","collectionId":"cb72ac78-9f59-4348-88a5-9296a535807c","publishedId":"2sBY4Wpca4","public":true,"customColor":{"top-bar":"FFFFFF","right-sidebar":"303030","highlight":"FF6C37"},"publishDate":"2026-08-12T16:00:04.000Z"},"item":[{"name":"Prioritize","item":[{"name":"Get Saved Column Presets","id":"05e8d9a7-4099-436c-9312-edf019a6411b","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"apikey","apikey":{"basicConfig":[{"key":"key","value":"X-NOPSEC-API-KEY"},{"key":"value","value":"{{apiKey}}"}]},"isInherited":false},"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":"{{baseUrl}}/prioritize/saved-column-group-by","description":"<p><em>Last reviewed: 2026-07-31</em></p>\n<p>Retrieve your saved Column Presets - which columns appear in your Prioritize/Reports view, in what order, and how each one is rendered. You either created these yourself on the Prioritize page, or an Admin assigned them to you.</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"id\": \"8cca18cf-978d-4651-80ee-4a728fd23f1d\",\n    \"client\": null,\n    \"owner\": null,\n    \"name\": \"ASSET\",\n    \"group_by\": \"ASSET\",\n    \"columns\": [\n        {\n            \"id\": \"1ae9fcc9-7f96-409a-a63f-fd403948e264\",\n            \"column\": {\n                \"id\": \"b41d9ecc-e50e-46da-a1d1-9a5ba0b80b4a\",\n                \"group_by\": \"ASSET\",\n                \"is_active\": true,\n                \"is_sortable\": false,\n                \"display_name\": \"Asset Tags\",\n                \"column\": \"target_data.derived.combined_tags.tag_name\",\n                \"rendering_type\": \"TAGS\"\n            }\n        }\n    ]\n}\n\n</code></pre>\n<p>A few things worth knowing before you use this:</p>\n<ul>\n<li><p><strong><code>column.column</code></strong> is the actual data path the frontend reads from (e.g. <code>target_data.derived.combined_tags.tag_name</code>) - useful if you're trying to match this preset's fields against what you see in a Reports CSV export.</p>\n</li>\n<li><p><strong><code>rendering_type</code></strong> tells the UI how to display the value (<code>TAGS</code> here means it renders as a tag chip list, not a plain string) - handy context if you're building your own client against this data instead of just using the export.</p>\n</li>\n<li><p><strong><code>is_sortable</code></strong> tells you whether this column is a valid target for the <code>sort_by</code> param on the Reports download endpoints.</p>\n</li>\n<li><p>This endpoint's <code>id</code> values are the ones you pass as <code>saved_column_group_by_id</code> when creating a Report download - see the Reports folder for that workflow.</p>\n</li>\n</ul>\n","urlObject":{"path":["prioritize","saved-column-group-by"],"host":["{{baseUrl}}"],"query":[{"disabled":true,"description":{"content":"<p>Number of results to return per page.</p>\n","type":"text/plain"},"key":"limit","value":"<integer>"},{"disabled":true,"description":{"content":"<p>The initial index from which to return the results.</p>\n","type":"text/plain"},"key":"offset","value":"<integer>"}],"variable":[]}},"response":[{"id":"67942b76-3fa6-403e-8931-02f10e126dab","name":"Untitled Response","originalRequest":{"method":"GET","header":[{"key":"Accept","value":"application/json"},{"description":"Added as a part of security scheme: apikey","key":"X-NOPSEC-API-KEY","value":"<API Key>"}],"url":{"raw":"{{baseUrl}}/prioritize/saved-column-group-by?limit=<integer>&offset=<integer>","host":["{{baseUrl}}"],"path":["prioritize","saved-column-group-by"],"query":[{"description":"Number of results to return per page.","key":"limit","value":"<integer>"},{"description":"The initial index from which to return the results.","key":"offset","value":"<integer>"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"count\": \"<integer>\",\n  \"next\": \"<uri>\",\n  \"previous\": \"<uri>\",\n  \"results\": [\n    {\n      \"client\": \"<string>\",\n      \"columns\": [\n        {\n          \"column\": {\n            \"column\": \"<string>\",\n            \"display_name\": \"<string>\",\n            \"id\": \"<uuid>\",\n            \"group_by\": \"TARGET\",\n            \"is_active\": \"<boolean>\",\n            \"rendering_type\": \"DEFAULT\"\n          },\n          \"id\": \"<uuid>\",\n          \"order\": \"<integer>\"\n        },\n        {\n          \"column\": {\n            \"column\": \"<string>\",\n            \"display_name\": \"<string>\",\n            \"id\": \"<uuid>\",\n            \"group_by\": \"TARGET\",\n            \"is_active\": \"<boolean>\",\n            \"rendering_type\": \"DEFAULT\"\n          },\n          \"id\": \"<uuid>\",\n          \"order\": \"<integer>\"\n        }\n      ],\n      \"id\": \"<uuid>\",\n      \"is_default\": \"<boolean>\",\n      \"name\": \"<string>\",\n      \"owner\": \"<string>\",\n      \"group_by\": \"TARGET\",\n      \"column_ids\": [\n        \"<uuid>\",\n        \"<uuid>\"\n      ],\n      \"sort_by\": \"<uuid>\",\n      \"is_favorite\": \"<boolean>\"\n    },\n    {\n      \"client\": \"<string>\",\n      \"columns\": [\n        {\n          \"column\": {\n            \"column\": \"<string>\",\n            \"display_name\": \"<string>\",\n            \"id\": \"<uuid>\",\n            \"group_by\": \"TARGET\",\n            \"is_active\": \"<boolean>\",\n            \"rendering_type\": \"TAGS\"\n          },\n          \"id\": \"<uuid>\",\n          \"order\": \"<integer>\"\n        },\n        {\n          \"column\": {\n            \"column\": \"<string>\",\n            \"display_name\": \"<string>\",\n            \"id\": \"<uuid>\",\n            \"group_by\": \"TARGET\",\n            \"is_active\": \"<boolean>\",\n            \"rendering_type\": \"DEFAULT\"\n          },\n          \"id\": \"<uuid>\",\n          \"order\": \"<integer>\"\n        }\n      ],\n      \"id\": \"<uuid>\",\n      \"is_default\": \"<boolean>\",\n      \"name\": \"<string>\",\n      \"owner\": \"<string>\",\n      \"group_by\": \"TARGET\",\n      \"column_ids\": [\n        \"<uuid>\",\n        \"<uuid>\"\n      ],\n      \"sort_by\": \"<uuid>\",\n      \"is_favorite\": \"<boolean>\"\n    }\n  ]\n}"}],"_postman_id":"05e8d9a7-4099-436c-9312-edf019a6411b"},{"name":"Get Saved Queries","id":"0c0ee99a-8f7a-48ef-b08e-aa711ffce09c","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"apikey","apikey":{"basicConfig":[{"key":"key","value":"X-NOPSEC-API-KEY"},{"key":"value","value":"{{apiKey}}"}]},"isInherited":false},"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":"{{baseUrl}}/prioritize/saved-query","description":"<p><em>Last reviewed: 2026-07-31</em></p>\n<p>Retrieve a list of your Saved Queries - the filters you built on the Prioritize page (or that your Admin team assigned to you). Each one is a JSON filter tree: <code>combinator</code> (\"and\"/\"or\"), <code>not</code> for negation, and <code>rules</code> holding the actual conditions.</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"id\": \"3138b4f8-13e1-42ef-914f-5443763401bc\",\n    \"client\": null,\n    \"owner\": null,\n    \"is_default\": true,\n    \"name\": \"ALL DATA\",\n    \"query\": {\n        \"not\": false,\n        \"rules\": [],\n        \"combinator\": \"and\"\n    },\n    \"version\": \"v1\",\n    \"is_favorite\": true\n}\n\n</code></pre>\n<p>The <code>id</code> here is what you pass as <code>saved_query_id</code> to the Reports download endpoints to filter a CSV export by this query.</p>\n","urlObject":{"path":["prioritize","saved-query"],"host":["{{baseUrl}}"],"query":[{"disabled":true,"description":{"content":"<p>Number of results to return per page.</p>\n","type":"text/plain"},"key":"limit","value":"<integer>"},{"disabled":true,"description":{"content":"<p>The initial index from which to return the results.</p>\n","type":"text/plain"},"key":"offset","value":"<integer>"}],"variable":[]}},"response":[{"id":"d7c00d52-c50b-40df-b28d-fab64e745982","name":"Untitled Response","originalRequest":{"method":"GET","header":[{"key":"Accept","value":"application/json"},{"description":"Added as a part of security scheme: apikey","key":"X-NOPSEC-API-KEY","value":"<API Key>"}],"url":{"raw":"{{baseUrl}}/prioritize/saved-query?limit=<integer>&offset=<integer>","host":["{{baseUrl}}"],"path":["prioritize","saved-query"],"query":[{"description":"Number of results to return per page.","key":"limit","value":"<integer>"},{"description":"The initial index from which to return the results.","key":"offset","value":"<integer>"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"count\": \"<integer>\",\n  \"next\": \"<uri>\",\n  \"previous\": \"<uri>\",\n  \"results\": [\n    {\n      \"client\": \"<string>\",\n      \"id\": \"<uuid>\",\n      \"is_default\": \"<boolean>\",\n      \"name\": \"<string>\",\n      \"owner\": \"<string>\",\n      \"query\": {\n        \"description\": \"Query Builder query\"\n      },\n      \"version\": \"<string>\",\n      \"is_favorite\": \"<boolean>\"\n    },\n    {\n      \"client\": \"<string>\",\n      \"id\": \"<uuid>\",\n      \"is_default\": \"<boolean>\",\n      \"name\": \"<string>\",\n      \"owner\": \"<string>\",\n      \"query\": {\n        \"description\": \"Query Builder query\"\n      },\n      \"version\": \"<string>\",\n      \"is_favorite\": \"<boolean>\"\n    }\n  ]\n}"}],"_postman_id":"0c0ee99a-8f7a-48ef-b08e-aa711ffce09c"}],"id":"ee7842ba-1f14-41b3-819d-eb6a7d707b5a","_postman_id":"ee7842ba-1f14-41b3-819d-eb6a7d707b5a","description":""},{"name":"Exception Plans","item":[{"name":"Get Exception Plans","id":"d2ea11e4-12c4-4562-a47f-4956c8093159","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"apikey","apikey":{"basicConfig":[{"key":"key","value":"X-NOPSEC-API-KEY"},{"key":"value","value":"{{apiKey}}"}]},"isInherited":false},"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":"{{baseUrl}}/remediate/exceptionplan","description":"<p><em>Last reviewed: 2026-07-31</em></p>\n<p>Lists Exception Plans for your client. An Exception Plan is a formal request to exclude specific vulnerabilities from remediation - someone submits it, it goes to an approver, and it tracks approval state over time.</p>\n<p>This is a plain paginated list - filter with the query params below rather than pulling everything and filtering client-side. Values below are illustrative, not the real record.</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"id\": \"a1b2c3d4-e5f6-4567-90ab-cdef01234567\",\n    \"plan_id\": \"011\",\n    \"approval_date\": \"2026-07-02T12:57:19.746565Z\",\n    \"approval_url\": \"\",\n    \"approver\": {\n        \"id\": 1313,\n        \"username\": \"jsmith\",\n        \"full_name\": \"Jane Smith\",\n        \"email\": \"jane.smith@example.com\",\n        \"first_name\": \"Jane\",\n        \"last_name\": \"Smith\",\n        \"department\": \"\",\n        \"job_title\": \"\",\n        \"is_active\": true\n    },\n    \"exceptionplan_attachments\": [],\n    \"created_at\": \"2026-07-02T12:56:10.236759Z\",\n    \"updated_at\": \"2026-07-23T00:00:50.469144Z\",\n    \"creation_method\": \"MANUAL\",\n    \"details\": \"&lt;p class=&amp;#x27;preserveHtml&amp;#x27; class=&amp;#x27;preserveHtml&amp;#x27; class=&amp;#x27;preserveHtml&amp;#x27;&gt;Vendor patch scheduled for next maintenance window&lt;/p&gt;\",\n    \"status\": \"EXPIRED\"\n}\n\n</code></pre>\n<p>A few things worth knowing:</p>\n<ul>\n<li><p><strong>status</strong> is what tells you where the plan stands - this one is <code>EXPIRED</code>. Filter by it with the <code>status</code> query param when you only care about plans in a particular state.</p>\n</li>\n<li><p><strong>details</strong> comes back as raw HTML (rich text from whoever created the plan), not plain text - render it accordingly if you're displaying it, don't just print it as a string.</p>\n</li>\n<li><p><strong>approver</strong> is a full nested user object, not just an id - useful if you want to show who needs to act without a second lookup.</p>\n</li>\n<li><p><strong>id</strong> (a UUID) is the field to use for GET /remediate/exceptionplan/{id} and the other single-plan endpoints below. <code>plan_id</code> is a separate, human-readable short code (like \"011\") - don't confuse the two.</p>\n</li>\n</ul>\n<p>Query params (all optional):</p>\n<ul>\n<li><p><code>created_at</code> - filter by creation date</p>\n</li>\n<li><p><code>creation_method</code> - how the plan was created</p>\n</li>\n<li><p><code>limit</code> / <code>offset</code> - pagination</p>\n</li>\n<li><p><code>ordering</code> - which field to sort by</p>\n</li>\n<li><p><code>search</code> - free text search term</p>\n</li>\n<li><p><code>status</code> - filter by plan status</p>\n</li>\n</ul>\n<p>Response shape: standard paginated envelope (<code>count</code>, <code>next</code>, <code>previous</code>, <code>results</code>).</p>\n","urlObject":{"path":["remediate","exceptionplan"],"host":["{{baseUrl}}"],"query":[{"disabled":true,"key":"created_at","value":"<dateTime>"},{"disabled":true,"key":"creation_method","value":"<string>"},{"disabled":true,"description":{"content":"<p>Number of results to return per page.</p>\n","type":"text/plain"},"key":"limit","value":"<integer>"},{"disabled":true,"description":{"content":"<p>The initial index from which to return the results.</p>\n","type":"text/plain"},"key":"offset","value":"<integer>"},{"disabled":true,"description":{"content":"<p>Which field to use when ordering the results.</p>\n","type":"text/plain"},"key":"ordering","value":"<string>"},{"disabled":true,"description":{"content":"<p>A search term.</p>\n","type":"text/plain"},"key":"search","value":"<string>"},{"disabled":true,"key":"status","value":"<string>"}],"variable":[]}},"response":[{"id":"ed23a91b-dcf0-4c30-8b9b-fe3639258c67","name":"Untitled Response","originalRequest":{"method":"GET","header":[{"key":"Accept","value":"application/json"},{"description":"Added as a part of security scheme: apikey","key":"X-NOPSEC-API-KEY","value":"<API Key>"}],"url":{"raw":"{{baseUrl}}/remediate/exceptionplan?created_at=<dateTime>&creation_method=<string>&limit=<integer>&offset=<integer>&ordering=<string>&search=<string>&status=<string>","host":["{{baseUrl}}"],"path":["remediate","exceptionplan"],"query":[{"key":"created_at","value":"<dateTime>"},{"key":"creation_method","value":"<string>"},{"description":"Number of results to return per page.","key":"limit","value":"<integer>"},{"description":"The initial index from which to return the results.","key":"offset","value":"<integer>"},{"description":"Which field to use when ordering the results.","key":"ordering","value":"<string>"},{"description":"A search term.","key":"search","value":"<string>"},{"key":"status","value":"<string>"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"count\": \"<integer>\",\n  \"next\": \"<uri>\",\n  \"previous\": \"<uri>\",\n  \"results\": [\n    {\n      \"action_request_ids\": [],\n      \"approval_date\": \"<dateTime>\",\n      \"approver\": {\n        \"email\": \"<email>\",\n        \"full_name\": \"<string>\",\n        \"username\": \"+hA\",\n        \"first_name\": \"<string>\",\n        \"last_name\": \"<string>\",\n        \"department\": \"<string>\",\n        \"job_title\": \"<string>\",\n        \"is_active\": \"<boolean>\"\n      },\n      \"created_at\": \"<dateTime>\",\n      \"creation_method\": \"AUTO\",\n      \"id\": \"<uuid>\",\n      \"plan_id\": \"<string>\",\n      \"reason\": \"<string>\",\n      \"submitter\": {\n        \"email\": \"<email>\",\n        \"full_name\": \"<string>\",\n        \"username\": \"8aDdegxnpc-\",\n        \"first_name\": \"<string>\",\n        \"last_name\": \"<string>\",\n        \"department\": \"<string>\",\n        \"job_title\": \"<string>\",\n        \"is_active\": \"<boolean>\"\n      },\n      \"updated_at\": \"<dateTime>\",\n      \"approval_url\": \"<string>\",\n      \"approver_id\": \"<integer>\",\n      \"exceptionplan_attachments\": [\n        {\n          \"exceptionplan_id\": \"<uuid>\",\n          \"filename\": \"<string>\",\n          \"id\": \"<uuid>\",\n          \"url\": \"<string>\",\n          \"s3_path\": \"<string>\"\n        },\n        {\n          \"exceptionplan_id\": \"<uuid>\",\n          \"filename\": \"<string>\",\n          \"id\": \"<uuid>\",\n          \"url\": \"<string>\",\n          \"s3_path\": \"<string>\"\n        }\n      ],\n      \"details\": \"<string>\",\n      \"status\": \"EXPIRED\",\n      \"type\": \"RISK_MITIGATED\",\n      \"expiration_date\": \"<dateTime>\",\n      \"vuln_instance_ids\": [\n        \"<string>\",\n        \"<string>\"\n      ],\n      \"query_data\": {\n        \"grouping\": \"VULN_INSTANCE\",\n        \"query\": {\n          \"description\": \"Either query or selected ids must be provided. If no query is provided, all vuln instances for selected ids will be included.\"\n        },\n        \"selected_ids\": [\n          \"<string>\",\n          \"<string>\"\n        ]\n      }\n    },\n    {\n      \"action_request_ids\": [],\n      \"approval_date\": \"<dateTime>\",\n      \"approver\": {\n        \"email\": \"<email>\",\n        \"full_name\": \"<string>\",\n        \"username\": \"Eph55\",\n        \"first_name\": \"<string>\",\n        \"last_name\": \"<string>\",\n        \"department\": \"<string>\",\n        \"job_title\": \"<string>\",\n        \"is_active\": \"<boolean>\"\n      },\n      \"created_at\": \"<dateTime>\",\n      \"creation_method\": \"THIRD_PARTY_INGEST\",\n      \"id\": \"<uuid>\",\n      \"plan_id\": \"<string>\",\n      \"reason\": \"<string>\",\n      \"submitter\": {\n        \"email\": \"<email>\",\n        \"full_name\": \"<string>\",\n        \"username\": \"iJ-AK6GI\",\n        \"first_name\": \"<string>\",\n        \"last_name\": \"<string>\",\n        \"department\": \"<string>\",\n        \"job_title\": \"<string>\",\n        \"is_active\": \"<boolean>\"\n      },\n      \"updated_at\": \"<dateTime>\",\n      \"approval_url\": \"<string>\",\n      \"approver_id\": \"<integer>\",\n      \"exceptionplan_attachments\": [\n        {\n          \"exceptionplan_id\": \"<uuid>\",\n          \"filename\": \"<string>\",\n          \"id\": \"<uuid>\",\n          \"url\": \"<string>\",\n          \"s3_path\": \"<string>\"\n        },\n        {\n          \"exceptionplan_id\": \"<uuid>\",\n          \"filename\": \"<string>\",\n          \"id\": \"<uuid>\",\n          \"url\": \"<string>\",\n          \"s3_path\": \"<string>\"\n        }\n      ],\n      \"details\": \"<string>\",\n      \"status\": \"SUBMITTED\",\n      \"type\": \"FALSE_POSITIVE\",\n      \"expiration_date\": \"<dateTime>\",\n      \"vuln_instance_ids\": [\n        \"<string>\",\n        \"<string>\"\n      ],\n      \"query_data\": {\n        \"grouping\": \"VULN_INSTANCE\",\n        \"query\": {\n          \"description\": \"Either query or selected ids must be provided. If no query is provided, all vuln instances for selected ids will be included.\"\n        },\n        \"selected_ids\": [\n          \"<string>\",\n          \"<string>\"\n        ]\n      }\n    }\n  ]\n}"}],"_postman_id":"d2ea11e4-12c4-4562-a47f-4956c8093159"},{"name":"Create Exception Plan","id":"818abe13-fa22-4be0-b42d-5f90f1efbd52","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"apikey","apikey":{"basicConfig":[{"key":"key","value":"X-NOPSEC-API-KEY"},{"key":"value","value":"{{apiKey}}"}]},"isInherited":false},"method":"POST","header":[{"key":"Content-Type","value":"application/x-www-form-urlencoded"},{"key":"Accept","value":"application/json"}],"body":{"mode":"urlencoded","urlencoded":[{"description":"<p>(Required) </p>\n","key":"reason","value":"<string>"},{"key":"approval_url","value":"<string>"},{"key":"exceptionplan_attachments","value":"[object Object]"},{"key":"details","value":"<string>"},{"description":"<ul>\n<li><code>FALSE_POSITIVE</code> - False Positive</li>\n<li><code>RISK_ACCEPTED</code> - Risk Accepted</li>\n<li><code>RISK_MITIGATED</code> - Risk Mitigated</li>\n<li><code>NONE</code> - None</li>\n</ul>\n","key":"type","value":"FALSE_POSITIVE"},{"key":"expiration_date","value":"<dateTime>"},{"description":"<p>Must pass either vuln instance ids or query_data field. If vuln_instance_ids are passed they will be used over query_data.</p>\n","key":"vuln_instance_ids","value":"<string>"},{"key":"grouping","value":"VULN_INSTANCE"},{"key":"query","value":"[object Object]"},{"key":"selected_ids","value":"<string>,<string>"}]},"url":"{{baseUrl}}/remediate/exceptionplan?created_at=<dateTime>&creation_method=<string>&status=<string>","description":"<p><em>Last reviewed: 2026-08-02</em></p>\n<p>Creates an Exception Plan - a request to exclude specific vulnerabilities from remediation, subject to approval.</p>\n<p>A few things worth knowing:</p>\n<ul>\n<li><p><code>reason</code> (required) is a string, not free text - values come from <a href=\"#\">Get Reasons for Exception Plans</a>, which lists what your Admin team has configured.</p>\n</li>\n<li><p><code>type</code> is one of <code>FALSE_POSITIVE</code>, <code>RISK_ACCEPTED</code>, <code>RISK_MITIGATED</code>, <code>NONE</code>.</p>\n</li>\n<li><p><code>vuln_instance_ids</code> vs <code>query</code> / <code>grouping</code> / <code>selected_ids</code>: pass one or the other per the field description.</p>\n</li>\n<li><p>The query params on the URL (<code>created_at</code>, <code>creation_method</code>, <code>status</code>) seems similar to Get Exception Plans.</p>\n</li>\n</ul>\n<p>Example body:</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>reason=Vendor patch scheduled for next maintenance window&amp;type=RISK_ACCEPTED&amp;vuln_instance_ids=a1b2c3d4-e5f6-4789-90ab-cdef01234567&amp;expiration_date=2026-09-01T00:00:00Z\n\n</code></pre>","urlObject":{"path":["remediate","exceptionplan"],"host":["{{baseUrl}}"],"query":[{"key":"created_at","value":"<dateTime>"},{"key":"creation_method","value":"<string>"},{"key":"status","value":"<string>"}],"variable":[]}},"response":[{"id":"047d2445-5eb5-4620-833a-9951940fc85e","name":"Untitled Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/x-www-form-urlencoded"},{"key":"Accept","value":"application/json"},{"description":"Added as a part of security scheme: apikey","key":"X-NOPSEC-API-KEY","value":"<API Key>"}],"body":{"mode":"urlencoded","urlencoded":[{"description":"(Required) ","key":"id","value":"<uuid>"},{"description":"(Required) ","key":"reason","value":"<string>"},{"key":"approval_url","value":"<string>"},{"key":"exceptionplan_attachments","value":"[object Object]"},{"key":"exceptionplan_attachments","value":"[object Object]"},{"key":"details","value":"<string>"},{"description":"* `FALSE_POSITIVE` - False Positive\n* `RISK_ACCEPTED` - Risk Accepted\n* `RISK_MITIGATED` - Risk Mitigated\n* `NONE` - None","key":"type","value":"FALSE_POSITIVE"},{"key":"expiration_date","value":"<dateTime>"},{"description":"Must pass either vuln instance ids or query_data field. If vuln_instance_ids are passed they will be used over query_data.","key":"vuln_instance_ids","value":"<string>"},{"description":"Must pass either vuln instance ids or query_data field. If vuln_instance_ids are passed they will be used over query_data.","key":"vuln_instance_ids","value":"<string>"},{"key":"grouping","value":"VULN_INSTANCE"},{"key":"query","value":"[object Object]"},{"key":"selected_ids","value":"<string>,<string>"}]},"url":{"raw":"{{baseUrl}}/remediate/exceptionplan?created_at=<dateTime>&creation_method=<string>&status=<string>","host":["{{baseUrl}}"],"path":["remediate","exceptionplan"],"query":[{"key":"created_at","value":"<dateTime>"},{"key":"creation_method","value":"<string>"},{"key":"status","value":"<string>"}]}},"status":"Created","code":201,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"action_request_ids\": [],\n  \"id\": \"<uuid>\",\n  \"reason\": \"<string>\",\n  \"approval_url\": \"<string>\",\n  \"exceptionplan_attachments\": [\n    {\n      \"exceptionplan_id\": \"<uuid>\",\n      \"filename\": \"<string>\",\n      \"id\": \"<uuid>\",\n      \"url\": \"<string>\",\n      \"s3_path\": \"<string>\"\n    },\n    {\n      \"exceptionplan_id\": \"<uuid>\",\n      \"filename\": \"<string>\",\n      \"id\": \"<uuid>\",\n      \"url\": \"<string>\",\n      \"s3_path\": \"<string>\"\n    }\n  ],\n  \"details\": \"<string>\",\n  \"type\": \"FALSE_POSITIVE\",\n  \"expiration_date\": \"<dateTime>\",\n  \"vuln_instance_ids\": [\n    \"<string>\",\n    \"<string>\"\n  ],\n  \"query_data\": {\n    \"grouping\": \"VULN_INSTANCE\",\n    \"query\": {\n      \"description\": \"Either query or selected ids must be provided. If no query is provided, all vuln instances for selected ids will be included.\"\n    },\n    \"selected_ids\": [\n      \"<string>\",\n      \"<string>\"\n    ]\n  }\n}"}],"_postman_id":"818abe13-fa22-4be0-b42d-5f90f1efbd52"},{"name":"Get Exception Plan Details","id":"2f5059bf-826b-437f-802e-f751151ce0d6","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"apikey","apikey":{"basicConfig":[{"key":"key","value":"X-NOPSEC-API-KEY"},{"key":"value","value":"{{apiKey}}"}]},"isInherited":false},"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":"{{baseUrl}}/remediate/exceptionplan/:id","description":"<p><em>Last reviewed: 2026-08-02</em></p>\n<p>Get a single Exception Plan by ID.</p>\n<p>Returns everything <a href=\"#\">Get Exception Plans</a> does, plus fields the list endpoint omits: <code>type</code>, <code>expiration_date</code>, <code>reason</code>, <code>submitter</code>, <code>owner</code>, <code>action_request_ids</code>, <code>comment</code>.</p>\n<p>A few things worth knowing:</p>\n<ul>\n<li><p><code>submitter</code>, <code>owner</code>, and <code>approver</code> are three separate full user objects, not always the same person - don't assume one implies another.</p>\n</li>\n<li><p><code>comment</code> is raw HTML, same as <code>details</code> - render accordingly.</p>\n</li>\n<li><p><code>action_request_ids</code> are internal tracking IDs for the async job(s) linked to this plan (same ID family documented on Create Remediation Action) - not vuln instance or plan IDs.</p>\n</li>\n<li><p><code>reason</code> is one of the strings from <a href=\"#\">Get Reasons for Exception Plans</a>, not free text.</p>\n</li>\n</ul>\n<p>Additional fields beyond the Get Exception Plans example (illustrative, not the real record):</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>\"type\": \"RISK_ACCEPTED\",\n\"expiration_date\": \"2026-07-22T19:00:00Z\",\n\"reason\": \"Vendor patch scheduled for next maintenance window\",\n\"submitter\": { ...same shape as approver... },\n\"owner\": { ...same shape as approver... },\n\"action_request_ids\": [\"d8d671d5-6045-4066-9da2-441116687e98\"],\n\"comment\": \"&lt;p class=&amp;#x27;preserveHtml&amp;#x27; class=&amp;#x27;preserveHtml&amp;#x27;&gt;Approved pending vendor confirmation&lt;/p&gt;\"\n\n</code></pre>","urlObject":{"path":["remediate","exceptionplan",":id"],"host":["{{baseUrl}}"],"query":[],"variable":[{"id":"bd9f62b5-8fc0-4035-b822-b3f34f5f695d","description":{"content":"<p>(Required) </p>\n","type":"text/plain"},"type":"any","value":"<uuid>","key":"id"}]}},"response":[{"id":"9894c8d3-5ee3-4410-bb82-5726bb0c3648","name":"Untitled Response","originalRequest":{"method":"GET","header":[{"key":"Accept","value":"application/json"},{"description":"Added as a part of security scheme: apikey","key":"X-NOPSEC-API-KEY","value":"<API Key>"}],"url":{"raw":"{{baseUrl}}/remediate/exceptionplan/:id","host":["{{baseUrl}}"],"path":["remediate","exceptionplan",":id"],"variable":[{"key":"id"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"action_request_ids\": [],\n  \"approval_date\": \"<dateTime>\",\n  \"approver\": {\n    \"email\": \"<email>\",\n    \"full_name\": \"<string>\",\n    \"username\": \"QkRA@h9FvcX\",\n    \"first_name\": \"<string>\",\n    \"last_name\": \"<string>\",\n    \"department\": \"<string>\",\n    \"job_title\": \"<string>\",\n    \"is_active\": \"<boolean>\"\n  },\n  \"created_at\": \"<dateTime>\",\n  \"creation_method\": \"AUTO\",\n  \"id\": \"<uuid>\",\n  \"plan_id\": \"<string>\",\n  \"reason\": \"<string>\",\n  \"submitter\": {\n    \"email\": \"<email>\",\n    \"full_name\": \"<string>\",\n    \"username\": \"kTG.z7JXrr\",\n    \"first_name\": \"<string>\",\n    \"last_name\": \"<string>\",\n    \"department\": \"<string>\",\n    \"job_title\": \"<string>\",\n    \"is_active\": \"<boolean>\"\n  },\n  \"updated_at\": \"<dateTime>\",\n  \"approval_url\": \"<string>\",\n  \"approver_id\": \"<integer>\",\n  \"exceptionplan_attachments\": [\n    {\n      \"exceptionplan_id\": \"<uuid>\",\n      \"filename\": \"<string>\",\n      \"id\": \"<uuid>\",\n      \"url\": \"<string>\",\n      \"s3_path\": \"<string>\"\n    },\n    {\n      \"exceptionplan_id\": \"<uuid>\",\n      \"filename\": \"<string>\",\n      \"id\": \"<uuid>\",\n      \"url\": \"<string>\",\n      \"s3_path\": \"<string>\"\n    }\n  ],\n  \"details\": \"<string>\",\n  \"status\": \"CANCELLED\",\n  \"type\": \"FALSE_POSITIVE\",\n  \"expiration_date\": \"<dateTime>\",\n  \"vuln_instance_ids\": [\n    \"<string>\",\n    \"<string>\"\n  ],\n  \"query_data\": {\n    \"grouping\": \"TARGET\",\n    \"query\": {\n      \"description\": \"Either query or selected ids must be provided. If no query is provided, all vuln instances for selected ids will be included.\"\n    },\n    \"selected_ids\": [\n      \"<string>\",\n      \"<string>\"\n    ]\n  }\n}"}],"_postman_id":"2f5059bf-826b-437f-802e-f751151ce0d6"},{"name":"Get Exception Plan Vuln Instances","id":"fb335a9f-356f-49ad-a56e-c0471acbec49","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"apikey","apikey":{"basicConfig":[{"key":"key","value":"X-NOPSEC-API-KEY"},{"key":"value","value":"{{apiKey}}"}]},"isInherited":false},"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":"{{baseUrl}}/remediate/exceptionplan/:plan_id/vuln_instance","description":"<p><em>Last reviewed: 2026-08-02</em></p>\n<p>Retrieve the vuln instances covered by a specific Exception Plan, with target and vulnerability detail attached.</p>\n<p>Standard paginated envelope, but the objects inside <code>results</code> are <strong>flat with dotted-string keys</strong> (e.g. <code>\"vuln_instance_data.derived.combined_status\"</code>), not nested JSON like every other endpoint in this collection. Parse accordingly - don't assume you can walk <code>result.vuln_instance_data.derived.combined_status</code> as nested objects.</p>\n<p>A few things worth knowing:</p>\n<ul>\n<li><p><strong>No</strong> <strong><code>id</code></strong> <strong>or</strong> <strong><code>vuln_instance_id</code></strong> <strong>field anywhere in the response</strong>, despite the endpoint name. If you need to reference these instances elsewhere (e.g. <code>vuln_instance_ids</code> on Create Exception Plan), there's nothing here to grab - <code>vulnerability_data.scanner_vuln_id</code> (a CVE) plus target name/location is the closest thing to an identifier.</p>\n</li>\n<li><p>Each result embeds its own <code>vuln_instance_data.exception_plan.\\*</code> fields (<code>type</code>, <code>reason</code>, <code>expiration_date</code>, <code>status</code>, <code>approval_date</code>).</p>\n</li>\n<li><p><code>vulnerability_data.vuln_info.description</code> is a long summary/impact/remediation blob, not a short string - plan for it in UI layouts.</p>\n</li>\n</ul>\n","urlObject":{"path":["remediate","exceptionplan",":plan_id","vuln_instance"],"host":["{{baseUrl}}"],"query":[{"disabled":true,"description":{"content":"<p>Number of results to return per page.</p>\n","type":"text/plain"},"key":"limit","value":"<integer>"},{"disabled":true,"description":{"content":"<p>The initial index from which to return the results.</p>\n","type":"text/plain"},"key":"offset","value":"<integer>"}],"variable":[{"id":"e8605746-6225-4707-9f3c-055ee6960642","description":{"content":"<p>(Required) </p>\n","type":"text/plain"},"type":"any","value":"<uuid>","key":"plan_id"}]}},"response":[{"id":"aa79d7a9-a278-4023-96fc-c2074bc15fcb","name":"Untitled Response","originalRequest":{"method":"GET","header":[{"key":"Accept","value":"application/json"},{"key":"X-NOPSEC-API-KEY","value":"<API Key>","description":"Added as a part of security scheme: apikey"}],"url":{"raw":"{{baseUrl}}/remediate/exceptionplan/:plan_id/vuln_instance?limit=<integer>&offset=<integer>","host":["{{baseUrl}}"],"path":["remediate","exceptionplan",":plan_id","vuln_instance"],"query":[{"key":"limit","value":"<integer>","description":"Number of results to return per page."},{"key":"offset","value":"<integer>","description":"The initial index from which to return the results."}],"variable":[{"key":"plan_id","value":""}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"count\": \"<integer>\",\n  \"next\": \"<uri>\",\n  \"previous\": \"<uri>\",\n  \"results\": [\n    {\n      \"derived_target_criticality\": \"HIGH\",\n      \"derived_target_division\": \"<string>\",\n      \"derived_target_risk_grade\": \"<string>\",\n      \"derived_target_risk_score\": \"<double>\",\n      \"derived_vuln_cve_list\": [\n        \"<string>\",\n        \"<string>\"\n      ],\n      \"derived_vuln_risk_grade\": \"<string>\",\n      \"derived_vuln_risk_score\": \"<double>\",\n      \"exceptionplan_status\": \"<string>\",\n      \"first_detected_date\": \"<dateTime>\",\n      \"id\": \"<uuid>\",\n      \"remediation_date\": \"<dateTime>\",\n      \"status\": \"<string>\",\n      \"target_id\": \"<uuid>\",\n      \"target_location\": \"<string>\",\n      \"target_name\": \"<string>\",\n      \"target_type\": \"<string>\",\n      \"vuln_cves\": [],\n      \"vuln_cwes\": [],\n      \"vuln_description\": \"<string>\",\n      \"vuln_id\": \"<uuid>\",\n      \"vuln_max_cvssv3\": \"<double>\",\n      \"vuln_title\": \"<string>\"\n    },\n    {\n      \"derived_target_criticality\": \"CRITICAL\",\n      \"derived_target_division\": \"<string>\",\n      \"derived_target_risk_grade\": \"<string>\",\n      \"derived_target_risk_score\": \"<double>\",\n      \"derived_vuln_cve_list\": [\n        \"<string>\",\n        \"<string>\"\n      ],\n      \"derived_vuln_risk_grade\": \"<string>\",\n      \"derived_vuln_risk_score\": \"<double>\",\n      \"exceptionplan_status\": \"<string>\",\n      \"first_detected_date\": \"<dateTime>\",\n      \"id\": \"<uuid>\",\n      \"remediation_date\": \"<dateTime>\",\n      \"status\": \"<string>\",\n      \"target_id\": \"<uuid>\",\n      \"target_location\": \"<string>\",\n      \"target_name\": \"<string>\",\n      \"target_type\": \"<string>\",\n      \"vuln_cves\": [],\n      \"vuln_cwes\": [],\n      \"vuln_description\": \"<string>\",\n      \"vuln_id\": \"<uuid>\",\n      \"vuln_max_cvssv3\": \"<double>\",\n      \"vuln_title\": \"<string>\"\n    }\n  ]\n}"}],"_postman_id":"fb335a9f-356f-49ad-a56e-c0471acbec49"},{"name":"Get Reasons for Exception Plans","id":"942d3120-75d1-4de3-b686-978b0f3c2dd3","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"apikey","apikey":{"basicConfig":[{"key":"key","value":"X-NOPSEC-API-KEY"},{"key":"value","value":"{{apiKey}}"}]},"isInherited":false},"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":"{{baseUrl}}/remediate/exceptionplan/client-setting","description":"<p><em>Last reviewed: 2026-08-02</em></p>\n<p>A Reason is required to create an Exception Plan. Reasons are configured per-client by your Admin team - use this to get the valid strings and pass one verbatim as <code>reason</code> in <a href=\"#\">Create Exception Plan</a>.</p>\n<p>Response is <code>{\"exceptionplan_reasons\": [...]}</code> - a flat array of strings, not objects, and not wrapped in the standard paginated envelope.</p>\n","urlObject":{"path":["remediate","exceptionplan","client-setting"],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[{"id":"e6c66d3c-8424-4580-be00-8e17f13395ee","name":"Untitled Response","originalRequest":{"method":"GET","header":[{"key":"Accept","value":"application/json"},{"description":"Added as a part of security scheme: apikey","key":"X-NOPSEC-API-KEY","value":"<API Key>"}],"url":"{{baseUrl}}/remediate/exceptionplan/client-setting"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"exceptionplan_reasons\": [\n    \"<string>\",\n    \"<string>\"\n  ]\n}"}],"_postman_id":"942d3120-75d1-4de3-b686-978b0f3c2dd3"}],"id":"60d87982-d2f0-474f-aebf-dfc3861126fb","_postman_id":"60d87982-d2f0-474f-aebf-dfc3861126fb","description":""},{"name":"Remediation Actions","item":[{"name":"Get ITSM Destination Setting Detail","id":"a3dfb8f9-0d0f-4761-9bab-828d0ca6d619","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"apikey","apikey":{"basicConfig":[{"key":"key","value":"X-NOPSEC-API-KEY"},{"key":"value","value":"{{apiKey}}"}]},"isInherited":false},"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":"{{baseUrl}}/remediate/itsm/:group_by/destination","description":"<p><em>Last reviewed: 2026-08-02</em></p>\n<p>Lists the active ITSM destinations available for a given <code>group_by</code> value.</p>\n<p>A few things worth knowing:</p>\n<ul>\n<li><p>Each result has <strong>two IDs</strong>: the top-level <code>id</code> (this group_by-to-destination association) and the nested <code>itsm_destination.id</code> (the destination itself). This nested <code>itsm_destination.id</code> is the value that shows up as <code>itsm_destination_id</code> on <a href=\"#\">Get Remediation Action Details</a> for a real action pointed at this destination - matching <code>id</code>, <code>name</code>, and <code>destination</code> exactly.</p>\n</li>\n<li><p><code>group_by</code> in the path must be a valid grouping value (e.g. <code>TARGET</code>, <code>ASSET</code>) - untested whether other values return different or empty destination lists for this client.</p>\n</li>\n</ul>\n<p>Example (illustrative, not the real record):</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{\n  \"count\": 1,\n  \"results\": [{\n    \"id\": \"a1b2c3d4-e5f6-4789-90ab-cdef01234567\",\n    \"group_by\": \"VULNERABILITY\",\n    \"is_active\": true,\n    \"itsm_destination\": {\n      \"id\": \"b2c3d4e5-f6a7-4861-91bc-def012345678\",\n      \"name\": \"UVRM\",\n      \"destination\": \"UVRM\",\n      \"is_active\": true,\n      \"itsm_integration_name\": \"Jira Test 01\",\n      \"itsm_product_name\": \"JIRA\",\n      \"itsm_product_logo\": \"https://assets.nopsec.com/assets/jira_logo.png\"\n    }\n  }]\n}\n\n</code></pre>","urlObject":{"path":["remediate","itsm",":group_by","destination"],"host":["{{baseUrl}}"],"query":[{"disabled":true,"description":{"content":"<p>Number of results to return per page.</p>\n","type":"text/plain"},"key":"limit","value":"<integer>"},{"disabled":true,"description":{"content":"<p>The initial index from which to return the results.</p>\n","type":"text/plain"},"key":"offset","value":"<integer>"}],"variable":[{"id":"645ad82b-db66-4dff-8041-481bdcdccfe3","description":{"content":"<p>(Required) </p>\n","type":"text/plain"},"type":"any","value":"TARGET","key":"group_by"}]}},"response":[{"id":"e870d331-323b-4e46-b4fd-50a15eab25a4","name":"Untitled Response","originalRequest":{"method":"GET","header":[{"key":"Accept","value":"application/json"},{"description":"Added as a part of security scheme: apikey","key":"X-NOPSEC-API-KEY","value":"<API Key>"}],"url":{"raw":"{{baseUrl}}/remediate/itsm/:group_by/destination?limit=<integer>&offset=<integer>","host":["{{baseUrl}}"],"path":["remediate","itsm",":group_by","destination"],"query":[{"description":"Number of results to return per page.","key":"limit","value":"<integer>"},{"description":"The initial index from which to return the results.","key":"offset","value":"<integer>"}],"variable":[{"key":"group_by"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"count\": \"<integer>\",\n  \"next\": \"<uri>\",\n  \"previous\": \"<uri>\",\n  \"results\": [\n    {\n      \"group_by\": \"TARGET\",\n      \"id\": \"<uuid>\",\n      \"itsm_destination\": {\n        \"destination\": \"<string>\",\n        \"id\": \"<uuid>\",\n        \"itsm_integration_name\": \"<string>\",\n        \"itsm_product_logo\": \"<string>\",\n        \"itsm_product_name\": \"<string>\",\n        \"name\": \"<string>\",\n        \"is_active\": \"<boolean>\"\n      },\n      \"is_active\": \"<boolean>\"\n    },\n    {\n      \"group_by\": \"VULN\",\n      \"id\": \"<uuid>\",\n      \"itsm_destination\": {\n        \"destination\": \"<string>\",\n        \"id\": \"<uuid>\",\n        \"itsm_integration_name\": \"<string>\",\n        \"itsm_product_logo\": \"<string>\",\n        \"itsm_product_name\": \"<string>\",\n        \"name\": \"<string>\",\n        \"is_active\": \"<boolean>\"\n      },\n      \"is_active\": \"<boolean>\"\n    }\n  ]\n}"}],"_postman_id":"a3dfb8f9-0d0f-4761-9bab-828d0ca6d619"},{"name":"Get Remediation Actions","id":"835e9e57-35db-49f3-94cb-b3d321528d1a","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"apikey","apikey":{"basicConfig":[{"key":"key","value":"X-NOPSEC-API-KEY"},{"key":"value","value":"{{apiKey}}"}]},"isInherited":false},"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":"{{baseUrl}}/remediate/remediationplan/action","description":"<p><em>Last reviewed: 2026-08-02</em></p>\n<p>Lists remediation actions you have access to. An Action holds one or more Plans depending on the <code>group_by</code> used to create it; each Plan tracks one or more vuln instances.</p>\n<p>A few things worth knowing:</p>\n<ul>\n<li><p>Each action has <strong>two IDs</strong>: <code>action_id</code> (a short numeric string, e.g. <code>\"424\"</code>) and <code>id</code> (a UUID). Use <code>id</code> for the path on <a href=\"#\">Get Remediation Action Details</a> and <a href=\"#\">Get Plans in Remediation Action</a>.</p>\n</li>\n<li><p>Ownership is represented three different ways on the same object: <code>owner</code> (full user object), <code>owner_id</code> (duplicate of <code>owner.id</code>), and <code>owners</code> (an array with a different, flatter shape that includes <code>type: \"user\"</code> - implying it may also support <code>type: \"team\"</code>, untested). <code>submitter</code> is yet another full user object, and can differ from <code>owner</code>.</p>\n</li>\n<li><p><code>itsm_destination_id</code> / <code>itsm_destination</code> follow the same pattern as <a href=\"#\">Get ITSM Destination Setting Detail</a> - both null here since this action has no ITSM destination set.</p>\n</li>\n<li><p><code>total_plans_count</code> / <code>total_vuln_instances_count</code> and <code>remediated_vuln_instances_count</code> / <code>excepted_vuln_instances_count</code> give you action-level rollups without needing to call Get Plans in Remediation Action separately.</p>\n</li>\n</ul>\n<p>Query params (all optional): <code>created_at</code>, <code>creation_method</code>, <code>due_date</code>, <code>is_canceled</code>, <code>limit</code>, <code>offset</code>, <code>ordering</code>, <code>search</code>, <code>team_id</code>.</p>\n<p>Example (illustrative, PII scrubbed - real record had a real employee's name/email in <code>owner</code>/<code>submitter</code>/<code>owners</code>):</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{\n  \"action_id\": \"424\",\n  \"id\": \"a1b2c3d4-e5f6-4789-90ab-cdef01234567\",\n  \"name\": \"Example Action - 20260801 1353\",\n  \"group_by\": \"VULN_INSTANCE\",\n  \"creation_method\": \"AUTO\",\n  \"is_canceled\": false,\n  \"itsm_destination_id\": null,\n  \"itsm_destination\": null,\n  \"owner\": { \"id\": 56, \"full_name\": \"Jane Smith\", \"email\": \"jane.smith@example.com\" },\n  \"owner_id\": 56,\n  \"owners\": [{ \"id\": 56, \"name\": \"Jane Smith\", \"type\": \"user\", \"email\": \"jane.smith@example.com\" }],\n  \"submitter\": { \"id\": 56, \"full_name\": \"Jane Smith\", \"email\": \"jane.smith@example.com\" },\n  \"remediated_vuln_instances_count\": 0,\n  \"excepted_vuln_instances_count\": 0,\n  \"total_plans_count\": 5,\n  \"total_vuln_instances_count\": 5\n}\n\n</code></pre>","urlObject":{"path":["remediate","remediationplan","action"],"host":["{{baseUrl}}"],"query":[{"disabled":true,"key":"created_at","value":"<dateTime>"},{"disabled":true,"key":"creation_method","value":"<string>"},{"disabled":true,"key":"due_date","value":"<date>"},{"disabled":true,"key":"is_canceled","value":"<boolean>"},{"disabled":true,"description":{"content":"<p>Number of results to return per page.</p>\n","type":"text/plain"},"key":"limit","value":"<integer>"},{"disabled":true,"description":{"content":"<p>The initial index from which to return the results.</p>\n","type":"text/plain"},"key":"offset","value":"<integer>"},{"disabled":true,"description":{"content":"<p>Which field to use when ordering the results.</p>\n","type":"text/plain"},"key":"ordering","value":"<string>"},{"disabled":true,"description":{"content":"<p>A search term.</p>\n","type":"text/plain"},"key":"search","value":"<string>"},{"disabled":true,"key":"team_id","value":"<uuid>"}],"variable":[]}},"response":[{"id":"c0900144-a444-4657-911c-e1b90f84ce87","name":"Untitled Response","originalRequest":{"method":"GET","header":[{"key":"Accept","value":"application/json"},{"description":"Added as a part of security scheme: apikey","key":"X-NOPSEC-API-KEY","value":"<API Key>"}],"url":{"raw":"{{baseUrl}}/remediate/remediationplan/action?created_at=<dateTime>&creation_method=<string>&due_date=<date>&is_canceled=<boolean>&limit=<integer>&offset=<integer>&ordering=<string>&search=<string>&team_id=<uuid>","host":["{{baseUrl}}"],"path":["remediate","remediationplan","action"],"query":[{"key":"created_at","value":"<dateTime>"},{"key":"creation_method","value":"<string>"},{"key":"due_date","value":"<date>"},{"key":"is_canceled","value":"<boolean>"},{"description":"Number of results to return per page.","key":"limit","value":"<integer>"},{"description":"The initial index from which to return the results.","key":"offset","value":"<integer>"},{"description":"Which field to use when ordering the results.","key":"ordering","value":"<string>"},{"description":"A search term.","key":"search","value":"<string>"},{"key":"team_id","value":"<uuid>"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"count\": \"<integer>\",\n  \"next\": \"<uri>\",\n  \"previous\": \"<uri>\",\n  \"results\": [\n    {\n      \"action_id\": \"<string>\",\n      \"action_request_ids\": [],\n      \"created_at\": \"<dateTime>\",\n      \"group_by\": \"TARGET\",\n      \"id\": \"<uuid>\",\n      \"itsm_destination\": {\n        \"destination\": \"<string>\",\n        \"id\": \"<uuid>\",\n        \"itsm_integration_name\": \"<string>\",\n        \"itsm_product_logo\": \"<string>\",\n        \"itsm_product_name\": \"<string>\",\n        \"name\": \"<string>\",\n        \"is_active\": \"<boolean>\"\n      },\n      \"name\": \"<string>\",\n      \"remediated_vuln_instances_count\": \"<integer>\",\n      \"submitter\": {\n        \"email\": \"<email>\",\n        \"full_name\": \"<string>\",\n        \"username\": \"v9N_xff\",\n        \"first_name\": \"<string>\",\n        \"last_name\": \"<string>\",\n        \"department\": \"<string>\",\n        \"job_title\": \"<string>\",\n        \"is_active\": \"<boolean>\"\n      },\n      \"total_plans_count\": \"<integer>\",\n      \"total_vuln_instances_count\": \"<integer>\",\n      \"updated_at\": \"<dateTime>\",\n      \"is_canceled\": \"<boolean>\",\n      \"creation_method\": \"AUTO\",\n      \"created_by\": \"<string>\",\n      \"vuln_instance_ids\": [\n        \"<string>\",\n        \"<string>\"\n      ],\n      \"query_data\": {\n        \"grouping\": \"VULN_INSTANCE\",\n        \"query\": {\n          \"description\": \"Either query or selected ids must be provided. If no query is provided, all vuln instances for selected ids will be included.\"\n        },\n        \"selected_ids\": [\n          \"<string>\",\n          \"<string>\"\n        ]\n      },\n      \"itsm_destination_id\": \"<uuid>\",\n      \"due_date\": \"<dateTime>\",\n      \"details\": \"<string>\",\n      \"max_number_created\": \"<integer>\"\n    },\n    {\n      \"action_id\": \"<string>\",\n      \"action_request_ids\": [],\n      \"created_at\": \"<dateTime>\",\n      \"group_by\": \"NO_GROUP\",\n      \"id\": \"<uuid>\",\n      \"itsm_destination\": {\n        \"destination\": \"<string>\",\n        \"id\": \"<uuid>\",\n        \"itsm_integration_name\": \"<string>\",\n        \"itsm_product_logo\": \"<string>\",\n        \"itsm_product_name\": \"<string>\",\n        \"name\": \"<string>\",\n        \"is_active\": \"<boolean>\"\n      },\n      \"name\": \"<string>\",\n      \"remediated_vuln_instances_count\": \"<integer>\",\n      \"submitter\": {\n        \"email\": \"<email>\",\n        \"full_name\": \"<string>\",\n        \"username\": \"-LC+Rl0bog\",\n        \"first_name\": \"<string>\",\n        \"last_name\": \"<string>\",\n        \"department\": \"<string>\",\n        \"job_title\": \"<string>\",\n        \"is_active\": \"<boolean>\"\n      },\n      \"total_plans_count\": \"<integer>\",\n      \"total_vuln_instances_count\": \"<integer>\",\n      \"updated_at\": \"<dateTime>\",\n      \"is_canceled\": \"<boolean>\",\n      \"creation_method\": \"AUTO\",\n      \"created_by\": \"<string>\",\n      \"vuln_instance_ids\": [\n        \"<string>\",\n        \"<string>\"\n      ],\n      \"query_data\": {\n        \"grouping\": \"VULNERABILITY\",\n        \"query\": {\n          \"description\": \"Either query or selected ids must be provided. If no query is provided, all vuln instances for selected ids will be included.\"\n        },\n        \"selected_ids\": [\n          \"<string>\",\n          \"<string>\"\n        ]\n      },\n      \"itsm_destination_id\": \"<uuid>\",\n      \"due_date\": \"<dateTime>\",\n      \"details\": \"<string>\",\n      \"max_number_created\": \"<integer>\"\n    }\n  ]\n}"}],"_postman_id":"835e9e57-35db-49f3-94cb-b3d321528d1a"},{"name":"Create Remediation Action","id":"be8a04c5-3872-4a50-8e56-a5e298a92fb0","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"apikey","apikey":{"basicConfig":[{"key":"key","value":"X-NOPSEC-API-KEY"},{"key":"value","value":"{{apiKey}}"}]},"isInherited":false},"method":"POST","header":[{"key":"Content-Type","value":"application/x-www-form-urlencoded"},{"key":"Accept","value":"application/json"}],"body":{"mode":"urlencoded","urlencoded":[{"description":"<p>(Required) </p>\n","key":"group_by","value":"TARGET"},{"description":"<p>(Required) </p>\n","key":"name","value":"<string>"},{"key":"vuln_instance_ids","value":"<uuid>","description":"<p>One of vuln_instance_ids or a saved-query field is required. Confirmed live: a list of real vuln instance UUIDs works standalone alongside just group_by and name (no grouping/query/selected_ids needed).</p>\n","disabled":true},{"key":"grouping","value":"VULNERABILITY","description":"<p>Unverified. Not required alongside vuln_instance_ids (confirmed unnecessary live). Likely relates to the \"query ID\" creation path mentioned in this endpoint's description, but the exact field shape was not confirmed live in this review - test explicitly before relying on grouping/query/selected_ids.</p>\n","disabled":true},{"key":"query","value":"[object Object]","disabled":true},{"key":"selected_ids","value":"<string>,<string>","disabled":true},{"key":"itsm_destination_id","value":"<uuid>","description":"<p>Optional. Confirmed live (2026-07-31): omitting this creates the Remediation Action fine (201, id returned), but resulted in ZERO Plans ever appearing in Get Plans in Remediation Action, checked immediately and after 20+ seconds, with both TARGET and ASSET group_by. This contradicts the \"Local Only destination is set if no destination is provided\" description below, which implies a Plan should still be created. Possible product bug - use a real itsm_destination_id (see Get ITSM Destination Setting Detail) if you need the action to actually produce a visible Plan.</p>\n","disabled":true},{"key":"due_date","value":"<dateTime>","disabled":true},{"key":"details","value":"<string>","disabled":true},{"key":"max_number_created","value":"<integer>","disabled":true}]},"url":"{{baseUrl}}/remediate/remediationplan/action","description":"<p><em>Last reviewed: 2026-07-31</em></p>\n<p>Create a remediation action from either a list of specific vuln instance IDs, or (in theory) a saved query. Depending on the Group By you choose, this generates one or more Plans underneath the action - a Plan is what would become a ticket or email to your ITSM if you pointed the action at a real destination instead of leaving it Local Only.</p>\n<ul>\n<li><p><code>id</code> should NOT be sent in the request - it's a response-only field (the server generates it). The request form used to list it as required; that was a documentation bug, now fixed.</p>\n</li>\n<li><p><code>vuln_instance_ids</code> only needs to appear once. The form used to list it twice; that duplicate has been removed.</p>\n</li>\n<li><p>Creating with just <code>group_by</code>, <code>name</code>, and <code>vuln_instance_ids</code> (a list of real vuln instance UUIDs) works on its own - no <code>grouping</code>, <code>query</code>, or <code>selected_ids</code> needed. It will return<code>201 Created</code> with a generated <code>id</code> and an <code>action_request_ids</code> array.</p>\n</li>\n</ul>\n<p><strong>Work example:</strong></p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>POST {{baseUrl}}/remediate/remediationplan/action\nContent-Type: application/x-www-form-urlencoded\ngroup_by=ASSET&amp;name=Test action&amp;vuln_instance_ids=c17f0028-33a9-4826-931c-8d06d5e90b6c\n\n</code></pre><p>Response (<code>201 Created</code>):</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"id\": \"9264a2ab-4858-49a5-931c-b9dd8f263cc7\",\n    \"name\": \"Test action\",\n    \"group_by\": \"ASSET\",\n    \"itsm_destination_id\": null,\n    \"due_date\": null,\n    \"details\": \"\",\n    \"action_request_ids\": [\n        \"d8d671d5-6045-4066-9da2-441116687e98\"\n    ]\n}\n\n</code></pre>\n<p>Note the response does NOT echo back <code>vuln_instance_ids</code> - only <code>action_request_ids</code>, an internal tracking ID for the async job that turns your request into Plans.</p>\n<p>Depending on your Group By setting there may be one or more Plans created. You can think of Plans as the tickets or emails that would be sent to your ITSM if you selected a destination other than Local Only.</p>\n","urlObject":{"path":["remediate","remediationplan","action"],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[{"id":"960d5218-4724-480a-a0fa-673d6a07083f","name":"Untitled Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/x-www-form-urlencoded"},{"key":"Accept","value":"application/json"},{"description":"Added as a part of security scheme: apikey","key":"X-NOPSEC-API-KEY","value":"<API Key>"}],"body":{"mode":"urlencoded","urlencoded":[{"description":"(Required) ","key":"group_by","value":"TARGET"},{"description":"(Required) ","key":"id","value":"<uuid>"},{"description":"(Required) ","key":"name","value":"<string>"},{"key":"vuln_instance_ids","value":"<string>"},{"key":"vuln_instance_ids","value":"<string>"},{"key":"grouping","value":"VULNERABILITY"},{"key":"query","value":"[object Object]"},{"key":"selected_ids","value":"<string>,<string>"},{"key":"itsm_destination_id","value":"<uuid>"},{"key":"due_date","value":"<dateTime>"},{"key":"details","value":"<string>"},{"key":"max_number_created","value":"<integer>"}]},"url":"{{baseUrl}}/remediate/remediationplan/action"},"status":"Created","code":201,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"action_request_ids\": [],\n  \"group_by\": \"TARGET\",\n  \"id\": \"<uuid>\",\n  \"name\": \"<string>\",\n  \"vuln_instance_ids\": [\n    \"<string>\",\n    \"<string>\"\n  ],\n  \"query_data\": {\n    \"grouping\": \"VULNERABILITY\",\n    \"query\": {\n      \"description\": \"Either query or selected ids must be provided. If no query is provided, all vuln instances for selected ids will be included.\"\n    },\n    \"selected_ids\": [\n      \"<string>\",\n      \"<string>\"\n    ]\n  },\n  \"itsm_destination_id\": \"<uuid>\",\n  \"due_date\": \"<dateTime>\",\n  \"details\": \"<string>\",\n  \"max_number_created\": \"<integer>\"\n}"}],"_postman_id":"be8a04c5-3872-4a50-8e56-a5e298a92fb0"},{"name":"Get Plans in Remediation Action","id":"5aff5258-e445-45d4-97bc-544a0cf02466","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"apikey","apikey":{"basicConfig":[{"key":"key","value":"X-NOPSEC-API-KEY"},{"key":"value","value":"{{apiKey}}"}]},"isInherited":false},"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":"{{baseUrl}}/remediate/remediationplan/action/:action_id/plan","description":"<p><em>Last reviewed: 2026-08-02</em></p>\n<p>Lists the Plans created by a specific Remediation Action. Use it to get Plan IDs before calling <a href=\"#\">Get Plan Details</a> or <a href=\"#\">Get Vuln Instances within Plan</a>.</p>\n<p>The <code>action_id</code> path segment is the <code>id</code> UUID field from <a href=\"#\">Get Remediation Actions</a>, not the shorter <code>action_id</code> field shown in that response.</p>\n<p>A few things worth knowing:</p>\n<ul>\n<li><p>Same <strong>two-ID pattern</strong> as elsewhere: each Plan has <code>id</code> (a UUID - use this for Get Plan Details / Get Vuln Instances within Plan) and <code>plan_id</code> (a human-readable code like <code>\"421-1\"</code>).</p>\n</li>\n<li><p>Same <strong>triple ownership representation</strong> as Get Remediation Actions: <code>owner</code> (object), <code>owner_id</code> (duplicate), <code>owners</code> (array), plus a separate <code>submitter</code> object.</p>\n</li>\n<li><p><code>itsmticket</code> nests the actual ITSM ticket info (destination, ticket id) if one was created for this Plan - <code>destination</code> at the Plan level (e.g. <code>\"UVRM\"</code>) is a plain string, not the full object you'd get from <a href=\"#\">Get ITSM Destination Setting Detail</a>.</p>\n</li>\n<li><p><code>total_vuln_instances_count</code> here is per-Plan, not per-Action - don't confuse it with the same-named field on Get Remediation Actions.</p>\n</li>\n</ul>\n<p>Query params (all optional): <code>limit</code>, <code>offset</code>, <code>ordering</code>, <code>search</code>.</p>\n<p>Example (illustrative, PII scrubbed - real record had a real employee's name/email in <code>owner</code>/<code>submitter</code>/<code>owners</code>):</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{\n  \"id\": \"a1b2c3d4-e5f6-4789-90ab-cdef01234567\",\n  \"plan_id\": \"421-1\",\n  \"group_by\": \"ASSET\",\n  \"status\": \"IN_PROGRESS\",\n  \"submitter\": { \"id\": 1873, \"full_name\": \"Jane Smith\", \"email\": \"jane.smith@example.com\" },\n  \"owner\": { \"id\": 1873, \"full_name\": \"Jane Smith\", \"email\": \"jane.smith@example.com\" },\n  \"owners\": [{ \"id\": 1873, \"name\": \"Jane Smith\", \"type\": \"user\" }],\n  \"remediated_vuln_instances_count\": 0,\n  \"excepted_vuln_instances_count\": 0,\n  \"total_vuln_instances_count\": 198,\n  \"destination\": \"UVRM\",\n  \"itsmticket\": {\n    \"id\": \"b2c3d4e5-f6a7-4890-91bc-def012345678\",\n    \"remediation_plan_id\": \"a1b2c3d4-e5f6-4789-90ab-cdef01234567\"\n  }\n}\n\n</code></pre>","urlObject":{"path":["remediate","remediationplan","action",":action_id","plan"],"host":["{{baseUrl}}"],"query":[{"disabled":true,"description":{"content":"<p>Number of results to return per page.</p>\n","type":"text/plain"},"key":"limit","value":"<integer>"},{"disabled":true,"description":{"content":"<p>The initial index from which to return the results.</p>\n","type":"text/plain"},"key":"offset","value":"<integer>"},{"disabled":true,"description":{"content":"<p>Which field to use when ordering the results.</p>\n","type":"text/plain"},"key":"ordering","value":"<string>"},{"disabled":true,"description":{"content":"<p>A search term.</p>\n","type":"text/plain"},"key":"search","value":"<string>"}],"variable":[{"id":"a1467199-a39b-46fd-ae37-c9cfe29f8799","description":{"content":"<p>(Required) </p>\n","type":"text/plain"},"type":"any","value":"<uuid>","key":"action_id"}]}},"response":[{"id":"80bee676-779f-41af-8d6a-84d440485b73","name":"Untitled Response","originalRequest":{"method":"GET","header":[{"key":"Accept","value":"application/json"},{"description":"Added as a part of security scheme: apikey","key":"X-NOPSEC-API-KEY","value":"<API Key>"}],"url":{"raw":"{{baseUrl}}/remediate/remediationplan/action/:action_id/plan?limit=<integer>&offset=<integer>&ordering=<string>&search=<string>","host":["{{baseUrl}}"],"path":["remediate","remediationplan","action",":action_id","plan"],"query":[{"description":"Number of results to return per page.","key":"limit","value":"<integer>"},{"description":"The initial index from which to return the results.","key":"offset","value":"<integer>"},{"description":"Which field to use when ordering the results.","key":"ordering","value":"<string>"},{"description":"A search term.","key":"search","value":"<string>"}],"variable":[{"key":"action_id"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"count\": \"<integer>\",\n  \"next\": \"<uri>\",\n  \"previous\": \"<uri>\",\n  \"results\": [\n    {\n      \"action_request_ids\": [],\n      \"created_at\": \"<dateTime>\",\n      \"creation_method\": \"<string>\",\n      \"derived_vuln_instance_info\": {\n        \"derived_target_criticality\": \"LOW\",\n        \"derived_target_risk_grade\": \"<string>\",\n        \"derived_target_risk_score\": \"<double>\",\n        \"derived_vuln_cve_list\": [\n          \"<string>\",\n          \"<string>\"\n        ],\n        \"derived_vuln_risk_grade\": \"<string>\",\n        \"derived_vuln_risk_score\": \"<double>\",\n        \"exceptionplan_status\": \"<string>\",\n        \"first_detected_date\": \"<dateTime>\",\n        \"id\": \"<uuid>\",\n        \"remediation_date\": \"<dateTime>\",\n        \"status\": \"<string>\",\n        \"target_id\": \"<uuid>\",\n        \"target_location\": \"<string>\",\n        \"target_name\": \"<string>\",\n        \"target_type\": \"<string>\",\n        \"vuln_description\": \"<string>\",\n        \"vuln_id\": \"<uuid>\",\n        \"vuln_max_cvssv3\": \"<double>\",\n        \"vuln_title\": \"<string>\"\n      },\n      \"details\": \"<string>\",\n      \"due_date\": \"<string>\",\n      \"group_by\": \"<string>\",\n      \"id\": \"<uuid>\",\n      \"itsmticket\": {\n        \"destination_users\": [\n          {\n            \"email\": \"<email>\",\n            \"full_name\": \"<string>\",\n            \"username\": \"Fh\",\n            \"first_name\": \"<string>\",\n            \"last_name\": \"<string>\",\n            \"department\": \"<string>\",\n            \"job_title\": \"<string>\",\n            \"is_active\": \"<boolean>\"\n          },\n          {\n            \"email\": \"<email>\",\n            \"full_name\": \"<string>\",\n            \"username\": \"LOPUmNW@\",\n            \"first_name\": \"<string>\",\n            \"last_name\": \"<string>\",\n            \"department\": \"<string>\",\n            \"job_title\": \"<string>\",\n            \"is_active\": \"<boolean>\"\n          }\n        ],\n        \"ext_url\": \"<string>\",\n        \"group_by\": \"NO_GROUP\",\n        \"id\": \"<uuid>\",\n        \"itsm_destination\": {\n          \"destination\": \"<string>\",\n          \"id\": \"<uuid>\",\n          \"itsm_integration_name\": \"<string>\",\n          \"itsm_product_logo\": \"<string>\",\n          \"itsm_product_name\": \"<string>\",\n          \"name\": \"<string>\",\n          \"is_active\": \"<boolean>\"\n        },\n        \"remediation_plan_id\": \"<uuid>\",\n        \"internal_status\": \"<string>\",\n        \"ext_id\": \"<string>\",\n        \"ext_number\": \"<string>\",\n        \"ext_status\": \"<string>\",\n        \"ext_assignee\": \"<string>\",\n        \"destination_ext_email_list\": [\n          \"<string>\",\n          \"<string>\"\n        ]\n      },\n      \"plan_id\": \"<string>\",\n      \"remediated_vuln_instances_count\": \"<integer>\",\n      \"remediation_action_id\": \"<uuid>\",\n      \"status\": \"<string>\",\n      \"submitter\": {\n        \"email\": \"<email>\",\n        \"full_name\": \"<string>\",\n        \"username\": \"_Z6BOVtjK\",\n        \"first_name\": \"<string>\",\n        \"last_name\": \"<string>\",\n        \"department\": \"<string>\",\n        \"job_title\": \"<string>\",\n        \"is_active\": \"<boolean>\"\n      },\n      \"total_vuln_instances_count\": \"<integer>\",\n      \"updated_at\": \"<dateTime>\"\n    },\n    {\n      \"action_request_ids\": [],\n      \"created_at\": \"<dateTime>\",\n      \"creation_method\": \"<string>\",\n      \"derived_vuln_instance_info\": {\n        \"derived_target_criticality\": \"NONE\",\n        \"derived_target_risk_grade\": \"<string>\",\n        \"derived_target_risk_score\": \"<double>\",\n        \"derived_vuln_cve_list\": [\n          \"<string>\",\n          \"<string>\"\n        ],\n        \"derived_vuln_risk_grade\": \"<string>\",\n        \"derived_vuln_risk_score\": \"<double>\",\n        \"exceptionplan_status\": \"<string>\",\n        \"first_detected_date\": \"<dateTime>\",\n        \"id\": \"<uuid>\",\n        \"remediation_date\": \"<dateTime>\",\n        \"status\": \"<string>\",\n        \"target_id\": \"<uuid>\",\n        \"target_location\": \"<string>\",\n        \"target_name\": \"<string>\",\n        \"target_type\": \"<string>\",\n        \"vuln_description\": \"<string>\",\n        \"vuln_id\": \"<uuid>\",\n        \"vuln_max_cvssv3\": \"<double>\",\n        \"vuln_title\": \"<string>\"\n      },\n      \"details\": \"<string>\",\n      \"due_date\": \"<string>\",\n      \"group_by\": \"<string>\",\n      \"id\": \"<uuid>\",\n      \"itsmticket\": {\n        \"destination_users\": [\n          {\n            \"email\": \"<email>\",\n            \"full_name\": \"<string>\",\n            \"username\": \"GSsZo0Z\",\n            \"first_name\": \"<string>\",\n            \"last_name\": \"<string>\",\n            \"department\": \"<string>\",\n            \"job_title\": \"<string>\",\n            \"is_active\": \"<boolean>\"\n          },\n          {\n            \"email\": \"<email>\",\n            \"full_name\": \"<string>\",\n            \"username\": \"ya.rQkMG@V4\",\n            \"first_name\": \"<string>\",\n            \"last_name\": \"<string>\",\n            \"department\": \"<string>\",\n            \"job_title\": \"<string>\",\n            \"is_active\": \"<boolean>\"\n          }\n        ],\n        \"ext_url\": \"<string>\",\n        \"group_by\": \"VULN_INSTANCE\",\n        \"id\": \"<uuid>\",\n        \"itsm_destination\": {\n          \"destination\": \"<string>\",\n          \"id\": \"<uuid>\",\n          \"itsm_integration_name\": \"<string>\",\n          \"itsm_product_logo\": \"<string>\",\n          \"itsm_product_name\": \"<string>\",\n          \"name\": \"<string>\",\n          \"is_active\": \"<boolean>\"\n        },\n        \"remediation_plan_id\": \"<uuid>\",\n        \"internal_status\": \"<string>\",\n        \"ext_id\": \"<string>\",\n        \"ext_number\": \"<string>\",\n        \"ext_status\": \"<string>\",\n        \"ext_assignee\": \"<string>\",\n        \"destination_ext_email_list\": [\n          \"<string>\",\n          \"<string>\"\n        ]\n      },\n      \"plan_id\": \"<string>\",\n      \"remediated_vuln_instances_count\": \"<integer>\",\n      \"remediation_action_id\": \"<uuid>\",\n      \"status\": \"<string>\",\n      \"submitter\": {\n        \"email\": \"<email>\",\n        \"full_name\": \"<string>\",\n        \"username\": \"2.U_Iopu5Q5\",\n        \"first_name\": \"<string>\",\n        \"last_name\": \"<string>\",\n        \"department\": \"<string>\",\n        \"job_title\": \"<string>\",\n        \"is_active\": \"<boolean>\"\n      },\n      \"total_vuln_instances_count\": \"<integer>\",\n      \"updated_at\": \"<dateTime>\"\n    }\n  ]\n}"}],"_postman_id":"5aff5258-e445-45d4-97bc-544a0cf02466"},{"name":"Get Plan Details","id":"9f4ee27a-0f77-4946-9cf2-7a2ed651c997","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"apikey","apikey":{"basicConfig":[{"key":"key","value":"X-NOPSEC-API-KEY"},{"key":"value","value":"{{apiKey}}"}]},"isInherited":false},"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":"{{baseUrl}}/remediate/remediationplan/action/:action_id/plan/:id","description":"<p><em>Last reviewed: 2026-08-02</em></p>\n<p>Get a single Plan's details by Action ID and Plan ID.</p>\n<p>Both <code>action_id</code> and <code>id</code> in the path are internal record UUIDs (the <code>id</code> fields from <a href=\"#\">Get Remediation Actions</a> and <a href=\"#\">Get Plans in Remediation Action</a>), not the shorter <code>action_id</code> or <code>plan_id</code> display values.</p>\n<p>Same object shape as a single item in <a href=\"#\">Get Plans in Remediation Action</a>'s <code>results</code> array - see that doc for the field-level notes (the <code>id</code>/<code>plan_id</code> duality, the triple ownership representation, <code>itsmticket</code>, etc.). This endpoint just fetches one by ID instead of listing all of them.</p>\n","urlObject":{"path":["remediate","remediationplan","action",":action_id","plan",":id"],"host":["{{baseUrl}}"],"query":[],"variable":[{"id":"a8ee014b-2ae4-4d0e-a754-f99b32ecb345","description":{"content":"<p>(Required) </p>\n","type":"text/plain"},"type":"any","value":"<uuid>","key":"action_id"},{"id":"fa47738c-6829-493a-aef3-4beda735249b","description":{"content":"<p>(Required) </p>\n","type":"text/plain"},"type":"any","value":"<uuid>","key":"id"}]}},"response":[{"id":"f0c06625-50ff-480b-b508-debd22f4f98b","name":"Untitled Response","originalRequest":{"method":"GET","header":[{"key":"Accept","value":"application/json"},{"description":"Added as a part of security scheme: apikey","key":"X-NOPSEC-API-KEY","value":"<API Key>"}],"url":{"raw":"{{baseUrl}}/remediate/remediationplan/action/:action_id/plan/:id","host":["{{baseUrl}}"],"path":["remediate","remediationplan","action",":action_id","plan",":id"],"variable":[{"key":"action_id"},{"key":"id"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"action_request_ids\": [],\n  \"created_at\": \"<dateTime>\",\n  \"creation_method\": \"<string>\",\n  \"derived_vuln_instance_info\": {\n    \"derived_target_criticality\": \"NONE\",\n    \"derived_target_risk_grade\": \"<string>\",\n    \"derived_target_risk_score\": \"<double>\",\n    \"derived_vuln_cve_list\": [\n      \"<string>\",\n      \"<string>\"\n    ],\n    \"derived_vuln_risk_grade\": \"<string>\",\n    \"derived_vuln_risk_score\": \"<double>\",\n    \"exceptionplan_status\": \"<string>\",\n    \"first_detected_date\": \"<dateTime>\",\n    \"id\": \"<uuid>\",\n    \"remediation_date\": \"<dateTime>\",\n    \"status\": \"<string>\",\n    \"target_id\": \"<uuid>\",\n    \"target_location\": \"<string>\",\n    \"target_name\": \"<string>\",\n    \"target_type\": \"<string>\",\n    \"vuln_description\": \"<string>\",\n    \"vuln_id\": \"<uuid>\",\n    \"vuln_max_cvssv3\": \"<double>\",\n    \"vuln_title\": \"<string>\"\n  },\n  \"details\": \"<string>\",\n  \"due_date\": \"<string>\",\n  \"group_by\": \"<string>\",\n  \"id\": \"<uuid>\",\n  \"itsmticket\": {\n    \"destination_users\": [\n      {\n        \"email\": \"<email>\",\n        \"full_name\": \"<string>\",\n        \"username\": \"UQu+\",\n        \"first_name\": \"<string>\",\n        \"last_name\": \"<string>\",\n        \"department\": \"<string>\",\n        \"job_title\": \"<string>\",\n        \"is_active\": \"<boolean>\"\n      },\n      {\n        \"email\": \"<email>\",\n        \"full_name\": \"<string>\",\n        \"username\": \"bHmtHHe\",\n        \"first_name\": \"<string>\",\n        \"last_name\": \"<string>\",\n        \"department\": \"<string>\",\n        \"job_title\": \"<string>\",\n        \"is_active\": \"<boolean>\"\n      }\n    ],\n    \"ext_url\": \"<string>\",\n    \"group_by\": \"VULN_INSTANCE\",\n    \"id\": \"<uuid>\",\n    \"itsm_destination\": {\n      \"destination\": \"<string>\",\n      \"id\": \"<uuid>\",\n      \"itsm_integration_name\": \"<string>\",\n      \"itsm_product_logo\": \"<string>\",\n      \"itsm_product_name\": \"<string>\",\n      \"name\": \"<string>\",\n      \"is_active\": \"<boolean>\"\n    },\n    \"remediation_plan_id\": \"<uuid>\",\n    \"internal_status\": \"<string>\",\n    \"ext_id\": \"<string>\",\n    \"ext_number\": \"<string>\",\n    \"ext_status\": \"<string>\",\n    \"ext_assignee\": \"<string>\",\n    \"destination_ext_email_list\": [\n      \"<string>\",\n      \"<string>\"\n    ]\n  },\n  \"plan_id\": \"<string>\",\n  \"remediated_vuln_instances_count\": \"<integer>\",\n  \"remediation_action_id\": \"<uuid>\",\n  \"status\": \"<string>\",\n  \"submitter\": {\n    \"email\": \"<email>\",\n    \"full_name\": \"<string>\",\n    \"username\": \".P\",\n    \"first_name\": \"<string>\",\n    \"last_name\": \"<string>\",\n    \"department\": \"<string>\",\n    \"job_title\": \"<string>\",\n    \"is_active\": \"<boolean>\"\n  },\n  \"total_vuln_instances_count\": \"<integer>\",\n  \"updated_at\": \"<dateTime>\"\n}"}],"_postman_id":"9f4ee27a-0f77-4946-9cf2-7a2ed651c997"},{"name":"Get Vuln Instances within Plan","id":"9ff222c7-50d9-41f8-b471-2ee36d3e577d","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"apikey","apikey":{"basicConfig":[{"key":"key","value":"X-NOPSEC-API-KEY"},{"key":"value","value":"{{apiKey}}"}]},"isInherited":false},"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":"{{baseUrl}}/remediate/remediationplan/action/:action_id/plan/:plan_id/vuln_instance","description":"<p><em>Last reviewed: 2026-08-02</em></p>\n<p>Retrieve the vuln instances covered by a specific Remediation Plan.</p>\n<p>A few things worth knowing:</p>\n<ul>\n<li><p>Path variable is <code>plan_id</code>, but note it takes the same internal <code>id</code> UUID used elsewhere (from Get Plans in Remediation Action / Get Plan Details), not the human-readable <code>plan_id</code> display value (e.g. <code>\"421-1\"</code>). The parameter name is misleading - same trap as <code>action_id</code> on sibling endpoints.</p>\n</li>\n<li><p>Like <a href=\"#\">Get Exception Plan Vuln Instances</a>, results are <strong>flat with dotted-string keys</strong> (e.g. <code>\"vuln_instance_data.derived.combined_status\"</code>), not nested JSON.</p>\n</li>\n<li><p>Unlike that Exception Plan endpoint, this one <strong>does</strong> include an identifier: <code>vuln_instance_data.id</code>. Use that if you need to reference a specific instance elsewhere.</p>\n</li>\n</ul>\n<p>Query params (all optional): <code>limit</code>, <code>offset</code>.</p>\n","urlObject":{"path":["remediate","remediationplan","action",":action_id","plan",":plan_id","vuln_instance"],"host":["{{baseUrl}}"],"query":[{"disabled":true,"description":{"content":"<p>Number of results to return per page.</p>\n","type":"text/plain"},"key":"limit","value":"<integer>"},{"disabled":true,"description":{"content":"<p>The initial index from which to return the results.</p>\n","type":"text/plain"},"key":"offset","value":"<integer>"}],"variable":[{"id":"ad2fdc34-2869-4076-b22e-f62de65586ba","description":{"content":"<p>(Required) </p>\n","type":"text/plain"},"type":"any","value":"<uuid>","key":"action_id"},{"id":"a2a7459e-1757-490b-9875-4ecc0bb31829","description":{"content":"<p>(Required) </p>\n","type":"text/plain"},"type":"any","value":"<uuid>","key":"plan_id"}]}},"response":[{"id":"74df63c6-f3a2-44f9-8551-b8e9aef0ec59","name":"Untitled Response","originalRequest":{"method":"GET","header":[{"key":"Accept","value":"application/json"},{"key":"X-NOPSEC-API-KEY","value":"<API Key>","description":"Added as a part of security scheme: apikey"}],"url":{"raw":"{{baseUrl}}/remediate/remediationplan/action/:action_id/plan/:plan_id/vuln_instance?limit=<integer>&offset=<integer>","host":["{{baseUrl}}"],"path":["remediate","remediationplan","action",":action_id","plan",":plan_id","vuln_instance"],"query":[{"key":"limit","value":"<integer>","description":"Number of results to return per page."},{"key":"offset","value":"<integer>","description":"The initial index from which to return the results."}],"variable":[{"key":"action_id","value":""},{"key":"plan_id","value":""}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"count\": \"<integer>\",\n  \"next\": \"<uri>\",\n  \"previous\": \"<uri>\",\n  \"results\": [\n    {\n      \"derived_target_criticality\": \"HIGH\",\n      \"derived_target_division\": \"<string>\",\n      \"derived_target_risk_grade\": \"<string>\",\n      \"derived_target_risk_score\": \"<double>\",\n      \"derived_vuln_cve_list\": [\n        \"<string>\",\n        \"<string>\"\n      ],\n      \"derived_vuln_risk_grade\": \"<string>\",\n      \"derived_vuln_risk_score\": \"<double>\",\n      \"exceptionplan_status\": \"<string>\",\n      \"first_detected_date\": \"<dateTime>\",\n      \"id\": \"<uuid>\",\n      \"remediation_date\": \"<dateTime>\",\n      \"status\": \"<string>\",\n      \"target_id\": \"<uuid>\",\n      \"target_location\": \"<string>\",\n      \"target_name\": \"<string>\",\n      \"target_type\": \"<string>\",\n      \"vuln_cves\": [],\n      \"vuln_cwes\": [],\n      \"vuln_description\": \"<string>\",\n      \"vuln_id\": \"<uuid>\",\n      \"vuln_max_cvssv3\": \"<double>\",\n      \"vuln_title\": \"<string>\"\n    },\n    {\n      \"derived_target_criticality\": \"CRITICAL\",\n      \"derived_target_division\": \"<string>\",\n      \"derived_target_risk_grade\": \"<string>\",\n      \"derived_target_risk_score\": \"<double>\",\n      \"derived_vuln_cve_list\": [\n        \"<string>\",\n        \"<string>\"\n      ],\n      \"derived_vuln_risk_grade\": \"<string>\",\n      \"derived_vuln_risk_score\": \"<double>\",\n      \"exceptionplan_status\": \"<string>\",\n      \"first_detected_date\": \"<dateTime>\",\n      \"id\": \"<uuid>\",\n      \"remediation_date\": \"<dateTime>\",\n      \"status\": \"<string>\",\n      \"target_id\": \"<uuid>\",\n      \"target_location\": \"<string>\",\n      \"target_name\": \"<string>\",\n      \"target_type\": \"<string>\",\n      \"vuln_cves\": [],\n      \"vuln_cwes\": [],\n      \"vuln_description\": \"<string>\",\n      \"vuln_id\": \"<uuid>\",\n      \"vuln_max_cvssv3\": \"<double>\",\n      \"vuln_title\": \"<string>\"\n    }\n  ]\n}"}],"_postman_id":"9ff222c7-50d9-41f8-b471-2ee36d3e577d"},{"name":"Get Remediation Action Details","id":"f013b81e-bc95-4648-88b8-9bf8135cef7a","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"apikey","apikey":{"basicConfig":[{"key":"key","value":"X-NOPSEC-API-KEY"},{"key":"value","value":"{{apiKey}}"}]},"isInherited":false},"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":"{{baseUrl}}/remediate/remediationplan/action/:id","description":"<p><em>Last reviewed: 2026-08-02</em></p>\n<p>Get a single Remediation Action's details by ID - metadata like the creator, plan count, status, and description, not the vuln instances themselves.</p>\n<p>The path uses <code>id</code>, the internal record UUID, not <code>action_id</code> (the shorter human-facing number shown in the UI) - use the <code>id</code> from <a href=\"#\">Get Remediation Actions</a> here.</p>\n<p>A few things worth knowing:</p>\n<ul>\n<li><p><code>itsm_destination</code> here matches the shape from <a href=\"#\">Get ITSM Destination Setting Detail</a> exactly and this is the strongest evidence that endpoint's nested <code>itsm_destination.id</code> is the right value to pass as <code>itsm_destination_id</code> on Create Remediation Action.</p>\n</li>\n<li><p><code>created_by</code> is a <strong>plain string</strong> (the creator's full name), unlike <code>owner</code>/<code>submitter</code> elsewhere in this API family, which are full nested user objects. Don't assume it's an object.</p>\n</li>\n<li><p><code>details</code> is raw HTML, same as elsewhere in this API.</p>\n</li>\n</ul>\n","urlObject":{"path":["remediate","remediationplan","action",":id"],"host":["{{baseUrl}}"],"query":[],"variable":[{"id":"7087c246-7322-45fd-8401-a380a2e2900c","description":{"content":"<p>(Required) </p>\n","type":"text/plain"},"type":"any","value":"e21f4245-7bff-4860-aff9-3df4ed848b32","key":"id"}]}},"response":[{"id":"75bddbc7-0336-41f6-a915-5698ddc0373c","name":"Untitled Response","originalRequest":{"method":"GET","header":[{"key":"Accept","value":"application/json"},{"description":"Added as a part of security scheme: apikey","key":"X-NOPSEC-API-KEY","value":"<API Key>"}],"url":{"raw":"{{baseUrl}}/remediate/remediationplan/action/:id","host":["{{baseUrl}}"],"path":["remediate","remediationplan","action",":id"],"variable":[{"key":"id"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"action_id\": \"<string>\",\n  \"action_request_ids\": [],\n  \"created_at\": \"<dateTime>\",\n  \"group_by\": \"TARGET\",\n  \"id\": \"<uuid>\",\n  \"itsm_destination\": {\n    \"destination\": \"<string>\",\n    \"id\": \"<uuid>\",\n    \"itsm_integration_name\": \"<string>\",\n    \"itsm_product_logo\": \"<string>\",\n    \"itsm_product_name\": \"<string>\",\n    \"name\": \"<string>\",\n    \"is_active\": \"<boolean>\"\n  },\n  \"name\": \"<string>\",\n  \"remediated_vuln_instances_count\": \"<integer>\",\n  \"submitter\": {\n    \"email\": \"<email>\",\n    \"full_name\": \"<string>\",\n    \"username\": \"fJtB0E5\",\n    \"first_name\": \"<string>\",\n    \"last_name\": \"<string>\",\n    \"department\": \"<string>\",\n    \"job_title\": \"<string>\",\n    \"is_active\": \"<boolean>\"\n  },\n  \"total_plans_count\": \"<integer>\",\n  \"total_vuln_instances_count\": \"<integer>\",\n  \"updated_at\": \"<dateTime>\",\n  \"is_canceled\": \"<boolean>\",\n  \"creation_method\": \"MANUAL\",\n  \"created_by\": \"<string>\",\n  \"vuln_instance_ids\": [\n    \"<string>\",\n    \"<string>\"\n  ],\n  \"query_data\": {\n    \"grouping\": \"VULN_INSTANCE\",\n    \"query\": {\n      \"description\": \"Either query or selected ids must be provided. If no query is provided, all vuln instances for selected ids will be included.\"\n    },\n    \"selected_ids\": [\n      \"<string>\",\n      \"<string>\"\n    ]\n  },\n  \"itsm_destination_id\": \"<uuid>\",\n  \"due_date\": \"<dateTime>\",\n  \"details\": \"<string>\",\n  \"max_number_created\": \"<integer>\"\n}"}],"_postman_id":"f013b81e-bc95-4648-88b8-9bf8135cef7a"}],"id":"7a1264b1-4fec-4603-b198-6891ef56d4be","_postman_id":"7a1264b1-4fec-4603-b198-6891ef56d4be","description":""},{"name":"Reports","item":[{"name":"Create Download Task","id":"48f71a8a-236d-437d-af89-9c809a851ae0","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"apikey","apikey":{"basicConfig":[{"key":"key","value":"X-NOPSEC-API-KEY"},{"key":"value","value":"{{apiKey}}"}]},"isInherited":false},"method":"POST","header":[],"body":{"mode":"raw","raw":"{\"download_query\": {\"group_by\": \"ASSET\", \"sort_by\": \"target_data.derived.risk_score-desc\", \"max_download_limit\": 5000}}","options":{"raw":{"language":"json"}}},"url":"{{baseUrl}}/search/download-csv-sql","description":"<h2 id=\"what-this-does\">What this does</h2>\n<p><em>Last reviewed: 2026-07-31</em></p>\n<p>This is step 1 of a 3-step flow for exporting large datasets as CSV. A report can contain millions of rows, so you do not get the file directly. You start a background job here, check on it, then fetch the finished file once it is ready. It works the same way as ordering something online: you place the order, track it, then pick it up once it is done.</p>\n<p>The 3 steps:</p>\n<ol>\n<li><p>Create Download Task (this endpoint) - starts the job, returns a download_request_id</p>\n</li>\n<li><p>Download Status (GET /search/download-csv/{download_request_id}) - poll this until status is COMPLETED</p>\n</li>\n<li><p>Download CSV File (GET /search/download-csv/{download_request_id}/{file_attachment_id}) - fetch the actual file</p>\n</li>\n</ol>\n<h2 id=\"request-body\">Request body</h2>\n<p>Send one download_query object. Only group_by is required. Everything below has been confirmed:</p>\n<ul>\n<li><p>group_by (required): what kind of record you are exporting. TARGET, ASSET, VULNERABILITY, or VULN_INSTANCE.</p>\n</li>\n<li><p>saved_query_id (optional): id of a saved filter, from GET /prioritize/saved-query. Passing a real saved_query_id genuinely narrows the results, it is not decorative. Leave it out and you get everything, no filter applied.</p>\n</li>\n<li><p>saved_column_group_by_id (optional): id of a saved column layout, from GET /prioritize/saved-column-group-by. The returned CSV headers match the columns configured on that preset. Leave it out and you get a sensible default set of columns for the group_by you picked.</p>\n</li>\n<li><p>max_download_limit (optional): caps how many rows come back. Leave it out and you get everything that matches.</p>\n</li>\n<li><p>sort_by (optional): a field name, optionally followed by -asc or -desc, for example target_data.derived.risk_score-desc. For example for group_by=ASSET with max_download_limit at or below 10000: rows come back genuinely sorted. Above that limit, or for other group_by values combined with the legacy architecture, treat sort_by as best-effort rather than guaranteed.</p>\n</li>\n</ul>\n<p>Example request body:</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{\n  \"download_query\": {\n    \"group_by\": \"VULN_INSTANCE\",\n    \"saved_query_id\": \"3b22a1d2-72d1-4c3e-9a1f-0b1b9d4b55c9\",\n    \"saved_column_group_by_id\": \"8a7e44f1-1a4b-4d3a-9e0d-2a0b3f4d5e6f\",\n    \"max_download_limit\": 10000,\n    \"sort_by\": \"target_data.derived.risk_score-desc\"\n  }\n}\n\n</code></pre><h2 id=\"what-you-get-back\">What you get back</h2>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{\n  \"download_request_id\": \"d53e5215-da69-4d01-ab21-e1afa612c485\",\n  \"status\": \"REQUESTED\",\n  \"file_attachment_ids\": [],\n  \"urls\": []\n}\n\n</code></pre><p>Hold on to download_request_id. That is what you use in the next two steps to check on the job and to download the file.</p>\n<h2 id=\"two-different-ids-do-not-mix-them-up\">Two different IDs, do not mix them up</h2>\n<p>Once the status check tells you the job is COMPLETED, it hands you a list of file_attachment_ids. That is a different id than download_request_id. A single report can span more than one CSV file (each file caps out at 1 million rows), so each file gets its own id. When you call the Download CSV File endpoint, the first part of the path is your download_request_id, the second part is one of the file_attachment_ids. Mixing them up is the most common mistake integrators make with this API.</p>\n<h2 id=\"fields-you-might-see-in-older-examples\">Fields you might see in older examples</h2>\n<p>Some older integrations pass a raw query object, saved_report_id, or fields like data_fields, columns, and ids. Those belong to an earlier version of this API and should not be used going forward. Use saved_query_id and saved_column_group_by_id instead, they cover the same ground with a lot less setup on your end.</p>\n<p>saved_report_id specifically: at the time of writing, the test client used to verify this API had zero SavedReport records to reference (GET /prioritize/saved-report returned an empty list). We could not exercise this field with real data. Combined with it having no equivalent in the simplified saved_query_id plus saved_column_group_by_id model, this field is a strong candidate for deprecation. Do not build new integrations on it, and flag it to the platform team as a removal candidate rather than assuming it is safe long term.</p>\n","urlObject":{"path":["search","download-csv-sql"],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[{"id":"42e8f9e6-8cc7-4d7f-bc25-435520f205a8","name":"Untitled Response","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/x-www-form-urlencoded"},{"key":"Accept","value":"application/json"},{"description":"Added as a part of security scheme: apikey","key":"X-NOPSEC-API-KEY","value":"<API Key>"}],"body":{"mode":"urlencoded","urlencoded":[{"description":"(Required) ","key":"group_by","value":"VULNERABILITY"},{"description":"(Required) ","key":"sort_by","value":"<string>"},{"description":"(Required) ","key":"query","value":"[object Object]"},{"description":"(Required) ","key":"saved_report_id","value":"<uuid>"},{"description":"(Required) ","key":"saved_query_id","value":"<uuid>"},{"description":"(Required) ","key":"saved_column_group_by_id","value":"<uuid>"},{"description":"(Required) ","key":"data_fields","value":"<string>,<string>"},{"description":"(Required) ","key":"agg_fields","value":"<string>,<string>"},{"description":"(Required) ","key":"ids","value":"<string>,<string>"},{"description":"(Required) ","key":"max_download_limit","value":"<integer>"},{"description":"(Required) ","key":"limit","value":"<integer>"},{"description":"(Required) ","key":"offset","value":"<integer>"},{"description":"(Required) Download Request Id.","key":"download_request_id","value":"<uuid>"},{"description":"(Required) List of file attachment ids","key":"file_attachment_ids","value":"<string>"},{"description":"(Required) ","key":"id","value":"<uuid>"},{"description":"(Required) Array of urls to download","key":"urls","value":"<string>"},{"description":"* `REQUESTED` - Requested\n* `IN_PROGRESS` - In Progress\n* `COMPLETED` - Completed\n* `ERROR` - Error","key":"status","value":"ERROR"}]},"url":"{{baseUrl}}/search/download-csv"},"status":"Created","code":201,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"download_query\": {\n    \"group_by\": \"VULNERABILITY\",\n    \"sort_by\": \"<string>\",\n    \"query\": {},\n    \"saved_report_id\": \"<uuid>\",\n    \"saved_query_id\": \"<uuid>\",\n    \"saved_column_group_by_id\": \"<uuid>\",\n    \"data_fields\": [\n      \"<string>\",\n      \"<string>\"\n    ],\n    \"agg_fields\": [\n      \"<string>\",\n      \"<string>\"\n    ],\n    \"ids\": [\n      \"<string>\",\n      \"<string>\"\n    ],\n    \"max_download_limit\": \"<integer>\",\n    \"limit\": \"<integer>\",\n    \"offset\": \"<integer>\"\n  },\n  \"download_request_id\": \"<uuid>\",\n  \"file_attachment_ids\": \"<string>\",\n  \"id\": \"<uuid>\",\n  \"urls\": \"<string>\",\n  \"status\": \"ERROR\"\n}"}],"_postman_id":"48f71a8a-236d-437d-af89-9c809a851ae0"},{"name":"Download CSV File","id":"9c646581-87a9-4662-b67d-a3dbc47c71a3","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"apikey","apikey":{"basicConfig":[{"key":"key","value":"X-NOPSEC-API-KEY"},{"key":"value","value":"{{apiKey}}"}]},"isInherited":false},"method":"GET","header":[{"key":"Accept","value":"text/csv"}],"url":"{{baseUrl}}/search/download-csv/:download_request_id/:file_attachment_id","description":"<h2 id=\"what-this-does\">What this does</h2>\n<p><em>Last reviewed: 2026-07-31</em></p>\n<p>Step 3, the last one. Fetches the actual CSV bytes for a single file that Download Status told you about. Notice the URL needs two ids, not one: download_request_id identifies the whole export job, file_attachment_id identifies one specific file within it. They point to different records and are not interchangeable.</p>\n<p>If your export is small (under 1 million rows) there will be exactly one file_attachment_id and one call here is all you need. If it is bigger, call this once per id in file_attachment_ids and you will get all the pieces of the same report.</p>\n<h2 id=\"response\">Response</h2>\n<p>A raw CSV file (Content-Type text/csv), with Content-Disposition set so most HTTP clients and browsers will save it directly. Column headers match whatever saved_column_group_by_id you used in Create Download Task, or the default set if you did not provide one.</p>\n","urlObject":{"path":["search","download-csv",":download_request_id",":file_attachment_id"],"host":["{{baseUrl}}"],"query":[],"variable":[{"id":"27097ab5-341b-4c64-8a49-e60db2c75dd6","description":{"content":"<p>Required. The download_request_id you got from Create Download Task.</p>\n","type":"text/plain"},"type":"any","value":"<uuid>","key":"download_request_id"},{"id":"3370bfb7-5348-4c5c-9ee1-24e224e80cd5","description":{"content":"<p>Required. A different id than download_request_id, one of the values from file_attachment_ids in Download Status.</p>\n","type":"text/plain"},"type":"any","value":"<uuid>","key":"file_attachment_id"}]}},"response":[{"id":"649a8457-6888-4860-b9a4-92d050df0a95","name":"Untitled Response","originalRequest":{"method":"GET","header":[{"key":"Accept","value":"text/csv"},{"description":"Added as a part of security scheme: apikey","key":"X-NOPSEC-API-KEY","value":"<API Key>"}],"url":{"raw":"{{baseUrl}}/search/download-csv/:download_request_id/:id","host":["{{baseUrl}}"],"path":["search","download-csv",":download_request_id",":id"],"variable":[{"key":"download_request_id"},{"key":"id"}]}},"status":"OK","code":200,"_postman_previewlanguage":"text","header":[{"key":"Content-Type","value":"text/csv"}],"cookie":[],"responseTime":null,"body":"{\n  \"incididunt_d\": {},\n  \"dolor_3\": {}\n}"}],"_postman_id":"9c646581-87a9-4662-b67d-a3dbc47c71a3"},{"name":"Download Status","id":"702b6336-db38-4cbe-ad4c-0580083a5a4e","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"apikey","apikey":{"basicConfig":[{"key":"key","value":"X-NOPSEC-API-KEY"},{"key":"value","value":"{{apiKey}}"}]},"isInherited":false},"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":"{{baseUrl}}/search/download-csv/:download_request_id","description":"<h2 id=\"what-this-does\">What this does</h2>\n<p><em>Last reviewed: 2026-07-31</em></p>\n<p>Step 2 of the download flow. Poll this endpoint with the download_request_id you got back from Create Download Task, and keep checking until status flips to COMPLETED. A reasonable pattern is to check every few seconds, since most exports finish quickly, but a large one spanning millions of rows can take longer.</p>\n<h2 id=\"possible-status-values\">Possible status values</h2>\n<ul>\n<li><p>REQUESTED: the job is queued, work has not started yet</p>\n</li>\n<li><p>IN_PROGRESS: your data is being pulled and written to file</p>\n</li>\n<li><p>COMPLETED: done, file_attachment_ids is now populated and ready for the next step</p>\n</li>\n<li><p>ERROR: something went wrong. There is no retry, you need to call Create Download Task again to start over</p>\n</li>\n</ul>\n<h2 id=\"response-shape\">Response shape</h2>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>{\n  \"download_request_id\": \"d72e1225-da89-4f02-66ba-ea8f3d16c4a2\",\n  \"status\": \"COMPLETED\",\n  \"file_attachment_ids\": [\n    \"2cff4091-862a-41f1-1926-a6d6833823b4\"\n  ],\n  \"urls\": []\n}\n\n</code></pre><p>A report over 1 million rows gets split into multiple files, so file_attachment_ids can hold more than one id. Each one belongs to a different chunk of the same report and needs its own call to Download CSV File.</p>\n","urlObject":{"path":["search","download-csv",":download_request_id"],"host":["{{baseUrl}}"],"query":[],"variable":[{"id":"a715cc32-b3d0-44cd-a3a8-73d0ddffb510","description":{"content":"<p>(Required)</p>\n","type":"text/plain"},"type":"any","value":"<uuid>","key":"download_request_id"}]}},"response":[{"id":"df823512-6a0f-4849-9c8c-38e538230d37","name":"Untitled Response","originalRequest":{"method":"GET","header":[{"key":"Accept","value":"application/json"},{"description":"Added as a part of security scheme: apikey","key":"X-NOPSEC-API-KEY","value":"<API Key>"}],"url":{"raw":"{{baseUrl}}/search/download-csv/:id","host":["{{baseUrl}}"],"path":["search","download-csv",":id"],"variable":[{"key":"id"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"download_query\": {\n    \"group_by\": \"VULNERABILITY\",\n    \"sort_by\": \"<string>\",\n    \"query\": {},\n    \"saved_report_id\": \"<uuid>\",\n    \"saved_query_id\": \"<uuid>\",\n    \"saved_column_group_by_id\": \"<uuid>\",\n    \"data_fields\": [\n      \"<string>\",\n      \"<string>\"\n    ],\n    \"agg_fields\": [\n      \"<string>\",\n      \"<string>\"\n    ],\n    \"ids\": [\n      \"<string>\",\n      \"<string>\"\n    ],\n    \"max_download_limit\": \"<integer>\",\n    \"limit\": \"<integer>\",\n    \"offset\": \"<integer>\"\n  },\n  \"download_request_id\": \"<uuid>\",\n  \"file_attachment_ids\": \"<string>\",\n  \"id\": \"<uuid>\",\n  \"urls\": \"<string>\",\n  \"status\": \"ERROR\"\n}"}],"_postman_id":"702b6336-db38-4cbe-ad4c-0580083a5a4e"}],"id":"5bdc00ea-e305-4b7c-bffc-f298889d1372","_postman_id":"5bdc00ea-e305-4b7c-bffc-f298889d1372","description":""},{"name":"Ingestion","item":[{"name":"Tags File Upload","id":"4f169d33-2853-4c81-87eb-ea40d9890a5b","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"apikey","apikey":{"basicConfig":[{"key":"key","value":"X-NOPSEC-API-KEY"},{"key":"value","value":"{{apiKey}}"}]},"isInherited":false},"method":"POST","header":[],"body":{"mode":"formdata","formdata":[{"key":"file","description":"<p>CSV file to be uploaded with headers [target_id,tag_key,tag_value,action,new_value]</p>\n","type":"file","fileNotInWorkingDirectoryWarning":"This file isn't in your working directory. Teammates you share this request with won't be able to use this file. To make collaboration easier you can setup your working directory in Settings.","filesNotInWorkingDirectory":["/Users/nitinkumar/Downloads/demo_tag_upload_api.csv"],"value":null}]},"url":"{{baseUrl}}/ingestion/tags/upload","description":"<p><em>Last reviewed: 2026-07-31</em></p>\n<p>This API allows clients to upload CSV files to manage tags associated with their targets. The tags can be added, modified, or removed based on the specified actions within the CSV file.</p>\n<h3 id=\"csv-format-requirements\">CSV Format Requirements:</h3>\n<p>The uploaded CSV file must include the following headers:</p>\n<ul>\n<li><p><strong>target_id</strong> <em>(required)</em>: Unique identifier of the target.</p>\n</li>\n<li><p><strong>tag_key</strong> <em>(required)</em>: The key of the tag to manage.</p>\n</li>\n<li><p><strong>tag_value</strong> <em>(conditional)</em>: The value of the tag; required for <code>add</code> and <code>modify</code> actions.</p>\n</li>\n<li><p><strong>action</strong> <em>(required)</em>: The action to perform. Valid options: <code>add</code>, <code>modify</code>, <code>remove</code>.</p>\n</li>\n<li><p><strong>new_value</strong> <em>(conditional)</em>: The new value for the tag; required for the <code>modify</code> action.</p>\n</li>\n</ul>\n<p>Al four scenarios below have been captured as saved examples on this request (see the tree beneath \"Tags File Upload\") - these are real responses:</p>\n<ul>\n<li><p><strong>Successfully Created</strong> - <code>201 Created</code>, body: <code>\"Tags ingestion task successfully created.\"</code></p>\n</li>\n<li><p><strong>File not provided</strong> - <code>400</code>, <code>{\"file\": [\"The submitted data was not a file. Check the encoding type on the form.\"]}</code></p>\n</li>\n<li><p><strong>Invalid CSV headers</strong> - <code>400</code>, message shows the exact expected vs. received header list, e.g. <code>Expected ['target_id', 'tag_key', 'tag_value', 'action', 'new_value'] but got [...]</code>. This confirms the CSV header row must always include all 5 column names, even though <code>tag_value</code>/<code>new_value</code> are only conditionally required per-row.</p>\n</li>\n<li><p><strong>File size is too large</strong> - <code>400</code>, <code>{\"file\": [\"File size exceeds 9.5367421110625e-04 MB\"]}</code> - note the odd scientific-notation limit in this saved example; that's not a copy error, the backend's error message genuinely formats the size limit that way.</p>\n</li>\n</ul>\n<p>This is a write endpoint (creates a real async ingestion task and can modify real tag data). Get explicit go-ahead before sending a real file.</p>\n","urlObject":{"path":["ingestion","tags","upload"],"host":["{{baseUrl}}"],"query":[],"variable":[]}},"response":[{"id":"1fd81d0f-599a-4b65-8a83-ab9ddafbef5a","name":"Successfully Created","originalRequest":{"method":"POST","header":[],"body":{"mode":"formdata","formdata":[{"key":"file","description":"CSV file to be uploaded with headers [target_id,tag_key,tag_value,action,new_value]","type":"file","fileNotInWorkingDirectoryWarning":"This file isn't in your working directory. Teammates you share this request with won't be able to use this file. To make collaboration easier you can setup your working directory in Settings.","filesNotInWorkingDirectory":["/Users/nitinkumar/Downloads/demo_tag_upload_api.csv"],"value":null}]},"url":"{{baseUrl}}/ingestion/tags/upload"},"status":"Created","code":201,"_postman_previewlanguage":null,"header":null,"cookie":[],"responseTime":null,"body":"\"Tags ingestion task successfully created.\""},{"id":"caeb0959-298e-4706-bed6-91cfd92d216d","name":"File not provided","originalRequest":{"method":"POST","header":[],"body":{"mode":"formdata","formdata":[{"key":"file","description":"CSV file to be uploaded with headers [target_id,tag_key,tag_value,action,new_value]","type":"file","fileNotInWorkingDirectoryWarning":"This file isn't in your working directory. Teammates you share this request with won't be able to use this file. To make collaboration easier you can setup your working directory in Settings.","filesNotInWorkingDirectory":["/Users/nitinkumar/Downloads/demo_tag_upload_api.csv"],"value":null}]},"url":"{{baseUrl}}/ingestion/tags/upload"},"status":"Bad Request","code":400,"_postman_previewlanguage":null,"header":null,"cookie":[],"responseTime":null,"body":"{\n    \"file\": [\n        \"The submitted data was not a file. Check the encoding type on the form.\"\n    ]\n}"},{"id":"8702fb58-7911-41d6-8ccc-63cd38385bdc","name":"Invalid CSV headers","originalRequest":{"method":"POST","header":[],"body":{"mode":"formdata","formdata":[{"key":"file","description":"CSV file to be uploaded with headers [target_id,tag_key,tag_value,action,new_value]","type":"file","fileNotInWorkingDirectoryWarning":"This file isn't in your working directory. Teammates you share this request with won't be able to use this file. To make collaboration easier you can setup your working directory in Settings.","filesNotInWorkingDirectory":["/Users/nitinkumar/Downloads/demo_tag_upload_api.csv"],"value":null}]},"url":"{{baseUrl}}/ingestion/tags/upload"},"status":"Bad Request","code":400,"_postman_previewlanguage":null,"header":null,"cookie":[],"responseTime":null,"body":"{\n    \"file\": [\n        \"Invalid CSV headers. Expected ['target_id', 'tag_key', 'tag_value', 'action', 'new_value'] but got ['target_id', 'tag_key', 'tag_value', 'action']\"\n    ]\n}"},{"id":"6fe32478-73ec-46a7-92a0-95fe08566e8f","name":"File size is too large","originalRequest":{"method":"POST","header":[],"body":{"mode":"formdata","formdata":[{"key":"file","description":"CSV file to be uploaded with headers [target_id,tag_key,tag_value,action,new_value]","type":"file","fileNotInWorkingDirectoryWarning":"This file isn't in your working directory. Teammates you share this request with won't be able to use this file. To make collaboration easier you can setup your working directory in Settings.","filesNotInWorkingDirectory":["/Users/nitinkumar/Downloads/demo_tag_upload_api.csv"],"value":null}]},"url":"{{baseUrl}}/ingestion/tags/upload"},"status":"Bad Request","code":400,"_postman_previewlanguage":null,"header":null,"cookie":[],"responseTime":null,"body":"{\n    \"file\": [\n        \"File size exceeds 9.5367431640625e-07 MB\"\n    ]\n}"}],"_postman_id":"4f169d33-2853-4c81-87eb-ea40d9890a5b"}],"id":"b83414ad-aaee-49c1-9b5b-bc4e8cde92f2","description":"<p>This ingestions APIs is designed to ingestion of client data into our system. It includes endpoints that facilitate data submission, validation, and storage, ensuring a seamless and efficient integration process.</p>\n","_postman_id":"b83414ad-aaee-49c1-9b5b-bc4e8cde92f2"},{"name":"AuditLog","item":[{"name":"List Audit Logs","id":"c7a1aee6-87ae-41b6-8950-06bd4dc0ff6f","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"apikey","apikey":{"basicConfig":[{"key":"key","value":"X-NOPSEC-API-KEY"},{"key":"value","value":"{{apiKey}}"}]},"isInherited":false},"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":"{{baseUrl}}/auditlog/log?action_type=CREATE","description":"<p><em>Last reviewed: 2026-07-31</em></p>\n<p>Retrieve a paginated, filterable list of audit log entries for your client - who did what, when, and how (via the UI, or via the API). Useful for answering \"who changed this\" questions, and for building your own activity feed.</p>\n<p>Each entry (values below are illustrative):</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"id\": \"5f1e2d3c-4b5a-4968-8f7e-6d5c4b3a2918\",\n    \"username\": \"John Doe\",\n    \"user_id\": null,\n    \"action_type\": \"CREATE\",\n    \"action_description\": \"Remediation Action created: Test action - safe to archive\",\n    \"reference\": \"RemediationAction:7a8b9c0d-1e2f-4a3b-8c9d-0e1f2a3b4c5d:5f1e2d3c-4b5a-4968-8f7e-6d5c4b3a2918\",\n    \"trigger_source\": \"API\",\n    \"created_at\": \"2026-07-31T19:28:41.290300Z\"\n}\n\n</code></pre>\n<p>Notes on the fields:</p>\n<ul>\n<li><p><strong>user_id</strong> is frequently <code>null</code> even when <code>username</code> is populated - don't treat it as a reliable join key. Use <code>username</code> for display, and <code>reference</code> if you need to link back to the actual object that was changed.</p>\n</li>\n<li><p><strong>action_type</strong> is a free-form-looking but actually constrained set of values - examples: <code>CREATE</code>, <code>TEAM_MEMBERSHIP_ADD</code>. Expect one value per kind of mutating action across the platform (remediation actions, team membership, etc.), not just one per API endpoint.</p>\n</li>\n<li><p><strong>reference</strong> encodes the affected object as <code>EntityType:id1:id2...</code> - for example a Remediation Action shows both its action id and the specific audit-relevant sub-id.</p>\n</li>\n<li><p><strong>action_description</strong> is meant to be human-readable and shown directly in a UI; it already includes enough context (e.g. the object's name) that you often don't need to separately look up the referenced object.</p>\n</li>\n</ul>\n<p><strong>Filters:</strong> <code>action_type</code> genuinely filters, <code>?action_type=CREATE</code> will return less as it's filtering.All filters follow the same pattern as filters elsewhere in this API:</p>\n<ul>\n<li><p><code>created_after</code> / <code>created_before</code> / <code>created_at_gt</code> / <code>created_at_gte</code> / <code>created_at_lt</code> / <code>created_at_lte</code> - ISO 8601 datetime range filters</p>\n</li>\n<li><p><code>created_at</code> / <code>created_at_exact</code> - exact match</p>\n</li>\n<li><p><code>trigger_source</code> - e.g. <code>API</code></p>\n</li>\n<li><p><code>ordering</code> - field to sort by</p>\n</li>\n<li><p><code>limit</code> / <code>offset</code> - standard pagination</p>\n</li>\n</ul>\n","urlObject":{"path":["auditlog","log"],"host":["{{baseUrl}}"],"query":[{"disabled":true,"key":"created_after","value":"1958-05-09T01:30:49.964Z"},{"disabled":true,"key":"created_at","value":"1980-08-29"},{"disabled":true,"key":"created_at_exact","value":"1958-05-09T01:30:49.964Z"},{"disabled":true,"key":"created_at_gt","value":"1958-05-09T01:30:49.964Z"},{"disabled":true,"key":"created_at_gte","value":"1958-05-09T01:30:49.964Z"},{"disabled":true,"key":"created_at_lt","value":"1958-05-09T01:30:49.964Z"},{"disabled":true,"key":"created_at_lte","value":"1958-05-09T01:30:49.964Z"},{"disabled":true,"key":"created_before","value":"1958-05-09T01:30:49.964Z"},{"disabled":true,"description":{"content":"<p>Number of results to return per page.</p>\n","type":"text/plain"},"key":"limit","value":"6100"},{"disabled":true,"description":{"content":"<p>The initial index from which to return the results.</p>\n","type":"text/plain"},"key":"offset","value":"6100"},{"disabled":true,"description":{"content":"<p>Which field to use when ordering the results.</p>\n","type":"text/plain"},"key":"ordering","value":"string"},{"disabled":true,"description":{"content":"<p>Source that triggered the audit log</p>\n<ul>\n<li><code>GUI</code> - GUI</li>\n<li><code>CLIENT_MANAGEMENT</code> - Client Management</li>\n<li><code>AUTOMATED</code> - Automated</li>\n<li><code>API</code> - API</li>\n<li><code>SYSTEM</code> - System</li>\n</ul>\n","type":"text/plain"},"key":"trigger_source","value":"API"},{"description":{"content":"<p>Type of action performed</p>\n<ul>\n<li><code>CREATE</code> - Create</li>\n<li><code>UPDATE</code> - Update</li>\n<li><code>DELETE</code> - Delete</li>\n<li><code>LOGIN</code> - Login</li>\n<li><code>LOGOUT</code> - Logout</li>\n<li><code>TEST</code> - Test</li>\n<li><code>TEAM_MEMBERSHIP_ADD</code> - Team Membership Add</li>\n<li><code>TEAM_MEMBERSHIP_REMOVE</code> - Team Membership Remove</li>\n<li><code>TEAM_MEMBERSHIP_CLEAR</code> - Team Membership Clear</li>\n<li><code>REMEDIATION_PLAN_TEAM_ADD</code> - Remediation Plan Team Add</li>\n<li><code>REMEDIATION_PLAN_TEAM_REMOVE</code> - Remediation Plan Team Remove</li>\n<li><code>REMEDIATION_PLAN_TEAM_CLEAR</code> - Remediation Plan Team Clear</li>\n<li><code>EXCEPTION_PLAN_TEAM_ADD</code> - Exception Plan Team Add</li>\n<li><code>EXCEPTION_PLAN_TEAM_REMOVE</code> - Exception Plan Team Remove</li>\n<li><code>EXCEPTION_PLAN_TEAM_CLEAR</code> - Exception Plan Team Clear</li>\n<li><code>DERIVED_FIELD_RULE_ADD</code> - Derived Field Rule Add</li>\n<li><code>DERIVED_FIELD_RULE_REMOVE</code> - Derived Field Rule Remove</li>\n<li><code>DERIVED_FIELD_RULE_CLEAR</code> - Derived Field Rule Clear</li>\n</ul>\n","type":"text/plain"},"key":"action_type","value":"CREATE"}],"variable":[]}},"response":[{"id":"a4a8654a-7e3a-49a1-b701-30e469008eda","name":"Untitled Response","originalRequest":{"method":"GET","header":[{"key":"Accept","value":"application/json"},{"key":"X-NOPSEC-API-KEY","value":"<API Key>","description":"Added as a part of security scheme: apikey"}],"url":{"raw":"{{baseUrl}}/auditlog?action_description=string&action_type=LOGIN&created_after=1958-05-09T01:30:49.964Z&created_at=1980-08-29&created_at_exact=1958-05-09T01:30:49.964Z&created_at_gt=1958-05-09T01:30:49.964Z&created_at_gte=1958-05-09T01:30:49.964Z&created_at_lt=1958-05-09T01:30:49.964Z&created_at_lte=1958-05-09T01:30:49.964Z&created_before=1958-05-09T01:30:49.964Z&limit=6100&offset=6100&ordering=string&search=string&trigger_source=API&user_id=6100&username=string","host":["{{baseUrl}}"],"path":["auditlog"],"query":[{"key":"action_description","value":"string"},{"key":"action_type","value":"LOGIN","description":"Type of action performed\n\n* `CREATE` - Create\n* `UPDATE` - Update\n* `DELETE` - Delete\n* `LOGIN` - Login\n* `LOGOUT` - Logout\n* `TEST` - Test\n* `TEAM_MEMBERSHIP_ADD` - Team Membership Add\n* `TEAM_MEMBERSHIP_REMOVE` - Team Membership Remove\n* `TEAM_MEMBERSHIP_CLEAR` - Team Membership Clear\n* `REMEDIATION_PLAN_TEAM_ADD` - Remediation Plan Team Add\n* `REMEDIATION_PLAN_TEAM_REMOVE` - Remediation Plan Team Remove\n* `REMEDIATION_PLAN_TEAM_CLEAR` - Remediation Plan Team Clear\n* `EXCEPTION_PLAN_TEAM_ADD` - Exception Plan Team Add\n* `EXCEPTION_PLAN_TEAM_REMOVE` - Exception Plan Team Remove\n* `EXCEPTION_PLAN_TEAM_CLEAR` - Exception Plan Team Clear\n* `DERIVED_FIELD_RULE_ADD` - Derived Field Rule Add\n* `DERIVED_FIELD_RULE_REMOVE` - Derived Field Rule Remove\n* `DERIVED_FIELD_RULE_CLEAR` - Derived Field Rule Clear"},{"key":"created_after","value":"1958-05-09T01:30:49.964Z"},{"key":"created_at","value":"1980-08-29"},{"key":"created_at_exact","value":"1958-05-09T01:30:49.964Z"},{"key":"created_at_gt","value":"1958-05-09T01:30:49.964Z"},{"key":"created_at_gte","value":"1958-05-09T01:30:49.964Z"},{"key":"created_at_lt","value":"1958-05-09T01:30:49.964Z"},{"key":"created_at_lte","value":"1958-05-09T01:30:49.964Z"},{"key":"created_before","value":"1958-05-09T01:30:49.964Z"},{"key":"limit","value":"6100","description":"Number of results to return per page."},{"key":"offset","value":"6100","description":"The initial index from which to return the results."},{"key":"ordering","value":"string","description":"Which field to use when ordering the results."},{"key":"search","value":"string","description":"A search term."},{"key":"trigger_source","value":"API","description":"Source that triggered the audit log\n\n* `GUI` - GUI\n* `CLIENT_MANAGEMENT` - Client Management\n* `AUTOMATED` - Automated\n* `API` - API\n* `SYSTEM` - System"},{"key":"user_id","value":"6100"},{"key":"username","value":"string"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"count\": 123,\n  \"next\": \"{{baseUrl}}/auditlog/log?offset=400&limit=100\",\n  \"previous\": \"{{baseUrl}}/auditlog/log?offset=200&limit=100\",\n  \"results\": [\n    {\n      \"id\": \"48b9eb82-fc2d-4920-880e-45debbc992eb\",\n      \"username\": \"username\",\n      \"user_id\": \"user id\",\n      \"action_type\": \"UPDATE\",\n      \"action_description\": \"Settings updated: username\",\n      \"reference\": \"Settings:Id:48b9eb82-fc2d-4920-880e-45debbc992eb\",\n      \"trigger_source\": \"GUI\",\n      \"created_at\": \"2025-10-07T18:44:42.025453Z\"\n    }\n  ]\n}"}],"_postman_id":"c7a1aee6-87ae-41b6-8950-06bd4dc0ff6f"}],"id":"382e95ba-8e8b-4494-8e47-6391935d1a80","_postman_id":"382e95ba-8e8b-4494-8e47-6391935d1a80","description":""}],"event":[{"listen":"prerequest","script":{"id":"2ecb7345-0ccc-476f-ad15-15059288162f","type":"text/javascript","packages":{},"exec":[""]}},{"listen":"test","script":{"id":"542ff057-427d-4ff0-ba0c-ba6b83dffb0f","type":"text/javascript","packages":{},"exec":[""]}}],"variable":[{"key":"baseUrl","value":"/api","disabled":true}]}