{"openapi":"3.1.0","info":{"title":"API Reference","version":"1.0.0"},"paths":{"/pentests":{"get":{"operationId":"pentests_listPentests","summary":"List pentests","description":"Requires the `pentests:read` API key scope.","tags":["pentests"],"responses":{"200":{"description":"Every pentest in the workspace.","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/PentestSummary"}}}}},"401":{"description":"The API key is missing or invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The credential lacks the required scope or is not allowed this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"BearerAuth":[]}]},"post":{"operationId":"pentests_launchPentest","summary":"Launch a pentest","description":"Queues a hosted pentest. It runs asynchronously: poll [Get a pentest](/console/api/api-reference/pentests/get-pentest) with the returned `scanId`, or subscribe to the `pentest.completed` [webhook](/console/features/webhooks). An identical active launch may be reused, in which case the response names that pentest.\n\n**Scope.** With `endpointIds`, exactly those discovered endpoints are tested. Find them with [List applications](/console/api/api-reference/applications/list-apps) and [List endpoints](/console/api/api-reference/endpoints/list-endpoints), and send endpoint `id` values, not URLs or application IDs. Without `endpointIds`, every eligible application in the workspace is tested. Applications must have a linked domain with pentesting enabled, verification where required, and discovered endpoints; a selected application that is not ready is rejected rather than silently dropped.\n\n**Depth.** `scanLevel` defaults to `priority`, or to `full` with `endpointIds`, which accepts only `full`.\n\n**Branch.** `branch` must match the connected repository’s configured target branch; omitting it uses that branch. It cannot be combined with `endpointIds`. To test the changes between two commits, use [CI dispatch](/console/features/ci-integration#compare-two-explicit-commits) instead.\n\nUnknown fields and invalid scope return `400` before a pentest is created; the scope is never widened after a validation failure.\n\nRequires the `pentests:launch` API key scope.","tags":["pentests"],"responses":{"201":{"description":"The pentest was queued.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PentestLaunchResponse"}}}},"400":{"description":"The request is invalid. `error` names the field.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"The API key is missing or invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The credential lacks the required scope or is not allowed this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PentestLaunchRequest"}}}},"security":[{"BearerAuth":[]}]}},"/pentests/{pentestId}":{"get":{"operationId":"pentests_getPentest","summary":"Get a pentest","description":"Requires the `pentests:read` API key scope.","tags":["pentests"],"parameters":[{"name":"pentestId","in":"path","description":"Pentest UUID.","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"The pentest.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Pentest"}}}},"401":{"description":"The API key is missing or invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The credential lacks the required scope or is not allowed this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"The resource does not exist in this workspace.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"BearerAuth":[]}]}},"/pentests/{pentestId}/targets":{"get":{"operationId":"pentests_listPentestTargets","summary":"List pentest targets","description":"A target is one attack-surface endpoint the pentest exercised. Execution logs are stored per target, so a target ID is how you read them with [List target logs](/console/api/api-reference/agent-logs/list-target-logs), even for targets that produced no issue.\n\nRequires the `pentests:read` API key scope.","tags":["pentests"],"parameters":[{"name":"pentestId","in":"path","description":"Pentest UUID.","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"The pentest’s targets.","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/PentestTarget"}}}}},"401":{"description":"The API key is missing or invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The credential lacks the required scope or is not allowed this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"The resource does not exist in this workspace.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"BearerAuth":[]}]}},"/issues":{"get":{"operationId":"issues_listIssues","summary":"List issues","description":"Unpaginated. For close reasons and the full record, use [Get an issue](/console/api/api-reference/issues/get-issue). To be told about new findings instead of polling, register a [webhook endpoint](/console/features/webhooks).\n\nRequires the `issues:read` API key scope.","tags":["issues"],"parameters":[{"name":"scanId","in":"query","description":"Only issues from this pentest.","required":false,"schema":{"type":"string","format":"uuid"}},{"name":"status","in":"query","required":false,"schema":{"$ref":"#/components/schemas/IssuesGetParametersStatus"}},{"name":"severity","in":"query","required":false,"schema":{"$ref":"#/components/schemas/IssuesGetParametersSeverity"}},{"name":"branch","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Matching issues.","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/IssueSummary"}}}}},"401":{"description":"The API key is missing or invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The credential lacks the required scope or is not allowed this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"BearerAuth":[]}]}},"/issues/{issueId}":{"get":{"operationId":"issues_getIssue","summary":"Get an issue","description":"Requires the `issues:read` API key scope.","tags":["issues"],"parameters":[{"name":"issueId","in":"path","description":"Issue UUID or label, e.g. `VULN-000123`.","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"The issue.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Issue"}}}},"400":{"description":"The request is invalid. `error` names the field.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"The API key is missing or invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The credential lacks the required scope or is not allowed this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"The resource does not exist in this workspace.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"BearerAuth":[]}]},"patch":{"operationId":"issues_updateIssue","summary":"Update an issue","description":"Close an issue, mark it a false positive, reopen it, or change its endpoint. A status or duplicate change is also applied to the issue’s linked GitHub, Linear and Notion tickets.\n\n**Closing.** Send `closedDisposition` with every close that is not a plain fix. Reopening clears the disposition and the rest of the close record. `false-positive` is a status, so it never carries a disposition.\n\n**Duplicates.** Send `status: \"closed\"`, `closedDisposition: \"duplicate\"` and `duplicateOf` naming another issue in the workspace. `duplicateOf` is refused with any other disposition, and the original cannot itself be a duplicate. Closing an issue that has duplicates as a duplicate moves them onto the new original. Reopening the issue or changing its disposition clears the link.\n\n**Endpoint.** Setting `endpointId` also sets the issue’s application; `null` clears both.\n\nErrors: `400` for an invalid value, no update fields, or an inconsistent duplicate; `403` in workspaces where Pensar owns the verdict (move the issue to `in-review` instead); `404` when the issue, `duplicateOf` original or endpoint is not in the workspace; `409` when another finding in the same pentest has the same name and endpoint.\n\nRequires the `issues:write` API key scope.","tags":["issues"],"parameters":[{"name":"issueId","in":"path","description":"Issue UUID or label, e.g. `VULN-000123`.","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"The updated issue.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateIssueResponse"}}}},"400":{"description":"The request is invalid. `error` names the field.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"The API key is missing or invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The credential lacks the required scope or is not allowed this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"The resource does not exist in this workspace.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateIssueRequest"}}}},"security":[{"BearerAuth":[]}]}},"/issues/{issueId}/evidence":{"get":{"operationId":"issues_getIssueEvidence","summary":"Get issue evidence","description":"Each kind of evidence is null when unavailable. stdout, stderr and snippet content are each capped at 65,536 UTF-8 bytes, and `truncated` is true when a field in that object was shortened. Credentials are redacted before the cap is applied. Treat evidence as sensitive even after redaction.\n\nRequires the `issues:read` API key scope.","tags":["issues"],"parameters":[{"name":"issueId","in":"path","description":"Issue UUID or label, e.g. `VULN-000123`.","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"The issue’s evidence.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IssueEvidence"}}}},"400":{"description":"The request is invalid. `error` names the field.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"The API key is missing or invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The credential lacks the required scope or is not allowed this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"The resource does not exist in this workspace.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"BearerAuth":[]}]}},"/issues/{issueId}/retest":{"post":{"operationId":"issues_retestIssue","summary":"Retest an issue","description":"Queues an asynchronous retest against the issue’s original target. Subscribe to the `retest.completed` [webhook](/console/features/webhooks) for the verdict, or poll [List issue retests](/console/api/api-reference/issues/list-issue-retests). After a retest fails with `failureCode: \"target-scope\"`, send `targetRetry` to retry once against a replacement target; the original target is unchanged and history records both.\n\nRequires the `issues:write` API key scope.","tags":["issues"],"parameters":[{"name":"issueId","in":"path","description":"Issue UUID or label, e.g. `VULN-000123`.","required":true,"schema":{"type":"string"}}],"responses":{"201":{"description":"The retest was queued.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RetestResponse"}}}},"400":{"description":"The request is invalid. `error` names the field.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"The API key is missing or invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The credential lacks the required scope or is not allowed this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"The resource does not exist in this workspace.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RetestRequest"}}}},"security":[{"BearerAuth":[]}]}},"/issues/{issueId}/retests":{"get":{"operationId":"issues_listIssueRetests","summary":"List issue retests","description":"Most recent first. An issue that was never retested returns an empty array. `status` is derived from the retest’s timestamps, error and result, and `confidence` is the field to build an escalation rule on.\n\nRequires the `issues:read` API key scope.","tags":["issues"],"parameters":[{"name":"issueId","in":"path","description":"Issue UUID or label, e.g. `VULN-000123`.","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"The issue’s retests.","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Retest"}}}}},"400":{"description":"The request is invalid. `error` names the field.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"The API key is missing or invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The credential lacks the required scope or is not allowed this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"The resource does not exist in this workspace.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"BearerAuth":[]}]}},"/issues/{issueId}/pull-requests":{"get":{"operationId":"issues_listIssuePullRequests","summary":"List linked pull requests","description":"Requires the `issues:read` API key scope.","tags":["issues"],"parameters":[{"name":"issueId","in":"path","description":"Issue UUID or label, e.g. `VULN-000123`.","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Pull requests linked to the issue.","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/PullRequest"}}}}},"400":{"description":"The request is invalid. `error` names the field.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"The API key is missing or invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The credential lacks the required scope or is not allowed this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"The resource does not exist in this workspace.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"BearerAuth":[]}]},"post":{"operationId":"issues_linkIssuePullRequest","summary":"Link a pull request","description":"Links a pull request opened outside Pensar so the issue tracks its merge and close.\n\nRequires the `issues:write` API key scope.","tags":["issues"],"parameters":[{"name":"issueId","in":"path","description":"Issue UUID or label, e.g. `VULN-000123`.","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"It was already linked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkPullRequestResponse"}}}},"400":{"description":"The request is invalid. `error` names the field.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"The API key is missing or invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The credential lacks the required scope or is not allowed this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"The resource does not exist in this workspace.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkPullRequestRequest"}}}},"security":[{"BearerAuth":[]}]}},"/issues/{issueId}/comments":{"get":{"operationId":"issues_listIssueComments","summary":"List comments","description":"The review thread on an issue, oldest first.\n\nRequires the `issues:read` API key scope.","tags":["issues"],"parameters":[{"name":"issueId","in":"path","description":"Issue UUID or label, e.g. `VULN-000123`.","required":true,"schema":{"type":"string"}},{"name":"page","in":"query","description":"Defaults to 1.","required":false,"schema":{"type":"integer","minimum":1,"maximum":9007199254740991}},{"name":"pageSize","in":"query","description":"Defaults to 50.","required":false,"schema":{"type":"integer","minimum":1,"maximum":200}}],"responses":{"200":{"description":"A page of comments.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommentList"}}}},"400":{"description":"The request is invalid. `error` names the field.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"The API key is missing or invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The credential lacks the required scope or is not allowed this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"The resource does not exist in this workspace.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"BearerAuth":[]}]},"post":{"operationId":"issues_createIssueComment","summary":"Post a comment","description":"Requires a user credential: a workspace API key has no author to attribute the change to and receives `403`.\n\nRequires the `issues:write` API key scope.","tags":["issues"],"parameters":[{"name":"issueId","in":"path","description":"Issue UUID or label, e.g. `VULN-000123`.","required":true,"schema":{"type":"string"}}],"responses":{"201":{"description":"The posted comment.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Comment"}}}},"400":{"description":"The request is invalid. `error` names the field.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"The API key is missing or invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The credential lacks the required scope or is not allowed this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"The resource does not exist in this workspace.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateCommentRequest"}}}},"security":[{"BearerAuth":[]}]}},"/issues/{issueId}/fixes":{"get":{"operationId":"fixes_listFixes","summary":"List fixes","description":"Requires the `fixes:read` API key scope.","tags":["fixes"],"parameters":[{"name":"issueId","in":"path","description":"Issue UUID or label, e.g. `VULN-000123`.","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"The issue’s fixes.","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/FixSummary"}}}}},"400":{"description":"The request is invalid. `error` names the field.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"The API key is missing or invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The credential lacks the required scope or is not allowed this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"The resource does not exist in this workspace.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"BearerAuth":[]}]}},"/fixes/{fixId}":{"get":{"operationId":"fixes_getFix","summary":"Get a fix","description":"Requires the `fixes:read` API key scope.","tags":["fixes"],"parameters":[{"name":"fixId","in":"path","description":"Fix UUID.","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"The fix, with its diff.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Fix"}}}},"401":{"description":"The API key is missing or invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The credential lacks the required scope or is not allowed this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"The resource does not exist in this workspace.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"BearerAuth":[]}]}},"/issues/{issueId}/logs":{"get":{"operationId":"agentLogs_listIssueLogs","summary":"List issue logs","description":"Agent activity from the pentest that found the issue.\n\nRequires the `issues:read` API key scope.","tags":["agentLogs"],"parameters":[{"name":"issueId","in":"path","description":"Issue UUID or label, e.g. `VULN-000123`.","required":true,"schema":{"type":"string"}},{"name":"level","in":"query","required":false,"schema":{"$ref":"#/components/schemas/IssuesIssueIdLogsGetParametersLevel"}},{"name":"role","in":"query","required":false,"schema":{"$ref":"#/components/schemas/IssuesIssueIdLogsGetParametersRole"}},{"name":"limit","in":"query","description":"Maximum entries to return. Defaults to 100.","required":false,"schema":{"type":"integer","minimum":1,"maximum":500}}],"responses":{"200":{"description":"Log entries, oldest first.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IssueLogList"}}}},"400":{"description":"The request is invalid. `error` names the field.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"The API key is missing or invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The credential lacks the required scope or is not allowed this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"The resource does not exist in this workspace.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"BearerAuth":[]}]}},"/issues/{issueId}/logs/search":{"post":{"operationId":"agentLogs_searchIssueLogs","summary":"Search issue logs","description":"Requires the `issues:read` API key scope.","tags":["agentLogs"],"parameters":[{"name":"issueId","in":"path","description":"Issue UUID or label, e.g. `VULN-000123`.","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Each match with its surrounding entries.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IssueLogSearchResult"}}}},"400":{"description":"The request is invalid. `error` names the field.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"The API key is missing or invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The credential lacks the required scope or is not allowed this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"The resource does not exist in this workspace.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LogSearchRequest"}}}},"security":[{"BearerAuth":[]}]}},"/targets/{targetId}/logs":{"get":{"operationId":"agentLogs_listTargetLogs","summary":"List target logs","description":"Everything the pentest did against one target, whether or not it produced an issue.\n\nRequires the `pentests:read` API key scope.","tags":["agentLogs"],"parameters":[{"name":"targetId","in":"path","description":"Target UUID, from List pentest targets.","required":true,"schema":{"type":"string"}},{"name":"level","in":"query","required":false,"schema":{"$ref":"#/components/schemas/TargetsTargetIdLogsGetParametersLevel"}},{"name":"role","in":"query","required":false,"schema":{"$ref":"#/components/schemas/TargetsTargetIdLogsGetParametersRole"}},{"name":"limit","in":"query","description":"Maximum entries to return. Defaults to 100.","required":false,"schema":{"type":"integer","minimum":1,"maximum":500}}],"responses":{"200":{"description":"Log entries, oldest first.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TargetLogList"}}}},"401":{"description":"The API key is missing or invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The credential lacks the required scope or is not allowed this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"The resource does not exist in this workspace.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"BearerAuth":[]}]}},"/targets/{targetId}/logs/search":{"post":{"operationId":"agentLogs_searchTargetLogs","summary":"Search target logs","description":"Requires the `pentests:read` API key scope.","tags":["agentLogs"],"parameters":[{"name":"targetId","in":"path","description":"Target UUID, from List pentest targets.","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Each match with its surrounding entries.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TargetLogSearchResult"}}}},"400":{"description":"The request is invalid. `error` names the field.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"The API key is missing or invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The credential lacks the required scope or is not allowed this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"The resource does not exist in this workspace.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LogSearchRequest"}}}},"security":[{"BearerAuth":[]}]}},"/domains":{"get":{"operationId":"domains_listDomains","summary":"List domains","description":"Requires the `inventory:read` API key scope.","tags":["domains"],"responses":{"200":{"description":"The workspace’s domains.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainList"}}}},"401":{"description":"The API key is missing or invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The credential lacks the required scope or is not allowed this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"BearerAuth":[]}]},"post":{"operationId":"domains_createDomain","summary":"Add a domain","description":"Adding a domain does not verify it; see [Verifying Domains](/console/domains/verifying-domains).\n\nRequires the `inventory:add` API key scope.","tags":["domains"],"responses":{"200":{"description":"The domain was already in the workspace.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Domain"}}}},"400":{"description":"The request is invalid. `error` names the field.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"The API key is missing or invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The credential lacks the required scope or is not allowed this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateDomainRequest"}}}},"security":[{"BearerAuth":[]}]}},"/apps":{"get":{"operationId":"applications_listApps","summary":"List applications","description":"Requires the `inventory:read` API key scope.","tags":["applications"],"parameters":[{"name":"limit","in":"query","description":"Page size. Defaults to 100.","required":false,"schema":{"type":"integer","minimum":1,"maximum":200}},{"name":"offset","in":"query","description":"Results to skip.","required":false,"schema":{"type":"integer","minimum":0,"maximum":9007199254740991}}],"responses":{"200":{"description":"A page of applications.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppList"}}}},"401":{"description":"The API key is missing or invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The credential lacks the required scope or is not allowed this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"BearerAuth":[]}]},"post":{"operationId":"applications_createApp","summary":"Create an application","description":"Requires the `inventory:write` API key scope.","tags":["applications"],"responses":{"201":{"description":"The created application.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/App"}}}},"400":{"description":"The request is invalid. `error` names the field.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"The API key is missing or invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The credential lacks the required scope or is not allowed this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"The resource does not exist in this workspace.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateAppRequest"}}}},"security":[{"BearerAuth":[]}]}},"/apps/{appId}":{"get":{"operationId":"applications_getApp","summary":"Get an application","description":"Requires the `inventory:read` API key scope.","tags":["applications"],"parameters":[{"name":"appId","in":"path","description":"Application UUID.","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"The application.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/App"}}}},"401":{"description":"The API key is missing or invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The credential lacks the required scope or is not allowed this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"The resource does not exist in this workspace.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"BearerAuth":[]}]},"delete":{"operationId":"applications_deleteApp","summary":"Delete an application","description":"Requires the `inventory:write` API key scope.","tags":["applications"],"parameters":[{"name":"appId","in":"path","description":"Application UUID.","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"The application was deleted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeleteAppResponse"}}}},"401":{"description":"The API key is missing or invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The credential lacks the required scope or is not allowed this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"The resource does not exist in this workspace.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"BearerAuth":[]}]},"patch":{"operationId":"applications_updateApp","summary":"Update an application","description":"Send at least one field.\n\nRequires the `inventory:write` API key scope.","tags":["applications"],"parameters":[{"name":"appId","in":"path","description":"Application UUID.","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"The updated application.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/App"}}}},"400":{"description":"The request is invalid. `error` names the field.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"The API key is missing or invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The credential lacks the required scope or is not allowed this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"The resource does not exist in this workspace.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateAppRequest"}}}},"security":[{"BearerAuth":[]}]}},"/search/apps":{"get":{"operationId":"applications_searchApps","summary":"Search applications","description":"Requires the `inventory:read` API key scope.","tags":["applications"],"parameters":[{"name":"q","in":"query","description":"Substring to match.","required":true,"schema":{"type":"string","minLength":1,"maxLength":256}},{"name":"type","in":"query","required":false,"schema":{"$ref":"#/components/schemas/SearchAppsGetParametersType"}},{"name":"limit","in":"query","description":"Page size. Defaults to 50.","required":false,"schema":{"type":"integer","minimum":1,"maximum":200}},{"name":"offset","in":"query","description":"Results to skip.","required":false,"schema":{"type":"integer","minimum":0,"maximum":9007199254740991}}],"responses":{"200":{"description":"A page of matching applications.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppSearchResult"}}}},"400":{"description":"The request is invalid. `error` names the field.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"The API key is missing or invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The credential lacks the required scope or is not allowed this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"BearerAuth":[]}]}},"/apps/{appId}/endpoints":{"get":{"operationId":"endpoints_listEndpoints","summary":"List endpoints","description":"Use the returned `id` values as `endpointIds` when launching a pentest.\n\nRequires the `inventory:read` API key scope.","tags":["endpoints"],"parameters":[{"name":"appId","in":"path","description":"Application UUID.","required":true,"schema":{"type":"string"}},{"name":"type","in":"query","required":false,"schema":{"$ref":"#/components/schemas/AppsAppIdEndpointsGetParametersType"}},{"name":"limit","in":"query","description":"Page size. Defaults to 100.","required":false,"schema":{"type":"integer","minimum":1,"maximum":200}},{"name":"offset","in":"query","description":"Results to skip.","required":false,"schema":{"type":"integer","minimum":0,"maximum":9007199254740991}}],"responses":{"200":{"description":"A page of the application’s endpoints.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EndpointList"}}}},"400":{"description":"The request is invalid. `error` names the field.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"The API key is missing or invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The credential lacks the required scope or is not allowed this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"The resource does not exist in this workspace.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"BearerAuth":[]}]},"post":{"operationId":"endpoints_createEndpoint","summary":"Create an endpoint","description":"Requires the `inventory:write` API key scope.","tags":["endpoints"],"parameters":[{"name":"appId","in":"path","description":"Application UUID.","required":true,"schema":{"type":"string"}}],"responses":{"201":{"description":"The created endpoint.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Endpoint"}}}},"400":{"description":"The request is invalid. `error` names the field.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"The API key is missing or invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The credential lacks the required scope or is not allowed this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"The resource does not exist in this workspace.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateEndpointRequest"}}}},"security":[{"BearerAuth":[]}]}},"/endpoints/{endpointId}":{"get":{"operationId":"endpoints_getEndpoint","summary":"Get an endpoint","description":"Requires the `inventory:read` API key scope.","tags":["endpoints"],"parameters":[{"name":"endpointId","in":"path","description":"Endpoint UUID.","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"The endpoint.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Endpoint"}}}},"401":{"description":"The API key is missing or invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The credential lacks the required scope or is not allowed this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"The resource does not exist in this workspace.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"BearerAuth":[]}]},"delete":{"operationId":"endpoints_deleteEndpoint","summary":"Delete an endpoint","description":"Requires the `inventory:write` API key scope.","tags":["endpoints"],"parameters":[{"name":"endpointId","in":"path","description":"Endpoint UUID.","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"The endpoint was deleted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeleteEndpointResponse"}}}},"401":{"description":"The API key is missing or invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The credential lacks the required scope or is not allowed this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"The resource does not exist in this workspace.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"BearerAuth":[]}]},"patch":{"operationId":"endpoints_updateEndpoint","summary":"Update an endpoint","description":"Send at least one field. Returns `409` when the application already has an endpoint with the same path and transport.\n\nRequires the `inventory:write` API key scope.","tags":["endpoints"],"parameters":[{"name":"endpointId","in":"path","description":"Endpoint UUID.","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"The updated endpoint.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Endpoint"}}}},"400":{"description":"The request is invalid. `error` names the field.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"The API key is missing or invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The credential lacks the required scope or is not allowed this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"The resource does not exist in this workspace.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateEndpointRequest"}}}},"security":[{"BearerAuth":[]}]}},"/search/endpoints":{"get":{"operationId":"endpoints_searchEndpoints","summary":"Search endpoints","description":"Searches every application unless `applicationId` is set.\n\nRequires the `inventory:read` API key scope.","tags":["endpoints"],"parameters":[{"name":"q","in":"query","description":"Substring to match.","required":true,"schema":{"type":"string","minLength":1,"maxLength":256}},{"name":"applicationId","in":"query","required":false,"schema":{"type":"string","format":"uuid"}},{"name":"type","in":"query","required":false,"schema":{"$ref":"#/components/schemas/SearchEndpointsGetParametersType"}},{"name":"authRequired","in":"query","required":false,"schema":{"type":"boolean"}},{"name":"limit","in":"query","description":"Page size. Defaults to 50.","required":false,"schema":{"type":"integer","minimum":1,"maximum":200}},{"name":"offset","in":"query","description":"Results to skip.","required":false,"schema":{"type":"integer","minimum":0,"maximum":9007199254740991}}],"responses":{"200":{"description":"A page of matching endpoints.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EndpointSearchResult"}}}},"400":{"description":"The request is invalid. `error` names the field.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"The API key is missing or invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The credential lacks the required scope or is not allowed this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"The resource does not exist in this workspace.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"BearerAuth":[]}]}},"/knowledge":{"get":{"operationId":"knowledgeBase_listKnowledge","summary":"List knowledge entries","description":"Newest first.\n\nRequires the `knowledge:read` API key scope.","tags":["knowledgeBase"],"parameters":[{"name":"category","in":"query","required":false,"schema":{"$ref":"#/components/schemas/KnowledgeGetParametersCategory"}},{"name":"status","in":"query","required":false,"schema":{"$ref":"#/components/schemas/KnowledgeGetParametersStatus"}},{"name":"tags","in":"query","description":"Comma-separated tags. Matches entries carrying every listed tag.","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Matching entries.","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/KnowledgeEntry"}}}}},"400":{"description":"The request is invalid. `error` names the field.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"The API key is missing or invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The credential lacks the required scope or is not allowed this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"BearerAuth":[]}]},"post":{"operationId":"knowledgeBase_createKnowledge","summary":"Create a knowledge entry","description":"Requires a user credential: a workspace API key has no author to attribute the change to and receives `403`. An `always` entry also requires a workspace admin or owner. A create past the workspace's [Always limit](/console/features/knowledge-base#the-always-limit) returns `400`.\n\nRequires the `knowledge:write` API key scope.","tags":["knowledgeBase"],"responses":{"201":{"description":"The created entry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/KnowledgeEntry"}}}},"400":{"description":"The request is invalid. `error` names the field.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"The API key is missing or invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The credential lacks the required scope or is not allowed this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateKnowledgeRequest"}}}},"security":[{"BearerAuth":[]}]}},"/knowledge/{entryId}":{"get":{"operationId":"knowledgeBase_getKnowledge","summary":"Get a knowledge entry","description":"Requires the `knowledge:read` API key scope.","tags":["knowledgeBase"],"parameters":[{"name":"entryId","in":"path","description":"Knowledge base entry UUID.","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"The entry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/KnowledgeEntry"}}}},"401":{"description":"The API key is missing or invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The credential lacks the required scope or is not allowed this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"The resource does not exist in this workspace.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"BearerAuth":[]}]},"delete":{"operationId":"knowledgeBase_archiveKnowledge","summary":"Archive a knowledge entry","description":"Sets `status` to `archived` rather than deleting. Requires a user credential: a workspace API key has no author to attribute the change to and receives `403`. Archiving an `always` entry also requires a workspace admin or owner.\n\nRequires the `knowledge:write` API key scope.","tags":["knowledgeBase"],"parameters":[{"name":"entryId","in":"path","description":"Knowledge base entry UUID.","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"The archived entry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/KnowledgeEntry"}}}},"401":{"description":"The API key is missing or invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The credential lacks the required scope or is not allowed this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"The resource does not exist in this workspace.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"BearerAuth":[]}]},"patch":{"operationId":"knowledgeBase_updateKnowledge","summary":"Update a knowledge entry","description":"Requires a user credential: a workspace API key has no author to attribute the change to and receives `403`. Send at least one field. Changing an `always` entry, or making one, also requires a workspace admin or owner.\n\nRequires the `knowledge:write` API key scope.","tags":["knowledgeBase"],"parameters":[{"name":"entryId","in":"path","description":"Knowledge base entry UUID.","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"The updated entry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/KnowledgeEntry"}}}},"400":{"description":"The request is invalid. `error` names the field.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"The API key is missing or invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The credential lacks the required scope or is not allowed this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"The resource does not exist in this workspace.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateKnowledgeRequest"}}}},"security":[{"BearerAuth":[]}]}},"/webhook-endpoints":{"get":{"operationId":"webhookEndpoints_listWebhookEndpoints","summary":"List webhook endpoints","description":"Newest first. The signing secret is never included. Payloads, signatures and retries are described on the [Webhooks](/console/features/webhooks) page.\n\nRequires the `settings:read` API key scope.","tags":["webhookEndpoints"],"responses":{"200":{"description":"The workspace’s webhook endpoints.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookEndpointList"}}}},"401":{"description":"The API key is missing or invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The credential lacks the required scope or is not allowed this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"BearerAuth":[]}]},"post":{"operationId":"webhookEndpoints_createWebhookEndpoint","summary":"Create a webhook endpoint","description":"Registers an endpoint and mints its signing secret, which this response returns once. Store it: it cannot be read back, and rotating means deleting and re-creating the endpoint. Duplicate `events` are collapsed. A URL Pensar would refuse to deliver to is a `400`; a URL already registered is a `409`.\n\nRequires the `settings:write` API key scope.","tags":["webhookEndpoints"],"responses":{"201":{"description":"The endpoint and its signing secret.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateWebhookEndpointResponse"}}}},"400":{"description":"The request is invalid. `error` names the field.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"The API key is missing or invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The credential lacks the required scope or is not allowed this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateWebhookEndpointRequest"}}}},"security":[{"BearerAuth":[]}]}},"/webhook-endpoints/{endpointId}":{"get":{"operationId":"webhookEndpoints_getWebhookEndpoint","summary":"Get a webhook endpoint","description":"Requires the `settings:read` API key scope.","tags":["webhookEndpoints"],"parameters":[{"name":"endpointId","in":"path","description":"Webhook endpoint UUID.","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"The endpoint and its recent deliveries.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookEndpointDetail"}}}},"401":{"description":"The API key is missing or invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The credential lacks the required scope or is not allowed this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"The resource does not exist in this workspace.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"BearerAuth":[]}]},"delete":{"operationId":"webhookEndpoints_deleteWebhookEndpoint","summary":"Delete a webhook endpoint","description":"Also deletes its delivery history.\n\nRequires the `settings:write` API key scope.","tags":["webhookEndpoints"],"parameters":[{"name":"endpointId","in":"path","description":"Webhook endpoint UUID.","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"The endpoint was deleted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeleteWebhookEndpointResponse"}}}},"401":{"description":"The API key is missing or invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The credential lacks the required scope or is not allowed this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"The resource does not exist in this workspace.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"BearerAuth":[]}]},"patch":{"operationId":"webhookEndpoints_updateWebhookEndpoint","summary":"Update a webhook endpoint","description":"Send at least one field. A changed `url` is validated again.\n\nRequires the `settings:write` API key scope.","tags":["webhookEndpoints"],"parameters":[{"name":"endpointId","in":"path","description":"Webhook endpoint UUID.","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"The updated endpoint.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookEndpointResponse"}}}},"400":{"description":"The request is invalid. `error` names the field.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"The API key is missing or invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The credential lacks the required scope or is not allowed this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"The resource does not exist in this workspace.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateWebhookEndpointRequest"}}}},"security":[{"BearerAuth":[]}]}},"/webhook-endpoints/{endpointId}/test":{"post":{"operationId":"webhookEndpoints_testWebhookEndpoint","summary":"Send a test delivery","description":"Queues a real, signed `issue.created` delivery of the workspace’s most recent finding, whatever the endpoint subscribes to. With no findings it sends a synthetic issue labelled `VULN-SAMPLE`. Read the delivery log for the outcome. A disabled endpoint returns `409`.\n\nRequires the `settings:write` API key scope.","tags":["webhookEndpoints"],"parameters":[{"name":"endpointId","in":"path","description":"Webhook endpoint UUID.","required":true,"schema":{"type":"string"}}],"responses":{"202":{"description":"The delivery was queued.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TestWebhookEndpointResponse"}}}},"401":{"description":"The API key is missing or invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The credential lacks the required scope or is not allowed this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"The resource does not exist in this workspace.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"The request conflicts with the current state of the resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"BearerAuth":[]}]}},"/webhook-endpoints/{endpointId}/deliveries":{"get":{"operationId":"webhookEndpoints_listWebhookDeliveries","summary":"List webhook deliveries","description":"One record per attempt, including retries, newest first.\n\nRequires the `settings:read` API key scope.","tags":["webhookEndpoints"],"parameters":[{"name":"endpointId","in":"path","description":"Webhook endpoint UUID.","required":true,"schema":{"type":"string"}},{"name":"limit","in":"query","description":"Defaults to 50.","required":false,"schema":{"type":"integer","minimum":1,"maximum":200}},{"name":"includePayload","in":"query","description":"Include the body sent on each attempt.","required":false,"schema":{"type":"boolean"}}],"responses":{"200":{"description":"Delivery attempts.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookDeliveryList"}}}},"400":{"description":"The request is invalid. `error` names the field.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"The API key is missing or invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"The credential lacks the required scope or is not allowed this action.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"The resource does not exist in this workspace.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"BearerAuth":[]}]}},"/auth/validate":{"get":{"operationId":"auth_validateApiKey","summary":"Validate an API key","description":"Returns the workspace the credential belongs to.","tags":["auth"],"responses":{"200":{"description":"The credential is valid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidateApiKeyResponse"}}}},"401":{"description":"The API key is missing or invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"security":[{"BearerAuth":[]}]}}},"tags":[{"name":"pentests"},{"name":"issues"},{"name":"fixes"},{"name":"agentLogs"},{"name":"domains"},{"name":"applications"},{"name":"endpoints"},{"name":"knowledgeBase"},{"name":"webhookEndpoints"},{"name":"auth"}],"servers":[{"url":"https://api.pensar.dev","description":"Production"}],"components":{"schemas":{"PentestStatus":{"type":"string","enum":["queued","running","paused","completed","failed"],"title":"PentestStatus"},"PentestSummary":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"label":{"type":"string"},"status":{"$ref":"#/components/schemas/PentestStatus"},"startedAt":{"type":"string","format":"date-time"},"completedAt":{"type":"string","format":"date-time"}},"required":["id","label","status"],"title":"PentestSummary"},"ErrorResponse":{"type":"object","properties":{"error":{"type":"string","description":"What went wrong, naming the offending value when useful."}},"required":["error"],"description":"Every non-2xx response carries this body.","title":"ErrorResponse"},"PentestLaunchRequestScanLevel":{"type":"string","enum":["priority","full"],"description":"Legacy launches default to priority; exact endpoint launches require full and default to full.","title":"PentestLaunchRequestScanLevel"},"PentestLaunchRequest":{"type":"object","properties":{"branch":{"type":"string","description":"Configured repository branch only; cannot be combined with endpointIds."},"scanLevel":{"$ref":"#/components/schemas/PentestLaunchRequestScanLevel","description":"Legacy launches default to priority; exact endpoint launches require full and default to full."},"endpointIds":{"type":"array","items":{"type":"string","format":"uuid"},"description":"Exact nonempty list of discovered endpoint UUIDs in this workspace (maximum 1000)."},"knowledgeEntryIds":{"type":"array","items":{"type":"string","format":"uuid"},"description":"Active knowledge base entry UUIDs to attach as context for this run (maximum 20)."}},"title":"PentestLaunchRequest"},"PentestLaunchResponseStatus":{"type":"string","enum":["queued"],"title":"PentestLaunchResponseStatus"},"PentestLaunchResponse":{"type":"object","properties":{"scanId":{"type":"string","format":"uuid","description":"Pentest ID. Pass it to `GET /pentests/{pentestId}`."},"label":{"type":"string"},"status":{"$ref":"#/components/schemas/PentestLaunchResponseStatus"},"message":{"type":"string"}},"required":["scanId","label","status","message"],"title":"PentestLaunchResponse"},"Pentest":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"label":{"type":"string"},"status":{"$ref":"#/components/schemas/PentestStatus"},"startedAt":{"type":"string","format":"date-time"},"completedAt":{"type":"string","format":"date-time"},"workspaceId":{"type":"string","format":"uuid"},"workspaceName":{"type":"string"},"errorMessage":{"type":"string","description":"Present when the pentest ended with an error."},"issuesFound":{"type":"integer"},"reportReady":{"type":"boolean"}},"required":["id","label","status","workspaceId","workspaceName","issuesFound","reportReady"],"title":"Pentest"},"TargetStatus":{"type":"string","enum":["queued","inProgress","retrying","paused","resuming","completed","error"],"title":"TargetStatus"},"PentestTarget":{"type":"object","properties":{"id":{"type":"string","format":"uuid","description":"Target ID, used by the target log routes."},"url":{"type":["string","null"]},"applicationId":{"type":"string","format":"uuid"},"applicationName":{"type":"string"},"status":{"$ref":"#/components/schemas/TargetStatus"},"attempt":{"type":"integer"},"startedAt":{"type":"string","format":"date-time"},"completedAt":{"type":"string","format":"date-time"},"error":{"type":["string","null"]}},"required":["id","url","applicationId","applicationName","status","attempt","error"],"title":"PentestTarget"},"IssuesGetParametersStatus":{"type":"string","enum":["open","closed","false-positive","in-review"],"title":"IssuesGetParametersStatus"},"IssuesGetParametersSeverity":{"type":"string","enum":["critical","high","medium","low"],"title":"IssuesGetParametersSeverity"},"Severity":{"type":"string","enum":["critical","high","medium","low"],"title":"Severity"},"IssueStatus":{"type":"string","enum":["open","closed","false-positive","in-review"],"title":"IssueStatus"},"ClosedDisposition":{"type":"string","enum":["resolved","duplicate","wont-fix","out-of-scope","risk-accepted","other"],"description":"Structured close verdict. `other` appears only on findings closed before it was retired and cannot be written.","title":"ClosedDisposition"},"IssueSummary":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"issueLabel":{"type":["string","null"],"description":"Human-facing reference shown in the Console."},"title":{"type":"string"},"severity":{"$ref":"#/components/schemas/Severity"},"status":{"$ref":"#/components/schemas/IssueStatus"},"location":{"type":"string"},"url":{"type":"string","description":"Console link to the issue."},"closedAt":{"type":["string","null"],"format":"date-time"},"closedDisposition":{"oneOf":[{"$ref":"#/components/schemas/ClosedDisposition"},{"type":"null"}]},"duplicateOf":{"type":["string","null"],"format":"uuid"}},"required":["id","issueLabel","title","severity","status","location","url","closedAt","closedDisposition","duplicateOf"],"title":"IssueSummary"},"IssueCvssSource":{"type":"string","enum":["severity-default","ai-override","user-override"],"title":"IssueCvssSource"},"IssueCvssAssessmentSeverity":{"type":"string","enum":["NONE","LOW","MEDIUM","HIGH","CRITICAL"],"title":"IssueCvssAssessmentSeverity"},"IssueCvssAssessmentMetricsAv":{"type":"string","enum":["N","A","L","P"],"title":"IssueCvssAssessmentMetricsAv"},"IssueCvssAssessmentMetricsAc":{"type":"string","enum":["L","H"],"title":"IssueCvssAssessmentMetricsAc"},"IssueCvssAssessmentMetricsAt":{"type":"string","enum":["N","P"],"title":"IssueCvssAssessmentMetricsAt"},"IssueCvssAssessmentMetricsPr":{"type":"string","enum":["N","L","H"],"title":"IssueCvssAssessmentMetricsPr"},"IssueCvssAssessmentMetricsUi":{"type":"string","enum":["N","P","A"],"title":"IssueCvssAssessmentMetricsUi"},"IssueCvssAssessmentMetricsVc":{"type":"string","enum":["H","L","N"],"title":"IssueCvssAssessmentMetricsVc"},"IssueCvssAssessmentMetricsVi":{"type":"string","enum":["H","L","N"],"title":"IssueCvssAssessmentMetricsVi"},"IssueCvssAssessmentMetricsVa":{"type":"string","enum":["H","L","N"],"title":"IssueCvssAssessmentMetricsVa"},"IssueCvssAssessmentMetricsSc":{"type":"string","enum":["H","L","N"],"title":"IssueCvssAssessmentMetricsSc"},"IssueCvssAssessmentMetricsSi":{"type":"string","enum":["H","L","N"],"title":"IssueCvssAssessmentMetricsSi"},"IssueCvssAssessmentMetricsSa":{"type":"string","enum":["H","L","N"],"title":"IssueCvssAssessmentMetricsSa"},"IssueCvssAssessmentMetrics":{"type":"object","properties":{"AV":{"$ref":"#/components/schemas/IssueCvssAssessmentMetricsAv"},"AC":{"$ref":"#/components/schemas/IssueCvssAssessmentMetricsAc"},"AT":{"$ref":"#/components/schemas/IssueCvssAssessmentMetricsAt"},"PR":{"$ref":"#/components/schemas/IssueCvssAssessmentMetricsPr"},"UI":{"$ref":"#/components/schemas/IssueCvssAssessmentMetricsUi"},"VC":{"$ref":"#/components/schemas/IssueCvssAssessmentMetricsVc"},"VI":{"$ref":"#/components/schemas/IssueCvssAssessmentMetricsVi"},"VA":{"$ref":"#/components/schemas/IssueCvssAssessmentMetricsVa"},"SC":{"$ref":"#/components/schemas/IssueCvssAssessmentMetricsSc"},"SI":{"$ref":"#/components/schemas/IssueCvssAssessmentMetricsSi"},"SA":{"$ref":"#/components/schemas/IssueCvssAssessmentMetricsSa"}},"required":["AV","AC","AT","PR","UI","VC","VI","VA","SC","SI","SA"],"title":"IssueCvssAssessmentMetrics"},"IssueCvssAssessmentScoreType":{"type":"string","enum":["CVSS-B","CVSS-BT","CVSS-BE","CVSS-BTE"],"title":"IssueCvssAssessmentScoreType"},"IssueCvssAssessment":{"type":"object","properties":{"score":{"type":"number","format":"double","minimum":0,"maximum":10},"severity":{"$ref":"#/components/schemas/IssueCvssAssessmentSeverity"},"vectorString":{"type":"string"},"metrics":{"$ref":"#/components/schemas/IssueCvssAssessmentMetrics"},"scoreType":{"$ref":"#/components/schemas/IssueCvssAssessmentScoreType"}},"required":["score","severity","vectorString","metrics","scoreType"],"title":"IssueCvssAssessment"},"IssueCvssSeverityOverrideSeverity":{"type":"string","enum":["critical","high","medium","low"],"title":"IssueCvssSeverityOverrideSeverity"},"IssueCvssSeverityOverride":{"type":"object","properties":{"severity":{"$ref":"#/components/schemas/IssueCvssSeverityOverrideSeverity"},"reason":{"type":"string","minLength":1},"setBy":{"type":["string","null"]},"setAt":{"type":["string","null"]}},"required":["severity","reason","setBy","setAt"],"title":"IssueCvssSeverityOverride"},"IssueCvssMetricsAv":{"type":"string","enum":["N","A","L","P"],"title":"IssueCvssMetricsAv"},"IssueCvssMetricsAc":{"type":"string","enum":["L","H"],"title":"IssueCvssMetricsAc"},"IssueCvssMetricsAt":{"type":"string","enum":["N","P"],"title":"IssueCvssMetricsAt"},"IssueCvssMetricsPr":{"type":"string","enum":["N","L","H"],"title":"IssueCvssMetricsPr"},"IssueCvssMetricsUi":{"type":"string","enum":["N","P","A"],"title":"IssueCvssMetricsUi"},"IssueCvssMetricsVc":{"type":"string","enum":["H","L","N"],"title":"IssueCvssMetricsVc"},"IssueCvssMetricsVi":{"type":"string","enum":["H","L","N"],"title":"IssueCvssMetricsVi"},"IssueCvssMetricsVa":{"type":"string","enum":["H","L","N"],"title":"IssueCvssMetricsVa"},"IssueCvssMetricsSc":{"type":"string","enum":["H","L","N"],"title":"IssueCvssMetricsSc"},"IssueCvssMetricsSi":{"type":"string","enum":["H","L","N"],"title":"IssueCvssMetricsSi"},"IssueCvssMetricsSa":{"type":"string","enum":["H","L","N"],"title":"IssueCvssMetricsSa"},"IssueCvssMetrics":{"type":"object","properties":{"AV":{"$ref":"#/components/schemas/IssueCvssMetricsAv"},"AC":{"$ref":"#/components/schemas/IssueCvssMetricsAc"},"AT":{"$ref":"#/components/schemas/IssueCvssMetricsAt"},"PR":{"$ref":"#/components/schemas/IssueCvssMetricsPr"},"UI":{"$ref":"#/components/schemas/IssueCvssMetricsUi"},"VC":{"$ref":"#/components/schemas/IssueCvssMetricsVc"},"VI":{"$ref":"#/components/schemas/IssueCvssMetricsVi"},"VA":{"$ref":"#/components/schemas/IssueCvssMetricsVa"},"SC":{"$ref":"#/components/schemas/IssueCvssMetricsSc"},"SI":{"$ref":"#/components/schemas/IssueCvssMetricsSi"},"SA":{"$ref":"#/components/schemas/IssueCvssMetricsSa"}},"required":["AV","AC","AT","PR","UI","VC","VI","VA","SC","SI","SA"],"title":"IssueCvssMetrics"},"IssueCvss":{"type":"object","properties":{"score":{"type":"number","format":"double","minimum":0,"maximum":10},"source":{"$ref":"#/components/schemas/IssueCvssSource"},"scored":{"type":"boolean"},"assessment":{"oneOf":[{"$ref":"#/components/schemas/IssueCvssAssessment"},{"type":"null"}]},"reasoning":{"type":["string","null"]},"severityOverride":{"oneOf":[{"$ref":"#/components/schemas/IssueCvssSeverityOverride"},{"type":"null"}]},"vector":{"type":["string","null"]},"metrics":{"oneOf":[{"$ref":"#/components/schemas/IssueCvssMetrics"},{"type":"null"}]}},"required":["score","source","assessment","reasoning","severityOverride","vector","metrics"],"title":"IssueCvss"},"IssueRepositorySource":{"type":"string","enum":["Github","GithubEnterprise","Gitlab","Bitbucket","AzureDevOps","Zip"],"title":"IssueRepositorySource"},"IssueRepository":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"source":{"$ref":"#/components/schemas/IssueRepositorySource"},"owner":{"type":"string"},"name":{"type":"string"},"url":{"type":["string","null"]},"defaultBranch":{"type":"string"}},"required":["id","source","owner","name","url","defaultBranch"],"title":"IssueRepository"},"IssuePoc":{"type":"object","properties":{"fileName":{"type":"string"},"contents":{"type":"string"}},"required":["fileName","contents"],"title":"IssuePoc"},"IssueApplication":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"}},"required":["id","name"],"title":"IssueApplication"},"IssueEndpoint":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"url":{"type":"string"}},"required":["id","url"],"title":"IssueEndpoint"},"Confidence":{"type":"string","enum":["high","medium","low"],"title":"Confidence"},"IssueIntroducedBy":{"type":"object","properties":{"commit":{"type":"string"},"author":{"type":["string","null"]},"email":{"type":["string","null"]},"confidence":{"oneOf":[{"$ref":"#/components/schemas/Confidence"},{"type":"null"}]},"at":{"type":["string","null"],"format":"date-time"}},"required":["commit","author","email","confidence","at"],"title":"IssueIntroducedBy"},"Issue":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"label":{"type":["string","null"]},"title":{"type":["string","null"]},"description":{"type":["string","null"]},"severity":{"$ref":"#/components/schemas/Severity"},"severityLevel":{"type":"integer","description":"critical = 4, high = 3, medium = 2, low = 1."},"status":{"$ref":"#/components/schemas/IssueStatus"},"cwe":{"type":"array","items":{"type":"string"}},"cvss":{"oneOf":[{"$ref":"#/components/schemas/IssueCvss"},{"type":"null"}]},"repository":{"oneOf":[{"$ref":"#/components/schemas/IssueRepository"},{"type":"null"}]},"location":{"type":["string","null"]},"startLine":{"type":["integer","null"]},"endLine":{"type":["integer","null"]},"workspaceId":{"type":"string","format":"uuid"},"poc":{"oneOf":[{"$ref":"#/components/schemas/IssuePoc"},{"type":"null"}]},"branch":{"type":["string","null"]},"application":{"oneOf":[{"$ref":"#/components/schemas/IssueApplication"},{"type":"null"}]},"endpoint":{"oneOf":[{"$ref":"#/components/schemas/IssueEndpoint"},{"type":"null"}]},"introducedBy":{"oneOf":[{"$ref":"#/components/schemas/IssueIntroducedBy"},{"type":"null"}]},"pentestId":{"type":["string","null"],"format":"uuid"},"url":{"type":"string","description":"Console link to the issue."},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"closedAt":{"type":["string","null"],"format":"date-time"},"closedDisposition":{"oneOf":[{"$ref":"#/components/schemas/ClosedDisposition"},{"type":"null"}]},"duplicateOf":{"type":["string","null"],"format":"uuid"},"closedMethod":{"type":["string","null"]},"closedReason":{"type":["string","null"]},"closedComments":{"type":["string","null"]}},"required":["id","label","title","description","severity","severityLevel","status","cwe","cvss","repository","location","startLine","endLine","workspaceId","poc","branch","application","endpoint","introducedBy","pentestId","url","createdAt","updatedAt","closedAt","closedDisposition","duplicateOf","closedMethod","closedReason","closedComments"],"description":"The full issue, the same object webhook payloads carry. `cvss` is null for findings scored from severity alone.","title":"Issue"},"UpdateIssueRequestClosedDisposition":{"type":"string","enum":["resolved","duplicate","wont-fix","out-of-scope","risk-accepted"],"description":"Structured close verdict. Send one whenever a close is not a plain fix; a finding closed without one reads as resolved.","title":"UpdateIssueRequestClosedDisposition"},"UpdateIssueRequest":{"type":"object","properties":{"status":{"$ref":"#/components/schemas/IssueStatus"},"closedDisposition":{"$ref":"#/components/schemas/UpdateIssueRequestClosedDisposition","description":"Structured close verdict. Send one whenever a close is not a plain fix; a finding closed without one reads as resolved."},"duplicateOf":{"type":"string","description":"The original issue, as a UUID or label. Required with, and only with, `closedDisposition: \"duplicate\"`."},"closedReason":{"type":"string","description":"Free-text reason for closing."},"closedComments":{"type":"string"},"endpointId":{"type":["string","null"],"format":"uuid","description":"Endpoint in this workspace to associate. Also sets the issue's application. `null` clears both; omit to leave unchanged."},"userFlaggedFalsePositive":{"type":"boolean","description":"Use `status: \"false-positive\"`.","deprecated":true},"userFlaggedFalsePositiveReason":{"type":"string","description":"Use `closedReason`.","deprecated":true}},"title":"UpdateIssueRequest"},"UpdateIssueResponseIssue":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":["string","null"]},"status":{"$ref":"#/components/schemas/IssueStatus"},"severity":{"$ref":"#/components/schemas/Severity"},"userFlaggedFalsePositive":{"type":"boolean"},"closedAt":{"type":["string","null"],"format":"date-time"},"closedReason":{"type":["string","null"]},"closedDisposition":{"oneOf":[{"$ref":"#/components/schemas/ClosedDisposition"},{"type":"null"}]},"duplicateOf":{"type":["string","null"],"format":"uuid"},"endpointId":{"type":["string","null"],"format":"uuid"},"applicationId":{"type":["string","null"],"format":"uuid"}},"required":["id","name","status","severity","userFlaggedFalsePositive","closedAt","closedReason","closedDisposition","duplicateOf","endpointId","applicationId"],"title":"UpdateIssueResponseIssue"},"UpdateIssueResponse":{"type":"object","properties":{"success":{"type":"boolean"},"issue":{"$ref":"#/components/schemas/UpdateIssueResponseIssue"}},"required":["success","issue"],"title":"UpdateIssueResponse"},"IssueEvidencePoc":{"type":"object","properties":{"fileName":{"type":"string"},"contents":{"type":"string"},"language":{"type":["string","null"],"description":"Null when the filename has no recognized language."}},"required":["fileName","contents","language"],"title":"IssueEvidencePoc"},"IssueEvidencePocOutput":{"type":"object","properties":{"stdout":{"type":"string"},"stderr":{"type":"string"},"exitCode":{"type":"integer"},"executedAt":{"type":"string","format":"date-time"},"truncated":{"type":"boolean"}},"required":["stdout","stderr","exitCode","executedAt","truncated"],"title":"IssueEvidencePocOutput"},"IssueEvidenceStepsOneOf0Items":{"type":"object","properties":{"title":{"type":"string"},"description":{"type":"string"},"artifactIds":{"type":"array","items":{"type":"string"},"description":"IDs of the entries in `artifacts` this step relies on."}},"required":["title","description","artifactIds"],"title":"IssueEvidenceStepsOneOf0Items"},"IssueEvidenceSteps0":{"type":"array","items":{"$ref":"#/components/schemas/IssueEvidenceStepsOneOf0Items"},"title":"IssueEvidenceSteps0"},"IssueEvidenceStepsOneOf1ItemsArtifactsItemsOneOf0Kind":{"type":"string","enum":["http-response"],"title":"IssueEvidenceStepsOneOf1ItemsArtifactsItemsOneOf0Kind"},"IssueEvidenceStepsOneOf1ItemsArtifactsItems0":{"type":"object","properties":{"kind":{"$ref":"#/components/schemas/IssueEvidenceStepsOneOf1ItemsArtifactsItemsOneOf0Kind"},"method":{"type":"string"},"url":{"type":"string"},"status":{"type":"integer"},"body":{"type":"string"},"s3Key":{"type":"string"}},"required":["kind","method","url","status"],"title":"IssueEvidenceStepsOneOf1ItemsArtifactsItems0"},"IssueEvidenceStepsOneOf1ItemsArtifactsItemsOneOf1Kind":{"type":"string","enum":["command-output"],"title":"IssueEvidenceStepsOneOf1ItemsArtifactsItemsOneOf1Kind"},"IssueEvidenceStepsOneOf1ItemsArtifactsItems1":{"type":"object","properties":{"kind":{"$ref":"#/components/schemas/IssueEvidenceStepsOneOf1ItemsArtifactsItemsOneOf1Kind"},"cmd":{"type":"string"},"stdout":{"type":"string"},"stderr":{"type":"string"},"exitCode":{"type":"integer"}},"required":["kind","cmd","stdout","stderr","exitCode"],"title":"IssueEvidenceStepsOneOf1ItemsArtifactsItems1"},"IssueEvidenceStepsOneOf1ItemsArtifactsItemsOneOf2Kind":{"type":"string","enum":["screenshot"],"title":"IssueEvidenceStepsOneOf1ItemsArtifactsItemsOneOf2Kind"},"IssueEvidenceStepsOneOf1ItemsArtifactsItems2":{"type":"object","properties":{"kind":{"$ref":"#/components/schemas/IssueEvidenceStepsOneOf1ItemsArtifactsItemsOneOf2Kind"},"s3Key":{"type":"string"},"alt":{"type":"string"},"url":{"type":"string"}},"required":["kind","s3Key"],"title":"IssueEvidenceStepsOneOf1ItemsArtifactsItems2"},"IssueEvidenceStepsOneOf1ItemsArtifactsItemsOneOf3Kind":{"type":"string","enum":["log-snippet"],"title":"IssueEvidenceStepsOneOf1ItemsArtifactsItemsOneOf3Kind"},"IssueEvidenceStepsOneOf1ItemsArtifactsItems3":{"type":"object","properties":{"kind":{"$ref":"#/components/schemas/IssueEvidenceStepsOneOf1ItemsArtifactsItemsOneOf3Kind"},"source":{"type":"string"},"content":{"type":"string"}},"required":["kind","source","content"],"title":"IssueEvidenceStepsOneOf1ItemsArtifactsItems3"},"IssueEvidenceStepsOneOf1ItemsArtifactsItemsOneOf4Kind":{"type":"string","enum":["poc-output"],"title":"IssueEvidenceStepsOneOf1ItemsArtifactsItemsOneOf4Kind"},"IssueEvidenceStepsOneOf1ItemsArtifactsItems4":{"type":"object","properties":{"kind":{"$ref":"#/components/schemas/IssueEvidenceStepsOneOf1ItemsArtifactsItemsOneOf4Kind"},"fileName":{"type":"string"},"content":{"type":"string"},"exitCode":{"type":"integer"}},"required":["kind","fileName","content"],"title":"IssueEvidenceStepsOneOf1ItemsArtifactsItems4"},"IssueEvidenceStepsOneOf1ItemsArtifactsItemsOneOf5Kind":{"type":"string","enum":["file-reference"],"title":"IssueEvidenceStepsOneOf1ItemsArtifactsItemsOneOf5Kind"},"IssueEvidenceStepsOneOf1ItemsArtifactsItems5":{"type":"object","properties":{"kind":{"$ref":"#/components/schemas/IssueEvidenceStepsOneOf1ItemsArtifactsItemsOneOf5Kind"},"path":{"type":"string"},"lineStart":{"type":"integer"},"lineEnd":{"type":"integer"}},"required":["kind","path"],"title":"IssueEvidenceStepsOneOf1ItemsArtifactsItems5"},"IssueEvidenceStepsOneOf1ItemsArtifactsItemsOneOf6Kind":{"type":"string","enum":["code-snippet"],"title":"IssueEvidenceStepsOneOf1ItemsArtifactsItemsOneOf6Kind"},"IssueEvidenceStepsOneOf1ItemsArtifactsItems6":{"type":"object","properties":{"kind":{"$ref":"#/components/schemas/IssueEvidenceStepsOneOf1ItemsArtifactsItemsOneOf6Kind"},"path":{"type":"string"},"content":{"type":"string"},"language":{"type":"string"},"lineStart":{"type":"integer"},"highlightLines":{"type":"array","items":{"type":"integer"}}},"required":["kind","path","content"],"title":"IssueEvidenceStepsOneOf1ItemsArtifactsItems6"},"IssueEvidenceStepsOneOf1ItemsArtifactsItems":{"oneOf":[{"$ref":"#/components/schemas/IssueEvidenceStepsOneOf1ItemsArtifactsItems0"},{"$ref":"#/components/schemas/IssueEvidenceStepsOneOf1ItemsArtifactsItems1"},{"$ref":"#/components/schemas/IssueEvidenceStepsOneOf1ItemsArtifactsItems2"},{"$ref":"#/components/schemas/IssueEvidenceStepsOneOf1ItemsArtifactsItems3"},{"$ref":"#/components/schemas/IssueEvidenceStepsOneOf1ItemsArtifactsItems4"},{"$ref":"#/components/schemas/IssueEvidenceStepsOneOf1ItemsArtifactsItems5"},{"$ref":"#/components/schemas/IssueEvidenceStepsOneOf1ItemsArtifactsItems6"}],"title":"IssueEvidenceStepsOneOf1ItemsArtifactsItems"},"IssueEvidenceStepsOneOf1Items":{"type":"object","properties":{"title":{"type":"string"},"description":{"type":"string"},"detail":{"type":"string"},"artifacts":{"type":"array","items":{"$ref":"#/components/schemas/IssueEvidenceStepsOneOf1ItemsArtifactsItems"}}},"required":["title","description"],"title":"IssueEvidenceStepsOneOf1Items"},"IssueEvidenceSteps1":{"type":"array","items":{"$ref":"#/components/schemas/IssueEvidenceStepsOneOf1Items"},"title":"IssueEvidenceSteps1"},"IssueEvidenceSteps":{"oneOf":[{"$ref":"#/components/schemas/IssueEvidenceSteps0"},{"$ref":"#/components/schemas/IssueEvidenceSteps1"}],"description":"Recorded evidence steps, in order. Null when no completed evidence summary exists. Findings summarized before artifacts were introduced carry the older step shape, with artifacts inline.","title":"IssueEvidenceSteps"},"IssueEvidenceArtifactsItemsOneOf0Provenance":{"type":"object","properties":{"sessionId":{"type":"string"},"messageId":{"type":"string"},"partId":{"type":"string"},"toolCallId":{"type":"string"},"capturedAt":{"type":"string"}},"required":["sessionId","messageId","partId","capturedAt"],"title":"IssueEvidenceArtifactsItemsOneOf0Provenance"},"IssueEvidenceArtifactsItemsOneOf0Redaction":{"type":"object","properties":{"applied":{"type":"boolean"},"fields":{"type":"array","items":{"type":"string"}}},"required":["applied"],"title":"IssueEvidenceArtifactsItemsOneOf0Redaction"},"IssueEvidenceArtifactsItemsOneOf0Kind":{"type":"string","enum":["http-exchange"],"title":"IssueEvidenceArtifactsItemsOneOf0Kind"},"IssueEvidenceArtifactsItemsOneOf0Request":{"type":"object","properties":{"method":{"type":"string"},"url":{"type":"string"},"headers":{"type":"object","additionalProperties":{"type":"string"}},"body":{"type":"string"}},"required":["method","url"],"title":"IssueEvidenceArtifactsItemsOneOf0Request"},"IssueEvidenceArtifactsItemsOneOf0Response":{"type":"object","properties":{"status":{"type":"integer"},"statusText":{"type":"string"},"headers":{"type":"object","additionalProperties":{"type":"string"}},"body":{"type":"string"}},"required":["status"],"title":"IssueEvidenceArtifactsItemsOneOf0Response"},"IssueEvidenceArtifactsItems0":{"type":"object","properties":{"id":{"type":"string"},"provenance":{"$ref":"#/components/schemas/IssueEvidenceArtifactsItemsOneOf0Provenance"},"redaction":{"$ref":"#/components/schemas/IssueEvidenceArtifactsItemsOneOf0Redaction"},"truncated":{"type":"boolean"},"kind":{"$ref":"#/components/schemas/IssueEvidenceArtifactsItemsOneOf0Kind"},"request":{"$ref":"#/components/schemas/IssueEvidenceArtifactsItemsOneOf0Request"},"response":{"$ref":"#/components/schemas/IssueEvidenceArtifactsItemsOneOf0Response"}},"required":["id","redaction","kind","request","response"],"title":"IssueEvidenceArtifactsItems0"},"IssueEvidenceArtifactsItemsOneOf1Provenance":{"type":"object","properties":{"sessionId":{"type":"string"},"messageId":{"type":"string"},"partId":{"type":"string"},"toolCallId":{"type":"string"},"capturedAt":{"type":"string"}},"required":["sessionId","messageId","partId","capturedAt"],"title":"IssueEvidenceArtifactsItemsOneOf1Provenance"},"IssueEvidenceArtifactsItemsOneOf1Redaction":{"type":"object","properties":{"applied":{"type":"boolean"},"fields":{"type":"array","items":{"type":"string"}}},"required":["applied"],"title":"IssueEvidenceArtifactsItemsOneOf1Redaction"},"IssueEvidenceArtifactsItemsOneOf1Kind":{"type":"string","enum":["command-execution"],"title":"IssueEvidenceArtifactsItemsOneOf1Kind"},"IssueEvidenceArtifactsItems1":{"type":"object","properties":{"id":{"type":"string"},"provenance":{"$ref":"#/components/schemas/IssueEvidenceArtifactsItemsOneOf1Provenance"},"redaction":{"$ref":"#/components/schemas/IssueEvidenceArtifactsItemsOneOf1Redaction"},"truncated":{"type":"boolean"},"kind":{"$ref":"#/components/schemas/IssueEvidenceArtifactsItemsOneOf1Kind"},"command":{"type":"string"},"stdout":{"type":"string"},"stderr":{"type":"string"},"success":{"type":"boolean"},"exitCode":{"type":"integer"},"error":{"type":"string"}},"required":["id","redaction","kind","command","stdout","stderr"],"title":"IssueEvidenceArtifactsItems1"},"IssueEvidenceArtifactsItemsOneOf2Provenance":{"type":"object","properties":{"sessionId":{"type":"string"},"messageId":{"type":"string"},"partId":{"type":"string"},"toolCallId":{"type":"string"},"capturedAt":{"type":"string"}},"required":["sessionId","messageId","partId","capturedAt"],"title":"IssueEvidenceArtifactsItemsOneOf2Provenance"},"IssueEvidenceArtifactsItemsOneOf2Redaction":{"type":"object","properties":{"applied":{"type":"boolean"},"fields":{"type":"array","items":{"type":"string"}}},"required":["applied"],"title":"IssueEvidenceArtifactsItemsOneOf2Redaction"},"IssueEvidenceArtifactsItemsOneOf2Kind":{"type":"string","enum":["poc-execution"],"title":"IssueEvidenceArtifactsItemsOneOf2Kind"},"IssueEvidenceArtifactsItems2":{"type":"object","properties":{"id":{"type":"string"},"provenance":{"$ref":"#/components/schemas/IssueEvidenceArtifactsItemsOneOf2Provenance"},"redaction":{"$ref":"#/components/schemas/IssueEvidenceArtifactsItemsOneOf2Redaction"},"truncated":{"type":"boolean"},"kind":{"$ref":"#/components/schemas/IssueEvidenceArtifactsItemsOneOf2Kind"},"fileName":{"type":"string"},"content":{"type":"string"},"stdout":{"type":"string"},"stderr":{"type":"string"},"exitCode":{"type":"integer"},"executedAt":{"type":"string"}},"required":["id","redaction","kind","fileName","content","stdout","stderr"],"title":"IssueEvidenceArtifactsItems2"},"IssueEvidenceArtifactsItemsOneOf3Provenance":{"type":"object","properties":{"sessionId":{"type":"string"},"messageId":{"type":"string"},"partId":{"type":"string"},"toolCallId":{"type":"string"},"capturedAt":{"type":"string"}},"required":["sessionId","messageId","partId","capturedAt"],"title":"IssueEvidenceArtifactsItemsOneOf3Provenance"},"IssueEvidenceArtifactsItemsOneOf3Redaction":{"type":"object","properties":{"applied":{"type":"boolean"},"fields":{"type":"array","items":{"type":"string"}}},"required":["applied"],"title":"IssueEvidenceArtifactsItemsOneOf3Redaction"},"IssueEvidenceArtifactsItemsOneOf3Kind":{"type":"string","enum":["screenshot"],"title":"IssueEvidenceArtifactsItemsOneOf3Kind"},"IssueEvidenceArtifactsItems3":{"type":"object","properties":{"id":{"type":"string"},"provenance":{"$ref":"#/components/schemas/IssueEvidenceArtifactsItemsOneOf3Provenance"},"redaction":{"$ref":"#/components/schemas/IssueEvidenceArtifactsItemsOneOf3Redaction"},"truncated":{"type":"boolean"},"kind":{"$ref":"#/components/schemas/IssueEvidenceArtifactsItemsOneOf3Kind"},"s3Key":{"type":"string"},"alt":{"type":"string"},"url":{"type":"string"}},"required":["id","redaction","kind","s3Key"],"title":"IssueEvidenceArtifactsItems3"},"IssueEvidenceArtifactsItemsOneOf4Provenance":{"type":"object","properties":{"sessionId":{"type":"string"},"messageId":{"type":"string"},"partId":{"type":"string"},"toolCallId":{"type":"string"},"capturedAt":{"type":"string"}},"required":["sessionId","messageId","partId","capturedAt"],"title":"IssueEvidenceArtifactsItemsOneOf4Provenance"},"IssueEvidenceArtifactsItemsOneOf4Redaction":{"type":"object","properties":{"applied":{"type":"boolean"},"fields":{"type":"array","items":{"type":"string"}}},"required":["applied"],"title":"IssueEvidenceArtifactsItemsOneOf4Redaction"},"IssueEvidenceArtifactsItemsOneOf4Kind":{"type":"string","enum":["file-reference"],"title":"IssueEvidenceArtifactsItemsOneOf4Kind"},"IssueEvidenceArtifactsItems4":{"type":"object","properties":{"id":{"type":"string"},"provenance":{"$ref":"#/components/schemas/IssueEvidenceArtifactsItemsOneOf4Provenance"},"redaction":{"$ref":"#/components/schemas/IssueEvidenceArtifactsItemsOneOf4Redaction"},"truncated":{"type":"boolean"},"kind":{"$ref":"#/components/schemas/IssueEvidenceArtifactsItemsOneOf4Kind"},"path":{"type":"string"},"lineStart":{"type":"integer"},"lineEnd":{"type":"integer"}},"required":["id","redaction","kind","path"],"title":"IssueEvidenceArtifactsItems4"},"IssueEvidenceArtifactsItemsOneOf5Provenance":{"type":"object","properties":{"sessionId":{"type":"string"},"messageId":{"type":"string"},"partId":{"type":"string"},"toolCallId":{"type":"string"},"capturedAt":{"type":"string"}},"required":["sessionId","messageId","partId","capturedAt"],"title":"IssueEvidenceArtifactsItemsOneOf5Provenance"},"IssueEvidenceArtifactsItemsOneOf5Redaction":{"type":"object","properties":{"applied":{"type":"boolean"},"fields":{"type":"array","items":{"type":"string"}}},"required":["applied"],"title":"IssueEvidenceArtifactsItemsOneOf5Redaction"},"IssueEvidenceArtifactsItemsOneOf5Kind":{"type":"string","enum":["code-snippet"],"title":"IssueEvidenceArtifactsItemsOneOf5Kind"},"IssueEvidenceArtifactsItems5":{"type":"object","properties":{"id":{"type":"string"},"provenance":{"$ref":"#/components/schemas/IssueEvidenceArtifactsItemsOneOf5Provenance"},"redaction":{"$ref":"#/components/schemas/IssueEvidenceArtifactsItemsOneOf5Redaction"},"truncated":{"type":"boolean"},"kind":{"$ref":"#/components/schemas/IssueEvidenceArtifactsItemsOneOf5Kind"},"path":{"type":"string"},"content":{"type":"string"},"language":{"type":"string"},"lineStart":{"type":"integer"},"highlightLines":{"type":"array","items":{"type":"integer"}}},"required":["id","redaction","kind","path","content"],"title":"IssueEvidenceArtifactsItems5"},"IssueEvidenceArtifactsItems":{"oneOf":[{"$ref":"#/components/schemas/IssueEvidenceArtifactsItems0"},{"$ref":"#/components/schemas/IssueEvidenceArtifactsItems1"},{"$ref":"#/components/schemas/IssueEvidenceArtifactsItems2"},{"$ref":"#/components/schemas/IssueEvidenceArtifactsItems3"},{"$ref":"#/components/schemas/IssueEvidenceArtifactsItems4"},{"$ref":"#/components/schemas/IssueEvidenceArtifactsItems5"}],"title":"IssueEvidenceArtifactsItems"},"IssueEvidenceAttackPathItemsApplication":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"}},"required":["id","name"],"title":"IssueEvidenceAttackPathItemsApplication"},"IssueEvidenceAttackPathItems":{"type":"object","properties":{"application":{"oneOf":[{"$ref":"#/components/schemas/IssueEvidenceAttackPathItemsApplication"},{"type":"null"}]},"host":{"type":["string","null"]},"relationship":{"type":["string","null"]},"notes":{"type":["string","null"]}},"required":["application","host","relationship","notes"],"title":"IssueEvidenceAttackPathItems"},"IssueEvidenceCodeSnippet":{"type":"object","properties":{"repositoryId":{"type":"string","format":"uuid"},"path":{"type":"string"},"startLine":{"type":"integer"},"endLine":{"type":"integer"},"commit":{"type":"string"},"content":{"type":"string"},"truncated":{"type":"boolean"}},"required":["repositoryId","path","startLine","endLine","commit","content","truncated"],"description":"Read at the finding's recorded commit, never the current branch tip.","title":"IssueEvidenceCodeSnippet"},"CodeSnippetReason":{"type":"string","enum":["no_repository","no_location","no_commit","no_access","file_not_found","unsupported_repository","invalid_line_range"],"title":"CodeSnippetReason"},"IssueEvidence":{"type":"object","properties":{"issueId":{"type":"string","format":"uuid"},"poc":{"oneOf":[{"$ref":"#/components/schemas/IssueEvidencePoc"},{"type":"null"}]},"pocOutput":{"oneOf":[{"$ref":"#/components/schemas/IssueEvidencePocOutput"},{"type":"null"}]},"steps":{"oneOf":[{"$ref":"#/components/schemas/IssueEvidenceSteps"},{"type":"null"}],"description":"Recorded evidence steps, in order. Null when no completed evidence summary exists. Findings summarized before artifacts were introduced carry the older step shape, with artifacts inline."},"artifacts":{"type":["array","null"],"items":{"$ref":"#/components/schemas/IssueEvidenceArtifactsItems"}},"evidenceStatus":{"type":["string","null"],"description":"Status of the recorded evidence summary, e.g. `ready`. Reading evidence does not generate one."},"attackPath":{"type":["array","null"],"items":{"$ref":"#/components/schemas/IssueEvidenceAttackPathItems"},"description":"Ordered hops of a multi-application finding."},"codeSnippet":{"oneOf":[{"$ref":"#/components/schemas/IssueEvidenceCodeSnippet"},{"type":"null"}],"description":"Read at the finding's recorded commit, never the current branch tip."},"codeSnippetReason":{"oneOf":[{"$ref":"#/components/schemas/CodeSnippetReason"},{"type":"null"}],"description":"Why `codeSnippet` is null. Null when a snippet is returned."}},"required":["issueId","poc","pocOutput","steps","artifacts","evidenceStatus","attackPath","codeSnippet","codeSnippetReason"],"title":"IssueEvidence"},"RetestRequestTargetRetry":{"type":"object","properties":{"domainId":{"type":"string","format":"uuid"},"targetUrl":{"type":"string","format":"uri"}},"required":["domainId","targetUrl"],"description":"Only after a retest failed with `failureCode: \"target-scope\"`: a replacement target for one retry. `domainId` must be a verified domain in this workspace and `targetUrl` must be on its exact origin.","title":"RetestRequestTargetRetry"},"RetestRequest":{"type":"object","properties":{"targetRetry":{"$ref":"#/components/schemas/RetestRequestTargetRetry","description":"Only after a retest failed with `failureCode: \"target-scope\"`: a replacement target for one retry. `domainId` must be a verified domain in this workspace and `targetUrl` must be on its exact origin."}},"title":"RetestRequest"},"RetestResponseStatus":{"type":"string","enum":["queued"],"title":"RetestResponseStatus"},"RetestResponse":{"type":"object","properties":{"sessionId":{"type":"string","format":"uuid"},"issueId":{"type":"string","format":"uuid"},"status":{"$ref":"#/components/schemas/RetestResponseStatus"},"message":{"type":"string"}},"required":["sessionId","issueId","status","message"],"title":"RetestResponse"},"RetestStatus":{"type":"string","enum":["queued","in-progress","fixed","still-vulnerable","error"],"title":"RetestStatus"},"RetestFailureCode":{"type":"string","enum":["target-scope"],"description":"`target-scope` when the retest was denied for target scope; send `targetRetry` to retry against a replacement.","title":"RetestFailureCode"},"RetestTargetContext":{"type":"object","properties":{"originalTargetUrl":{"type":"string","minLength":1},"effectiveTargetUrl":{"type":"string"},"domainId":{"type":"string","format":"uuid"}},"required":["originalTargetUrl","effectiveTargetUrl","domainId"],"description":"Null for an ordinary retest; set for a retry against a replacement target.","title":"RetestTargetContext"},"Retest":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"status":{"$ref":"#/components/schemas/RetestStatus"},"stillExists":{"type":["boolean","null"]},"confidence":{"oneOf":[{"$ref":"#/components/schemas/Confidence"},{"type":"null"}]},"evidence":{"type":["string","null"]},"recommendation":{"type":["string","null"]},"error":{"type":["string","null"]},"failureCode":{"oneOf":[{"$ref":"#/components/schemas/RetestFailureCode"},{"type":"null"}],"description":"`target-scope` when the retest was denied for target scope; send `targetRetry` to retry against a replacement."},"targetContext":{"oneOf":[{"$ref":"#/components/schemas/RetestTargetContext"},{"type":"null"}],"description":"Null for an ordinary retest; set for a retry against a replacement target."},"queuedAt":{"type":"string","format":"date-time"},"startedAt":{"type":"string","format":"date-time"},"completedAt":{"type":"string","format":"date-time"}},"required":["id","status","stillExists","confidence","evidence","recommendation","error","failureCode","targetContext"],"title":"Retest"},"PullRequestStatus":{"type":"string","enum":["opened","merged","closed"],"title":"PullRequestStatus"},"PullRequestCreateMethod":{"type":"string","enum":["manual","automated"],"title":"PullRequestCreateMethod"},"PullRequest":{"type":"object","properties":{"id":{"type":"integer"},"url":{"type":"string"},"status":{"$ref":"#/components/schemas/PullRequestStatus"},"createMethod":{"$ref":"#/components/schemas/PullRequestCreateMethod"},"createdAt":{"type":"string","format":"date-time"}},"required":["id","url","status","createMethod","createdAt"],"title":"PullRequest"},"LinkPullRequestRequest":{"type":"object","properties":{"url":{"type":"string","description":"HTTP(S) URL of the pull request."}},"required":["url"],"title":"LinkPullRequestRequest"},"LinkPullRequestResponseIssue":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"issueLabel":{"type":["string","null"]},"name":{"type":["string","null"]},"pullRequest":{"type":"string"}},"required":["id","issueLabel","name","pullRequest"],"title":"LinkPullRequestResponseIssue"},"LinkPullRequestResponse":{"type":"object","properties":{"success":{"type":"boolean"},"created":{"type":"boolean","description":"False when the pull request was already linked."},"pullRequest":{"$ref":"#/components/schemas/PullRequest"},"issue":{"$ref":"#/components/schemas/LinkPullRequestResponseIssue"}},"required":["success","created","pullRequest","issue"],"title":"LinkPullRequestResponse"},"CommentAuthorType":{"type":"string","enum":["user"],"title":"CommentAuthorType"},"CommentAuthor":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":["string","null"]},"email":{"type":"string"},"type":{"$ref":"#/components/schemas/CommentAuthorType"}},"required":["id","name","email","type"],"description":"Null when the author's account no longer exists.","title":"CommentAuthor"},"Comment":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"issueId":{"type":"string","format":"uuid"},"body":{"type":"string","description":"Comment text as written; `@handle` mentions stay in place."},"author":{"oneOf":[{"$ref":"#/components/schemas/CommentAuthor"},{"type":"null"}],"description":"Null when the author's account no longer exists."},"createdAt":{"type":"string","format":"date-time"},"editedAt":{"type":["string","null"],"format":"date-time"},"url":{"type":"string","description":"Console link to the comment."}},"required":["id","issueId","body","author","createdAt","editedAt","url"],"title":"Comment"},"CommentListPagination":{"type":"object","properties":{"page":{"type":"integer"},"pageSize":{"type":"integer"},"totalRows":{"type":"integer"},"totalPages":{"type":"integer"}},"required":["page","pageSize","totalRows","totalPages"],"title":"CommentListPagination"},"CommentList":{"type":"object","properties":{"comments":{"type":"array","items":{"$ref":"#/components/schemas/Comment"}},"pagination":{"$ref":"#/components/schemas/CommentListPagination"}},"required":["comments","pagination"],"title":"CommentList"},"CreateCommentRequest":{"type":"object","properties":{"body":{"type":"string"}},"required":["body"],"title":"CreateCommentRequest"},"FixSummary":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"filePath":{"type":"string"}},"required":["id","filePath"],"title":"FixSummary"},"Fix":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"filePath":{"type":"string"},"diff":{"type":"string"},"explanation":{"type":"string"},"issueId":{"type":"string","format":"uuid"}},"required":["id","filePath","diff","explanation","issueId"],"title":"Fix"},"IssuesIssueIdLogsGetParametersLevel":{"type":"string","enum":["debug","info","warn","error"],"title":"IssuesIssueIdLogsGetParametersLevel"},"IssuesIssueIdLogsGetParametersRole":{"type":"string","enum":["assistant","user","system","tool-call","tool-result"],"title":"IssuesIssueIdLogsGetParametersRole"},"LogEntry":{"type":"object","properties":{"id":{"type":"string"},"createdAt":{"type":"string","format":"date-time"},"level":{"type":"string"},"role":{"type":"string","description":"`assistant`, `user`, `system`, `tool-call`, `tool-result`, or `reasoning`."},"message":{"type":"string"},"metadata":{"type":["object","null"],"additionalProperties":{"description":"Any type"}},"service":{"type":["string","null"]},"subagent":{"type":["string","null"],"description":"Subagent session ID, when a subagent wrote it."}},"required":["id","createdAt","level","role","message","metadata","service","subagent"],"title":"LogEntry"},"IssueLogList":{"type":"object","properties":{"issueId":{"type":"string","format":"uuid"},"totalLogs":{"type":"integer","description":"Entries matching the filters."},"returnedLogs":{"type":"integer"},"logs":{"type":"array","items":{"$ref":"#/components/schemas/LogEntry"}}},"required":["issueId","totalLogs","returnedLogs","logs"],"title":"IssueLogList"},"LogLevel":{"type":"string","enum":["debug","info","warn","error"],"title":"LogLevel"},"LogRole":{"type":"string","enum":["assistant","user","system","tool-call","tool-result"],"title":"LogRole"},"LogSearchRequest":{"type":"object","properties":{"query":{"type":"string","description":"Case-insensitive text to find."},"level":{"$ref":"#/components/schemas/LogLevel"},"role":{"$ref":"#/components/schemas/LogRole"},"contextLines":{"type":"integer","minimum":0,"maximum":20,"description":"Entries to include on each side of a match. Defaults to 3."}},"required":["query"],"title":"LogSearchRequest"},"IssueLogSearchResultMatchesItemsEntriesItems":{"type":"object","properties":{"id":{"type":"string"},"createdAt":{"type":"string","format":"date-time"},"level":{"type":"string"},"role":{"type":"string","description":"`assistant`, `user`, `system`, `tool-call`, `tool-result`, or `reasoning`."},"message":{"type":"string"},"metadata":{"type":["object","null"],"additionalProperties":{"description":"Any type"}},"service":{"type":["string","null"]},"subagent":{"type":["string","null"],"description":"Subagent session ID, when a subagent wrote it."},"isMatch":{"type":"boolean"}},"required":["id","createdAt","level","role","message","metadata","service","subagent","isMatch"],"title":"IssueLogSearchResultMatchesItemsEntriesItems"},"IssueLogSearchResultMatchesItems":{"type":"object","properties":{"matchIndex":{"type":"integer"},"entries":{"type":"array","items":{"$ref":"#/components/schemas/IssueLogSearchResultMatchesItemsEntriesItems"}}},"required":["matchIndex","entries"],"title":"IssueLogSearchResultMatchesItems"},"IssueLogSearchResult":{"type":"object","properties":{"issueId":{"type":"string","format":"uuid"},"query":{"type":"string"},"totalMatches":{"type":"integer"},"totalLogs":{"type":"integer"},"contextLines":{"type":"integer"},"matches":{"type":"array","items":{"$ref":"#/components/schemas/IssueLogSearchResultMatchesItems"}}},"required":["issueId","query","totalMatches","totalLogs","contextLines","matches"],"title":"IssueLogSearchResult"},"TargetsTargetIdLogsGetParametersLevel":{"type":"string","enum":["debug","info","warn","error"],"title":"TargetsTargetIdLogsGetParametersLevel"},"TargetsTargetIdLogsGetParametersRole":{"type":"string","enum":["assistant","user","system","tool-call","tool-result"],"title":"TargetsTargetIdLogsGetParametersRole"},"TargetLogList":{"type":"object","properties":{"targetId":{"type":"string","format":"uuid"},"totalLogs":{"type":"integer","description":"Entries matching the filters."},"returnedLogs":{"type":"integer"},"logs":{"type":"array","items":{"$ref":"#/components/schemas/LogEntry"}}},"required":["targetId","totalLogs","returnedLogs","logs"],"title":"TargetLogList"},"TargetLogSearchResultMatchesItemsEntriesItems":{"type":"object","properties":{"id":{"type":"string"},"createdAt":{"type":"string","format":"date-time"},"level":{"type":"string"},"role":{"type":"string","description":"`assistant`, `user`, `system`, `tool-call`, `tool-result`, or `reasoning`."},"message":{"type":"string"},"metadata":{"type":["object","null"],"additionalProperties":{"description":"Any type"}},"service":{"type":["string","null"]},"subagent":{"type":["string","null"],"description":"Subagent session ID, when a subagent wrote it."},"isMatch":{"type":"boolean"}},"required":["id","createdAt","level","role","message","metadata","service","subagent","isMatch"],"title":"TargetLogSearchResultMatchesItemsEntriesItems"},"TargetLogSearchResultMatchesItems":{"type":"object","properties":{"matchIndex":{"type":"integer"},"entries":{"type":"array","items":{"$ref":"#/components/schemas/TargetLogSearchResultMatchesItemsEntriesItems"}}},"required":["matchIndex","entries"],"title":"TargetLogSearchResultMatchesItems"},"TargetLogSearchResult":{"type":"object","properties":{"targetId":{"type":"string","format":"uuid"},"query":{"type":"string"},"totalMatches":{"type":"integer"},"totalLogs":{"type":"integer"},"contextLines":{"type":"integer"},"matches":{"type":"array","items":{"$ref":"#/components/schemas/TargetLogSearchResultMatchesItems"}}},"required":["targetId","query","totalMatches","totalLogs","contextLines","matches"],"title":"TargetLogSearchResult"},"DomainVerificationMethod":{"type":"string","enum":["dns","http","admin","flag_off","tailnet","inherited"],"title":"DomainVerificationMethod"},"Domain":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"url":{"type":"string"},"verified":{"type":"boolean"},"verificationMethod":{"oneOf":[{"$ref":"#/components/schemas/DomainVerificationMethod"},{"type":"null"}]},"verifiedViaDomainId":{"type":["string","null"],"format":"uuid"}},"required":["id","url","verified","verificationMethod","verifiedViaDomainId"],"title":"Domain"},"DomainList":{"type":"object","properties":{"domains":{"type":"array","items":{"$ref":"#/components/schemas/Domain"}}},"required":["domains"],"title":"DomainList"},"CreateDomainRequest":{"type":"object","properties":{"url":{"type":"string","description":"Domain or URL to add. It is stored in canonical form."}},"required":["url"],"title":"CreateDomainRequest"},"ApplicationType":{"type":"string","enum":["ui","api-service","web-application","full-stack","domain","subdomain","database","cloud-resource","storage","mobile-app"],"title":"ApplicationType"},"AppSummary":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"type":{"oneOf":[{"$ref":"#/components/schemas/ApplicationType"},{"type":"null"}]},"framework":{"type":["string","null"]},"workspaceId":{"type":"string","format":"uuid"},"domainId":{"type":["string","null"],"format":"uuid"},"domainUrl":{"type":["string","null"]},"createdAt":{"type":"string","format":"date-time"}},"required":["id","name","type","framework","workspaceId","domainId","domainUrl","createdAt"],"title":"AppSummary"},"AppList":{"type":"object","properties":{"apps":{"type":"array","items":{"$ref":"#/components/schemas/AppSummary"}},"hasMore":{"type":"boolean"},"limit":{"type":"integer"},"offset":{"type":"integer"}},"required":["apps","hasMore","limit","offset"],"title":"AppList"},"WritableApplicationType":{"type":"string","enum":["ui","api-service","web-application","full-stack","domain","subdomain","database","cloud-resource","storage"],"title":"WritableApplicationType"},"CreateAppRequest":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"},"type":{"$ref":"#/components/schemas/WritableApplicationType"},"framework":{"type":"string"},"domainId":{"type":["string","null"],"format":"uuid"},"disallowedActions":{"type":"string","description":"Actions the testing agent must not perform."}},"required":["name","description"],"title":"CreateAppRequest"},"App":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"type":{"oneOf":[{"$ref":"#/components/schemas/ApplicationType"},{"type":"null"}]},"framework":{"type":["string","null"]},"workspaceId":{"type":"string","format":"uuid"},"domainId":{"type":["string","null"],"format":"uuid"},"domainUrl":{"type":["string","null"]},"createdAt":{"type":"string","format":"date-time"},"description":{"type":"string"},"disallowedActions":{"type":["string","null"]}},"required":["id","name","type","framework","workspaceId","domainId","domainUrl","createdAt","description","disallowedActions"],"title":"App"},"DeleteAppResponse":{"type":"object","properties":{"success":{"type":"boolean"},"appId":{"type":"string","format":"uuid"}},"required":["success","appId"],"title":"DeleteAppResponse"},"UpdateAppRequest":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"},"type":{"oneOf":[{"$ref":"#/components/schemas/WritableApplicationType"},{"type":"null"}]},"framework":{"type":["string","null"]},"domainId":{"type":["string","null"],"format":"uuid"},"disallowedActions":{"type":["string","null"]}},"title":"UpdateAppRequest"},"SearchAppsGetParametersType":{"type":"string","enum":["ui","api-service","web-application","full-stack","domain","subdomain","database","cloud-resource","storage"],"title":"SearchAppsGetParametersType"},"AppSearchResult":{"type":"object","properties":{"apps":{"type":"array","items":{"$ref":"#/components/schemas/AppSummary"}},"hasMore":{"type":"boolean"},"limit":{"type":"integer"},"offset":{"type":"integer"},"query":{"type":"string"}},"required":["apps","hasMore","limit","offset","query"],"title":"AppSearchResult"},"AppsAppIdEndpointsGetParametersType":{"type":"string","enum":["api-endpoint","web-endpoint","auth-endpoint","database","file-storage","asset"],"title":"AppsAppIdEndpointsGetParametersType"},"EndpointTransport":{"type":"string","enum":["http","grpc","grpc_web","connect"],"title":"EndpointTransport"},"EndpointType":{"type":"string","enum":["api-endpoint","web-endpoint","auth-endpoint","database","file-storage","asset"],"title":"EndpointType"},"EndpointSummary":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"endpoint":{"type":"string"},"transport":{"$ref":"#/components/schemas/EndpointTransport"},"type":{"oneOf":[{"$ref":"#/components/schemas/EndpointType"},{"type":"null"}]},"applicationId":{"type":"string","format":"uuid"},"location":{"type":["string","null"]},"authRequired":{"type":["boolean","null"]},"createdAt":{"type":"string","format":"date-time"}},"required":["id","endpoint","transport","type","applicationId","location","authRequired","createdAt"],"title":"EndpointSummary"},"EndpointList":{"type":"object","properties":{"endpoints":{"type":"array","items":{"$ref":"#/components/schemas/EndpointSummary"}},"hasMore":{"type":"boolean"},"limit":{"type":"integer"},"offset":{"type":"integer"}},"required":["endpoints","hasMore","limit","offset"],"title":"EndpointList"},"CreateEndpointRequestAuthenticationRequired":{"type":"object","properties":{"required":{"type":"boolean"},"details":{"type":["string","null"]}},"required":["required"],"title":"CreateEndpointRequestAuthenticationRequired"},"CreateEndpointRequest":{"type":"object","properties":{"endpoint":{"type":"string"},"description":{"type":"string"},"type":{"$ref":"#/components/schemas/EndpointType"},"transport":{"$ref":"#/components/schemas/EndpointTransport"},"location":{"type":"string","description":"Source file that handles the endpoint."},"startLineNumber":{"type":"integer"},"endLineNumber":{"type":"integer"},"objectives":{"type":"array","items":{"type":"string"}},"authenticationRequired":{"$ref":"#/components/schemas/CreateEndpointRequestAuthenticationRequired"},"businessLogic":{"type":"string"},"threatModel":{"type":"string"}},"required":["endpoint","description"],"title":"CreateEndpointRequest"},"EndpointAuthenticationRequired":{"type":"object","properties":{"required":{"type":"boolean"},"details":{"type":["string","null"]}},"required":["required","details"],"title":"EndpointAuthenticationRequired"},"Endpoint":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"endpoint":{"type":"string"},"transport":{"$ref":"#/components/schemas/EndpointTransport"},"type":{"oneOf":[{"$ref":"#/components/schemas/EndpointType"},{"type":"null"}]},"applicationId":{"type":"string","format":"uuid"},"location":{"type":["string","null"]},"authRequired":{"type":["boolean","null"]},"createdAt":{"type":"string","format":"date-time"},"description":{"type":"string"},"objectives":{"type":"array","items":{"type":"string"}},"startLineNumber":{"type":["integer","null"]},"endLineNumber":{"type":["integer","null"]},"authenticationRequired":{"oneOf":[{"$ref":"#/components/schemas/EndpointAuthenticationRequired"},{"type":"null"}]},"businessLogic":{"type":["string","null"]},"threatModel":{"type":["string","null"]}},"required":["id","endpoint","transport","type","applicationId","location","authRequired","createdAt","description","objectives","startLineNumber","endLineNumber","authenticationRequired","businessLogic","threatModel"],"title":"Endpoint"},"DeleteEndpointResponse":{"type":"object","properties":{"success":{"type":"boolean"},"endpointId":{"type":"string","format":"uuid"}},"required":["success","endpointId"],"title":"DeleteEndpointResponse"},"UpdateEndpointRequestAuthenticationRequired":{"type":"object","properties":{"required":{"type":"boolean"},"details":{"type":["string","null"]}},"required":["required"],"title":"UpdateEndpointRequestAuthenticationRequired"},"UpdateEndpointRequest":{"type":"object","properties":{"applicationId":{"type":"string","format":"uuid","description":"Move the endpoint to another application in this workspace."},"endpoint":{"type":"string"},"description":{"type":"string"},"type":{"oneOf":[{"$ref":"#/components/schemas/EndpointType"},{"type":"null"}]},"transport":{"$ref":"#/components/schemas/EndpointTransport"},"location":{"type":["string","null"]},"startLineNumber":{"type":["integer","null"]},"endLineNumber":{"type":["integer","null"]},"objectives":{"type":"array","items":{"type":"string"}},"authenticationRequired":{"oneOf":[{"$ref":"#/components/schemas/UpdateEndpointRequestAuthenticationRequired"},{"type":"null"}]},"businessLogic":{"type":["string","null"]},"threatModel":{"type":["string","null"]}},"title":"UpdateEndpointRequest"},"SearchEndpointsGetParametersType":{"type":"string","enum":["api-endpoint","web-endpoint","auth-endpoint","database","file-storage","asset"],"title":"SearchEndpointsGetParametersType"},"EndpointSearchResult":{"type":"object","properties":{"endpoints":{"type":"array","items":{"$ref":"#/components/schemas/EndpointSummary"}},"hasMore":{"type":"boolean"},"limit":{"type":"integer"},"offset":{"type":"integer"},"query":{"type":"string"}},"required":["endpoints","hasMore","limit","offset","query"],"title":"EndpointSearchResult"},"KnowledgeGetParametersCategory":{"type":"string","enum":["false_positive_pattern","technology_context","testing_history","user_note","agent_learning"],"title":"KnowledgeGetParametersCategory"},"KnowledgeGetParametersStatus":{"type":"string","enum":["active","stale","archived"],"title":"KnowledgeGetParametersStatus"},"KnowledgeCategory":{"type":"string","enum":["false_positive_pattern","technology_context","testing_history","user_note","agent_learning"],"title":"KnowledgeCategory"},"KnowledgeStatus":{"type":"string","enum":["active","stale","archived"],"title":"KnowledgeStatus"},"KnowledgePriority":{"type":"string","enum":["always","on_request"],"description":"When agents get the entry; see [Priority](/console/features/knowledge-base#priority).","title":"KnowledgePriority"},"KnowledgeSource":{"type":"string","enum":["user","system","agent"],"title":"KnowledgeSource"},"KnowledgeEntry":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"title":{"type":"string"},"content":{"type":"string"},"category":{"$ref":"#/components/schemas/KnowledgeCategory"},"status":{"$ref":"#/components/schemas/KnowledgeStatus","description":"Only active entries are given to agents."},"priority":{"$ref":"#/components/schemas/KnowledgePriority"},"source":{"$ref":"#/components/schemas/KnowledgeSource"},"tags":{"type":"array","items":{"type":"string"}},"confidence":{"type":["string","null"]},"createdBy":{"type":["string","null"],"format":"uuid"},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}},"required":["id","title","content","category","status","priority","source","tags","confidence","createdBy","createdAt","updatedAt"],"title":"KnowledgeEntry"},"CreateKnowledgeRequest":{"type":"object","properties":{"title":{"type":"string"},"content":{"type":"string"},"category":{"$ref":"#/components/schemas/KnowledgeCategory"},"priority":{"$ref":"#/components/schemas/KnowledgePriority","description":"Defaults to `on_request`."},"tags":{"type":"array","items":{"type":"string"}}},"required":["title","content","category"],"title":"CreateKnowledgeRequest"},"UpdateKnowledgeRequest":{"type":"object","properties":{"title":{"type":"string"},"content":{"type":"string"},"category":{"$ref":"#/components/schemas/KnowledgeCategory"},"status":{"$ref":"#/components/schemas/KnowledgeStatus"},"priority":{"$ref":"#/components/schemas/KnowledgePriority"},"tags":{"type":"array","items":{"type":"string"},"description":"Replaces the existing tags."}},"title":"UpdateKnowledgeRequest"},"WebhookEvent":{"type":"string","enum":["issue.created","issue.updated","issue.status_changed","retest.completed","pentest.completed"],"title":"WebhookEvent"},"WebhookEndpointHealthLastStatus":{"type":"string","enum":["success","failed"],"title":"WebhookEndpointHealthLastStatus"},"WebhookEndpointHealth":{"type":"object","properties":{"lastAttemptAt":{"type":["string","null"],"format":"date-time"},"lastStatus":{"oneOf":[{"$ref":"#/components/schemas/WebhookEndpointHealthLastStatus"},{"type":"null"}]},"lastResponseCode":{"type":["integer","null"]},"consecutiveFailures":{"type":"integer","description":"Reset on success. At 20 the endpoint is disabled."}},"required":["lastAttemptAt","lastStatus","lastResponseCode","consecutiveFailures"],"description":"Updated on every delivery attempt.","title":"WebhookEndpointHealth"},"WebhookEndpoint":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"url":{"type":"string"},"events":{"type":"array","items":{"$ref":"#/components/schemas/WebhookEvent"}},"enabled":{"type":"boolean"},"description":{"type":["string","null"]},"health":{"$ref":"#/components/schemas/WebhookEndpointHealth","description":"Updated on every delivery attempt."},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}},"required":["id","url","events","enabled","description","health","createdAt","updatedAt"],"title":"WebhookEndpoint"},"WebhookEndpointList":{"type":"object","properties":{"endpoints":{"type":"array","items":{"$ref":"#/components/schemas/WebhookEndpoint"}}},"required":["endpoints"],"title":"WebhookEndpointList"},"CreateWebhookEndpointRequest":{"type":"object","properties":{"url":{"type":"string","description":"HTTPS URL with a hostname that resolves only to public addresses. Unique within the workspace."},"events":{"type":"array","items":{"$ref":"#/components/schemas/WebhookEvent"}},"description":{"type":["string","null"]},"enabled":{"type":"boolean","description":"Defaults to `true`."}},"required":["url","events"],"title":"CreateWebhookEndpointRequest"},"CreateWebhookEndpointResponse":{"type":"object","properties":{"endpoint":{"$ref":"#/components/schemas/WebhookEndpoint"},"secret":{"type":"string","description":"Signing secret. Returned only here; it cannot be read back later."}},"required":["endpoint","secret"],"title":"CreateWebhookEndpointResponse"},"WebhookDeliveryStatus":{"type":"string","enum":["pending","success","failed"],"title":"WebhookDeliveryStatus"},"WebhookDelivery":{"type":"object","properties":{"id":{"type":"string","format":"uuid","description":"Sent as the `X-Pensar-Delivery` header."},"event":{"$ref":"#/components/schemas/WebhookEvent"},"status":{"$ref":"#/components/schemas/WebhookDeliveryStatus"},"attempt":{"type":"integer"},"responseCode":{"type":["integer","null"]},"responseBody":{"type":["string","null"],"description":"Truncated to 2 KB."},"error":{"type":["string","null"]},"durationMs":{"type":["integer","null"]},"createdAt":{"type":"string","format":"date-time"},"deliveredAt":{"type":["string","null"],"format":"date-time"}},"required":["id","event","status","attempt","responseCode","responseBody","error","durationMs","createdAt","deliveredAt"],"title":"WebhookDelivery"},"WebhookEndpointDetail":{"type":"object","properties":{"endpoint":{"$ref":"#/components/schemas/WebhookEndpoint"},"recentDeliveries":{"type":"array","items":{"$ref":"#/components/schemas/WebhookDelivery"},"description":"The 20 most recent attempts."}},"required":["endpoint","recentDeliveries"],"title":"WebhookEndpointDetail"},"DeleteWebhookEndpointResponse":{"type":"object","properties":{"deleted":{"type":"boolean"},"id":{"type":"string","format":"uuid"}},"required":["deleted","id"],"title":"DeleteWebhookEndpointResponse"},"UpdateWebhookEndpointRequest":{"type":"object","properties":{"url":{"type":"string"},"events":{"type":"array","items":{"$ref":"#/components/schemas/WebhookEvent"}},"enabled":{"type":"boolean","description":"Setting `true` resets `consecutiveFailures` to zero."},"description":{"type":["string","null"],"description":"`null` clears it."}},"title":"UpdateWebhookEndpointRequest"},"WebhookEndpointResponse":{"type":"object","properties":{"endpoint":{"$ref":"#/components/schemas/WebhookEndpoint"}},"required":["endpoint"],"title":"WebhookEndpointResponse"},"TestWebhookEndpointResponseEvent":{"type":"string","enum":["issue.created"],"title":"TestWebhookEndpointResponseEvent"},"TestWebhookEndpointResponse":{"type":"object","properties":{"deliveryId":{"type":"string","format":"uuid"},"endpointId":{"type":"string","format":"uuid"},"event":{"$ref":"#/components/schemas/TestWebhookEndpointResponseEvent"},"sample":{"type":"boolean","description":"True when the workspace had no findings and a synthetic one was sent."},"issueId":{"type":["string","null"],"format":"uuid"}},"required":["deliveryId","endpointId","event","sample","issueId"],"title":"TestWebhookEndpointResponse"},"WebhookDeliveryWithPayloadStatus":{"type":"string","enum":["pending","success","failed"],"title":"WebhookDeliveryWithPayloadStatus"},"WebhookDeliveryWithPayload":{"type":"object","properties":{"id":{"type":"string","format":"uuid","description":"Sent as the `X-Pensar-Delivery` header."},"event":{"$ref":"#/components/schemas/WebhookEvent"},"status":{"$ref":"#/components/schemas/WebhookDeliveryWithPayloadStatus"},"attempt":{"type":"integer"},"responseCode":{"type":["integer","null"]},"responseBody":{"type":["string","null"],"description":"Truncated to 2 KB."},"error":{"type":["string","null"]},"durationMs":{"type":["integer","null"]},"createdAt":{"type":"string","format":"date-time"},"deliveredAt":{"type":["string","null"],"format":"date-time"},"payload":{"type":"object","additionalProperties":{"description":"Any type"},"description":"The rendered body sent. Only with `includePayload=true`."}},"required":["id","event","status","attempt","responseCode","responseBody","error","durationMs","createdAt","deliveredAt"],"title":"WebhookDeliveryWithPayload"},"WebhookDeliveryList":{"type":"object","properties":{"deliveries":{"type":"array","items":{"$ref":"#/components/schemas/WebhookDeliveryWithPayload"}},"limit":{"type":"integer"}},"required":["deliveries","limit"],"title":"WebhookDeliveryList"},"ValidateApiKeyResponseWorkspace":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"slug":{"type":"string"}},"required":["id","name","slug"],"title":"ValidateApiKeyResponseWorkspace"},"ValidateApiKeyResponse":{"type":"object","properties":{"workspace":{"$ref":"#/components/schemas/ValidateApiKeyResponseWorkspace"}},"required":["workspace"],"title":"ValidateApiKeyResponse"}},"securitySchemes":{"BearerAuth":{"type":"http","scheme":"bearer","description":"A workspace API key, sent as `Authorization: Bearer`."},"ApiKeyAuth":{"type":"apiKey","in":"header","name":"x-api-key","description":"A workspace API key, sent as `x-api-key`."}}}}