For the complete documentation index, see llms.txt. This page is also available as Markdown.

Secrets & Data API

Query secrets, credential, and sensitive-data findings via the Nullify API

For PR and default-branch scanning, see scan coverage, start operations and completion checks.

Secret and sensitive-data findings are available under separate namespaces:

  • /secrets/credentials/* — detected secrets and credentials. /secrets/findings/* is a deprecated legacy alias for this namespace and returns the same data.

  • /secrets/sensitivedata/* — sensitive data / PII.

Every namespace supports GET .../findings, GET and PATCH .../findings/{findingId}, GET .../findings/{findingId}/triage, GET .../findings/{findingId}/users, POST .../findings/{findingId}/allowlist, POST .../findings/{findingId}/unallowlist, POST and DELETE .../findings/{findingId}/ticket, and the bulk POST .../findings/allowlist/batch. Finding-event history is available for credentials and the legacy alias, not sensitive-data findings. Each operation below is embedded once per path.

Base URL

https://api.<TENANT>.nullify.ai

Conventions

  • Provider scope. Every call identifies the connected provider account with one scope query parameter: githubOwnerId for GitHub, or azureOrganizationId, bitbucketWorkspaceId, gitlabGroupId or installationId for the other providers. The examples use githubOwnerId=1234.

  • Repository scope. To narrow a list to specific repositories, add githubRepositoryId (repeatable) or githubTeamId to the scope parameters. The detailed lists take a single repositoryId instead.

  • Pagination. Finding lists accept limit and nextToken (see Pagination). limit defaults to 100 and a value above 100 returns 400. sort is asc or desc (default desc) and sortBy is priority (default) or time.

  • Permissions. Reads need finding read access (lists need finding list access). Updates, allowlisting and tickets need finding write access.

  • Finding IDs. Take findingId from the matching list call. An ID that does not exist in your tenant returns 404.

  • Secret values. Events and finding-event history carry a masked value, never the raw secret.

Events

List events

Stream events for new secrets, allowlisting and unallowlisting. Pass fromTime as a UTC timestamp such as 2025-01-31T00:00:00Z, and filter with eventType, findingId and fileOwnerName. A page holds at most 100 events: limit defaults to 100, and a numItems above 100 returns 400. Follow nextToken to read on. The branch parameter in the specification is not applied by the handler. When you filter by fileOwnerName and file-owner lookup is unavailable, the call fails instead of returning unfiltered events.

Get Secret Events

get

Returns events after a specified timestamp or event ID. All events are returned if no timestamp or event ID is provided

Query parameters
nextTokenstring · nullableOptional
limitinteger · nullableOptional
branchstring · nullableOptional
fromTimestring · nullableOptional
numItemsinteger · nullableOptional
eventTypestring[]Optional
fileOwnerNamestring[]Optional
findingIdstring · nullableOptional
sortstring · nullableOptional
azureOrganizationIdstringOptional

The Azure organization ID

bitbucketWorkspaceIdstringOptional

The Bitbucket workspace ID

githubOwnerIdinteger · int64Optional

The Github owner ID

gitlabGroupIdinteger · int64Optional

The GitLab group ID

installationIdstringOptional

The Nullify installation ID

azureRepositoryIdstring[]Optional

Filter by Azure repository IDs

githubRepositoryIdinteger · int64[]Optional

Filter by GitHub repository IDs

githubTeamIdinteger · int64Optional

Filter by GitHub team ID

bitbucketRepositoryIdstring[]Optional

Filter by Bitbucket repository IDs

Responses
200

OK

application/json
nextTokenstringRequired
numItemsintegerRequired
versionstringOptional
get/secrets/events
GET /secrets/events HTTP/1.1
Host: api.<TENANT>.nullify.ai
Accept: */*
{
  "events": [
    {
      "data": null,
      "id": "text",
      "time": "text",
      "timestampUnix": 1,
      "type": "org_context_agent_started"
    }
  ],
  "nextToken": "text",
  "numItems": 1,
  "version": "text"
}

Findings

List findings

Enumerate findings, one per unique secret hash per repository, filtered by branch, secretType (the detector rule), isResolved, isAllowlisted, isFalsePositive and fileOwnerName. The list returns previews, and duplicate and deleted credential findings are excluded. fileOwnerName is applied after a page is fetched, so a filtered page can be shorter than limit. The sensitive-data list applies branch, isResolved, isAllowlisted and isFalsePositive; it accepts secretType and fileOwnerName in the specification but does not apply them.

Credentials:

Get Secrets Credential Findings

get

Returns a filtered set of Secrets credential findings based on query parameters. One unique secret hash per repository.

Query parameters
nextTokenstring · nullableOptional
limitinteger · nullableOptional
branchstring · nullableOptional
secretTypestring · nullableOptional
fileOwnerNamestring[]Optional
isResolvedboolean · nullableOptional
isAllowlistedboolean · nullableOptional
isFalsePositiveboolean · nullableOptional
sortBystring · nullableOptional
sortstring · nullableOptional
azureOrganizationIdstringOptional

The Azure organization ID

bitbucketWorkspaceIdstringOptional

The Bitbucket workspace ID

githubOwnerIdinteger · int64Optional

The Github owner ID

gitlabGroupIdinteger · int64Optional

The GitLab group ID

installationIdstringOptional

The Nullify installation ID

azureRepositoryIdstring[]Optional

Filter by Azure repository IDs

githubRepositoryIdinteger · int64[]Optional

Filter by GitHub repository IDs

githubTeamIdinteger · int64Optional

Filter by GitHub team ID

bitbucketRepositoryIdstring[]Optional

Filter by Bitbucket repository IDs

Responses
200

OK

application/json
nextTokenstringRequired
numItemsintegerRequired
versionstringOptional
get/secrets/credentials/findings
GET /secrets/credentials/findings HTTP/1.1
Host: api.<TENANT>.nullify.ai
Accept: */*
{
  "findings": [
    {
      "aiDevTitle": "text",
      "aiTitle": "text",
      "allowlistReason": "text",
      "allowlistType": "AI",
      "author": "text",
      "branch": "text",
      "commit": "text",
      "createdAt": "text",
      "endLine": 1,
      "entropy": 1,
      "fileOwners": [
        {
          "name": "text",
          "type": "email"
        }
      ],
      "filePath": "text",
      "id": "text",
      "installationId": "text",
      "isAllowlisted": true,
      "isArchived": true,
      "isDefaultBranch": true,
      "isFalsePositive": true,
      "match": "text",
      "owner": "text",
      "ownerType": "text",
      "priorityLabel": "URGENT",
      "priorityOverride": "URGENT",
      "priorityScore": 1,
      "projectId": "text",
      "projectName": "text",
      "redactedSecret": "text",
      "repository": "text",
      "repositoryId": "text",
      "repositoryName": "text",
      "ruleId": "text",
      "scopes": [
        "text"
      ],
      "secretHash": "text",
      "secretType": "text",
      "startLine": 1,
      "tenantId": "text",
      "ticket": {
        "asana": {
          "projectGid": "text",
          "taskGid": "text",
          "url": "text"
        },
        "azure": {
          "url": "text",
          "workItemId": 1
        },
        "github": {
          "issueId": 1,
          "nodeId": "text",
          "number": 1,
          "repositoryName": "text",
          "url": "text"
        },
        "gitlab": {},
        "jira": {
          "issueId": "text",
          "issueKey": "text",
          "url": "text"
        },
        "linear": {
          "issueId": "text",
          "teamId": "text",
          "url": "text"
        },
        "providerId": "DX"
      },
      "timeStamp": "text",
      "timestampUnix": 1,
      "triageEnd": "2026-01-01T00:00:00.000Z",
      "triageStart": "2026-01-01T00:00:00.000Z",
      "updatedAt": "text"
    }
  ],
  "nextToken": "text",
  "numItems": 1,
  "version": "text"
}

Legacy alias (deprecated):

Get Secrets Credential Findings

get

Returns a filtered set of Secrets credential findings based on query parameters. One unique secret hash per repository.

Query parameters
nextTokenstring · nullableOptional
limitinteger · nullableOptional
branchstring · nullableOptional
secretTypestring · nullableOptional
fileOwnerNamestring[]Optional
isResolvedboolean · nullableOptional
isAllowlistedboolean · nullableOptional
isFalsePositiveboolean · nullableOptional
sortBystring · nullableOptional
sortstring · nullableOptional
azureOrganizationIdstringOptional

The Azure organization ID

bitbucketWorkspaceIdstringOptional

The Bitbucket workspace ID

githubOwnerIdinteger · int64Optional

The Github owner ID

gitlabGroupIdinteger · int64Optional

The GitLab group ID

installationIdstringOptional

The Nullify installation ID

azureRepositoryIdstring[]Optional

Filter by Azure repository IDs

githubRepositoryIdinteger · int64[]Optional

Filter by GitHub repository IDs

githubTeamIdinteger · int64Optional

Filter by GitHub team ID

bitbucketRepositoryIdstring[]Optional

Filter by Bitbucket repository IDs

Responses
200

OK

application/json
nextTokenstringRequired
numItemsintegerRequired
versionstringOptional
get/secrets/findings
GET /secrets/findings HTTP/1.1
Host: api.<TENANT>.nullify.ai
Accept: */*
{
  "findings": [
    {
      "aiDevTitle": "text",
      "aiTitle": "text",
      "allowlistReason": "text",
      "allowlistType": "AI",
      "author": "text",
      "branch": "text",
      "commit": "text",
      "createdAt": "text",
      "endLine": 1,
      "entropy": 1,
      "fileOwners": [
        {
          "name": "text",
          "type": "email"
        }
      ],
      "filePath": "text",
      "id": "text",
      "installationId": "text",
      "isAllowlisted": true,
      "isArchived": true,
      "isDefaultBranch": true,
      "isFalsePositive": true,
      "match": "text",
      "owner": "text",
      "ownerType": "text",
      "priorityLabel": "URGENT",
      "priorityOverride": "URGENT",
      "priorityScore": 1,
      "projectId": "text",
      "projectName": "text",
      "redactedSecret": "text",
      "repository": "text",
      "repositoryId": "text",
      "repositoryName": "text",
      "ruleId": "text",
      "scopes": [
        "text"
      ],
      "secretHash": "text",
      "secretType": "text",
      "startLine": 1,
      "tenantId": "text",
      "ticket": {
        "asana": {
          "projectGid": "text",
          "taskGid": "text",
          "url": "text"
        },
        "azure": {
          "url": "text",
          "workItemId": 1
        },
        "github": {
          "issueId": 1,
          "nodeId": "text",
          "number": 1,
          "repositoryName": "text",
          "url": "text"
        },
        "gitlab": {},
        "jira": {
          "issueId": "text",
          "issueKey": "text",
          "url": "text"
        },
        "linear": {
          "issueId": "text",
          "teamId": "text",
          "url": "text"
        },
        "providerId": "DX"
      },
      "timeStamp": "text",
      "timestampUnix": 1,
      "triageEnd": "2026-01-01T00:00:00.000Z",
      "triageStart": "2026-01-01T00:00:00.000Z",
      "updatedAt": "text"
    }
  ],
  "nextToken": "text",
  "numItems": 1,
  "version": "text"
}

Deprecated alias that returns the same list:

Get Secrets Credential Findings

get

Returns a filtered set of Secrets credential findings based on query parameters. One unique secret hash per repository.

Query parameters
nextTokenstring · nullableOptional
limitinteger · nullableOptional
branchstring · nullableOptional
secretTypestring · nullableOptional
fileOwnerNamestring[]Optional
isResolvedboolean · nullableOptional
isAllowlistedboolean · nullableOptional
isFalsePositiveboolean · nullableOptional
sortBystring · nullableOptional
sortstring · nullableOptional
azureOrganizationIdstringOptional

The Azure organization ID

bitbucketWorkspaceIdstringOptional

The Bitbucket workspace ID

githubOwnerIdinteger · int64Optional

The Github owner ID

gitlabGroupIdinteger · int64Optional

The GitLab group ID

installationIdstringOptional

The Nullify installation ID

azureRepositoryIdstring[]Optional

Filter by Azure repository IDs

githubRepositoryIdinteger · int64[]Optional

Filter by GitHub repository IDs

githubTeamIdinteger · int64Optional

Filter by GitHub team ID

bitbucketRepositoryIdstring[]Optional

Filter by Bitbucket repository IDs

Responses
200

OK

application/json
nextTokenstringRequired
numItemsintegerRequired
versionstringOptional
get/secrets/findings/preview
GET /secrets/findings/preview HTTP/1.1
Host: api.<TENANT>.nullify.ai
Accept: */*
{
  "findings": [
    {
      "aiDevTitle": "text",
      "aiTitle": "text",
      "allowlistReason": "text",
      "allowlistType": "AI",
      "author": "text",
      "branch": "text",
      "commit": "text",
      "createdAt": "text",
      "endLine": 1,
      "entropy": 1,
      "fileOwners": [
        {
          "name": "text",
          "type": "email"
        }
      ],
      "filePath": "text",
      "id": "text",
      "installationId": "text",
      "isAllowlisted": true,
      "isArchived": true,
      "isDefaultBranch": true,
      "isFalsePositive": true,
      "match": "text",
      "owner": "text",
      "ownerType": "text",
      "priorityLabel": "URGENT",
      "priorityOverride": "URGENT",
      "priorityScore": 1,
      "projectId": "text",
      "projectName": "text",
      "redactedSecret": "text",
      "repository": "text",
      "repositoryId": "text",
      "repositoryName": "text",
      "ruleId": "text",
      "scopes": [
        "text"
      ],
      "secretHash": "text",
      "secretType": "text",
      "startLine": 1,
      "tenantId": "text",
      "ticket": {
        "asana": {
          "projectGid": "text",
          "taskGid": "text",
          "url": "text"
        },
        "azure": {
          "url": "text",
          "workItemId": 1
        },
        "github": {
          "issueId": 1,
          "nodeId": "text",
          "number": 1,
          "repositoryName": "text",
          "url": "text"
        },
        "gitlab": {},
        "jira": {
          "issueId": "text",
          "issueKey": "text",
          "url": "text"
        },
        "linear": {
          "issueId": "text",
          "teamId": "text",
          "url": "text"
        },
        "providerId": "DX"
      },
      "timeStamp": "text",
      "timestampUnix": 1,
      "triageEnd": "2026-01-01T00:00:00.000Z",
      "triageStart": "2026-01-01T00:00:00.000Z",
      "updatedAt": "text"
    }
  ],
  "nextToken": "text",
  "numItems": 1,
  "version": "text"
}

Sensitive data / PII:

Get Sensitive Data Findings

get

Returns a filtered set of sensitive data findings based on query parameters.

Query parameters
nextTokenstring · nullableOptional
limitinteger · nullableOptional
branchstring · nullableOptional
secretTypestring · nullableOptional
fileOwnerNamestring[]Optional
isResolvedboolean · nullableOptional
isAllowlistedboolean · nullableOptional
isFalsePositiveboolean · nullableOptional
sortBystring · nullableOptional
sortstring · nullableOptional
azureOrganizationIdstringOptional

The Azure organization ID

bitbucketWorkspaceIdstringOptional

The Bitbucket workspace ID

githubOwnerIdinteger · int64Optional

The Github owner ID

gitlabGroupIdinteger · int64Optional

The GitLab group ID

installationIdstringOptional

The Nullify installation ID

azureRepositoryIdstring[]Optional

Filter by Azure repository IDs

githubRepositoryIdinteger · int64[]Optional

Filter by GitHub repository IDs

githubTeamIdinteger · int64Optional

Filter by GitHub team ID

bitbucketRepositoryIdstring[]Optional

Filter by Bitbucket repository IDs

Responses
200

OK

application/json
nextTokenstringRequired
numItemsintegerRequired
versionstringOptional
get/secrets/sensitivedata/findings
GET /secrets/sensitivedata/findings HTTP/1.1
Host: api.<TENANT>.nullify.ai
Accept: */*
{
  "findings": [
    {
      "author": "text",
      "branch": "text",
      "commit": "text",
      "createdAt": "text",
      "endLine": 1,
      "fileOwners": [
        {
          "name": "text",
          "type": "email"
        }
      ],
      "filePath": "text",
      "id": "text",
      "installationId": "text",
      "isAllowlisted": true,
      "isArchived": true,
      "isDefaultBranch": true,
      "isFalsePositive": true,
      "isResolved": true,
      "match": "text",
      "owner": "text",
      "ownerType": "text",
      "priorityLabel": "URGENT",
      "priorityOverride": "URGENT",
      "priorityScore": 1,
      "projectId": "text",
      "projectName": "text",
      "repository": "text",
      "repositoryId": "text",
      "repositoryName": "text",
      "startLine": 1,
      "tenantId": "text",
      "ticket": {
        "asana": {
          "projectGid": "text",
          "taskGid": "text",
          "url": "text"
        },
        "azure": {
          "url": "text",
          "workItemId": 1
        },
        "github": {
          "issueId": 1,
          "nodeId": "text",
          "number": 1,
          "repositoryName": "text",
          "url": "text"
        },
        "gitlab": {},
        "jira": {
          "issueId": "text",
          "issueKey": "text",
          "url": "text"
        },
        "linear": {
          "issueId": "text",
          "teamId": "text",
          "url": "text"
        },
        "providerId": "DX"
      },
      "timestampUnix": 1,
      "triageEnd": "2026-01-01T00:00:00.000Z",
      "triageStart": "2026-01-01T00:00:00.000Z",
      "updatedAt": "text"
    }
  ],
  "nextToken": "text",
  "numItems": 1,
  "version": "text"
}

List credential findings with full detail

Returns complete credential finding records instead of previews, with a repositoryId filter alongside the list filters. The /secrets/findings/detailed path is deprecated; use the credentials path.

Current path:

Get Secrets Credential Findings Detailed

get

Returns credential secrets summary. One unique secret hash per repository

Query parameters
nextTokenstring · nullableOptional
limitinteger · nullableOptional
branchstring · nullableOptional
secretTypestring · nullableOptional
fileOwnerNamestring[]Optional
isResolvedboolean · nullableOptional
isAllowlistedboolean · nullableOptional
isFalsePositiveboolean · nullableOptional
repositoryIdstring · nullableOptional

if set, only findings for this repository are returned

sortBystring · nullableOptional
sortstring · nullableOptional
azureOrganizationIdstringOptional

The Azure organization ID

bitbucketWorkspaceIdstringOptional

The Bitbucket workspace ID

githubOwnerIdinteger · int64Optional

The Github owner ID

gitlabGroupIdinteger · int64Optional

The GitLab group ID

installationIdstringOptional

The Nullify installation ID

azureRepositoryIdstring[]Optional

Filter by Azure repository IDs

githubRepositoryIdinteger · int64[]Optional

Filter by GitHub repository IDs

githubTeamIdinteger · int64Optional

Filter by GitHub team ID

bitbucketRepositoryIdstring[]Optional

Filter by Bitbucket repository IDs

Responses
200

OK

application/json
nextTokenstringRequired
numItemsintegerRequired
versionstringOptional
get/secrets/credentials/findings/detailed
GET /secrets/credentials/findings/detailed HTTP/1.1
Host: api.<TENANT>.nullify.ai
Accept: */*
{
  "findings": [
    {
      "aiDevTitle": "text",
      "aiTitle": "text",
      "allowlistReason": "text",
      "allowlistType": "AI",
      "archivedAt": "2026-01-01T00:00:00.000Z",
      "archivedTraceId": "text",
      "author": "text",
      "branch": "text",
      "commit": "text",
      "createdAt": "text",
      "deletedAt": "2026-01-01T00:00:00.000Z",
      "deletedTraceId": "text",
      "description": "text",
      "devDescription": "text",
      "endColumn": 1,
      "endLine": 1,
      "entropy": 1,
      "exploitabilityConfidence": "text",
      "exploitabilityLabel": "text",
      "failedTriage": true,
      "falsePositiveReason": "text",
      "fileOwners": [
        {
          "name": "text",
          "type": "email"
        }
      ],
      "filePath": "text",
      "id": "text",
      "impactConfidence": "text",
      "impactLabel": "CRITICAL",
      "installationId": "text",
      "isAllowlisted": true,
      "isArchived": true,
      "isDefaultBranch": true,
      "isDeleted": true,
      "isDuplicate": true,
      "isFalsePositive": true,
      "isResolved": true,
      "match": "text",
      "owner": "text",
      "ownerType": "text",
      "platform": "text",
      "priorityLabel": "URGENT",
      "priorityLabelReason": "text",
      "priorityOverride": "URGENT",
      "priorityScore": 1,
      "projectId": "text",
      "projectName": "text",
      "redactedSecret": "text",
      "repository": "text",
      "repositoryId": "text",
      "repositoryName": "text",
      "resolvedAt": "2026-01-01T00:00:00.000Z",
      "ruleId": "text",
      "scannedCommitSha": "text",
      "scanner": "text",
      "scopes": [
        "text"
      ],
      "secretHash": "text",
      "secretType": "text",
      "secretValue": "text",
      "severityConfidence": "text",
      "severityLabel": "CRITICAL",
      "severityOverride": "CRITICAL",
      "severityScore": 1,
      "startColumn": 1,
      "startLine": 1,
      "tenantId": "text",
      "ticket": {
        "asana": {
          "projectGid": "text",
          "taskGid": "text",
          "url": "text"
        },
        "azure": {
          "url": "text",
          "workItemId": 1
        },
        "github": {
          "issueId": 1,
          "nodeId": "text",
          "number": 1,
          "repositoryName": "text",
          "url": "text"
        },
        "gitlab": {},
        "jira": {
          "issueId": "text",
          "issueKey": "text",
          "url": "text"
        },
        "linear": {
          "issueId": "text",
          "teamId": "text",
          "url": "text"
        },
        "providerId": "DX"
      },
      "timeStamp": "text",
      "timestampUnix": 1,
      "triageAgentVersion": "text",
      "triageDurationSeconds": 1,
      "triageEnd": "2026-01-01T00:00:00.000Z",
      "triageLlmCostUsd": 1,
      "triageMaxInputTokens": 1,
      "triageStart": "2026-01-01T00:00:00.000Z",
      "triageStopReason": "text",
      "triageTokenCount": 1,
      "triageTraceId": "text",
      "updatedAt": "text",
      "userId": "text",
      "userNotes": "text",
      "verified": true,
      "verifiedAt": "text"
    }
  ],
  "nextToken": "text",
  "numItems": 1,
  "version": "text"
}

Deprecated path:

Get Secrets Credential Findings Detailed - [DEPRECATED - TO BE REMOVED BY 2025]

get

Returns secrets summary. One unique secret hash per repository

Query parameters
nextTokenstring · nullableOptional
limitinteger · nullableOptional
branchstring · nullableOptional
secretTypestring · nullableOptional
fileOwnerNamestring[]Optional
isResolvedboolean · nullableOptional
isAllowlistedboolean · nullableOptional
isFalsePositiveboolean · nullableOptional
repositoryIdstring · nullableOptional

if set, only findings for this repository are returned

sortBystring · nullableOptional
sortstring · nullableOptional
azureOrganizationIdstringOptional

The Azure organization ID

bitbucketWorkspaceIdstringOptional

The Bitbucket workspace ID

githubOwnerIdinteger · int64Optional

The Github owner ID

gitlabGroupIdinteger · int64Optional

The GitLab group ID

installationIdstringOptional

The Nullify installation ID

azureRepositoryIdstring[]Optional

Filter by Azure repository IDs

githubRepositoryIdinteger · int64[]Optional

Filter by GitHub repository IDs

githubTeamIdinteger · int64Optional

Filter by GitHub team ID

bitbucketRepositoryIdstring[]Optional

Filter by Bitbucket repository IDs

Responses
200

OK

application/json
nextTokenstringRequired
numItemsintegerRequired
versionstringOptional
get/secrets/findings/detailed
GET /secrets/findings/detailed HTTP/1.1
Host: api.<TENANT>.nullify.ai
Accept: */*
{
  "findings": [
    {
      "aiDevTitle": "text",
      "aiTitle": "text",
      "allowlistReason": "text",
      "allowlistType": "AI",
      "archivedAt": "2026-01-01T00:00:00.000Z",
      "archivedTraceId": "text",
      "author": "text",
      "branch": "text",
      "commit": "text",
      "createdAt": "text",
      "deletedAt": "2026-01-01T00:00:00.000Z",
      "deletedTraceId": "text",
      "description": "text",
      "devDescription": "text",
      "endColumn": 1,
      "endLine": 1,
      "entropy": 1,
      "exploitabilityConfidence": "text",
      "exploitabilityLabel": "text",
      "failedTriage": true,
      "falsePositiveReason": "text",
      "fileOwners": [
        {
          "name": "text",
          "type": "email"
        }
      ],
      "filePath": "text",
      "id": "text",
      "impactConfidence": "text",
      "impactLabel": "CRITICAL",
      "installationId": "text",
      "isAllowlisted": true,
      "isArchived": true,
      "isDefaultBranch": true,
      "isDeleted": true,
      "isDuplicate": true,
      "isFalsePositive": true,
      "isResolved": true,
      "match": "text",
      "owner": "text",
      "ownerType": "text",
      "platform": "text",
      "priorityLabel": "URGENT",
      "priorityLabelReason": "text",
      "priorityOverride": "URGENT",
      "priorityScore": 1,
      "projectId": "text",
      "projectName": "text",
      "redactedSecret": "text",
      "repository": "text",
      "repositoryId": "text",
      "repositoryName": "text",
      "resolvedAt": "2026-01-01T00:00:00.000Z",
      "ruleId": "text",
      "scannedCommitSha": "text",
      "scanner": "text",
      "scopes": [
        "text"
      ],
      "secretHash": "text",
      "secretType": "text",
      "secretValue": "text",
      "severityConfidence": "text",
      "severityLabel": "CRITICAL",
      "severityOverride": "CRITICAL",
      "severityScore": 1,
      "startColumn": 1,
      "startLine": 1,
      "tenantId": "text",
      "ticket": {
        "asana": {
          "projectGid": "text",
          "taskGid": "text",
          "url": "text"
        },
        "azure": {
          "url": "text",
          "workItemId": 1
        },
        "github": {
          "issueId": 1,
          "nodeId": "text",
          "number": 1,
          "repositoryName": "text",
          "url": "text"
        },
        "gitlab": {},
        "jira": {
          "issueId": "text",
          "issueKey": "text",
          "url": "text"
        },
        "linear": {
          "issueId": "text",
          "teamId": "text",
          "url": "text"
        },
        "providerId": "DX"
      },
      "timeStamp": "text",
      "timestampUnix": 1,
      "triageAgentVersion": "text",
      "triageDurationSeconds": 1,
      "triageEnd": "2026-01-01T00:00:00.000Z",
      "triageLlmCostUsd": 1,
      "triageMaxInputTokens": 1,
      "triageStart": "2026-01-01T00:00:00.000Z",
      "triageStopReason": "text",
      "triageTokenCount": 1,
      "triageTraceId": "text",
      "updatedAt": "text",
      "userId": "text",
      "userNotes": "text",
      "verified": true,
      "verifiedAt": "text"
    }
  ],
  "nextToken": "text",
  "numItems": 1,
  "version": "text"
}

Get a finding

Fetch full details for one finding. Credential responses also include a presignedUrl. Unknown or other-tenant IDs return 404.

Credentials:

Get Credential Finding

get

Returns a given credential finding

Path parameters
findingIdstringRequired
Query parameters
azureOrganizationIdstringOptional

The Azure organization ID

bitbucketWorkspaceIdstringOptional

The Bitbucket workspace ID

githubOwnerIdinteger · int64Optional

The Github owner ID

gitlabGroupIdinteger · int64Optional

The GitLab group ID

installationIdstringOptional

The Nullify installation ID

azureRepositoryIdstring[]Optional

Filter by Azure repository IDs

githubRepositoryIdinteger · int64[]Optional

Filter by GitHub repository IDs

githubTeamIdinteger · int64Optional

Filter by GitHub team ID

bitbucketRepositoryIdstring[]Optional

Filter by Bitbucket repository IDs

Responses
200

OK

application/json
presignedUrlstringOptional
versionstringOptional
get/secrets/credentials/findings/{findingId}
GET /secrets/credentials/findings/{findingId} HTTP/1.1
Host: api.<TENANT>.nullify.ai
Accept: */*
{
  "finding": {
    "aiDevTitle": "text",
    "aiTitle": "text",
    "allowlistReason": "text",
    "allowlistType": "AI",
    "archivedAt": "2026-01-01T00:00:00.000Z",
    "archivedTraceId": "text",
    "author": "text",
    "branch": "text",
    "commit": "text",
    "createdAt": "text",
    "deletedAt": "2026-01-01T00:00:00.000Z",
    "deletedTraceId": "text",
    "description": "text",
    "devDescription": "text",
    "endColumn": 1,
    "endLine": 1,
    "entropy": 1,
    "exploitabilityConfidence": "text",
    "exploitabilityLabel": "text",
    "failedTriage": true,
    "falsePositiveReason": "text",
    "fileOwners": [
      {
        "name": "text",
        "type": "email"
      }
    ],
    "filePath": "text",
    "id": "text",
    "impactConfidence": "text",
    "impactLabel": "CRITICAL",
    "installationId": "text",
    "isAllowlisted": true,
    "isArchived": true,
    "isDefaultBranch": true,
    "isDeleted": true,
    "isDuplicate": true,
    "isFalsePositive": true,
    "isResolved": true,
    "match": "text",
    "owner": "text",
    "ownerType": "text",
    "platform": "text",
    "priorityLabel": "URGENT",
    "priorityLabelReason": "text",
    "priorityOverride": "URGENT",
    "priorityScore": 1,
    "projectId": "text",
    "projectName": "text",
    "redactedSecret": "text",
    "repository": "text",
    "repositoryId": "text",
    "repositoryName": "text",
    "resolvedAt": "2026-01-01T00:00:00.000Z",
    "ruleId": "text",
    "scannedCommitSha": "text",
    "scanner": "text",
    "scopes": [
      "text"
    ],
    "secretHash": "text",
    "secretType": "text",
    "secretValue": "text",
    "severityConfidence": "text",
    "severityLabel": "CRITICAL",
    "severityOverride": "CRITICAL",
    "severityScore": 1,
    "startColumn": 1,
    "startLine": 1,
    "tenantId": "text",
    "ticket": {
      "asana": {
        "projectGid": "text",
        "taskGid": "text",
        "url": "text"
      },
      "azure": {
        "url": "text",
        "workItemId": 1
      },
      "github": {
        "issueId": 1,
        "nodeId": "text",
        "number": 1,
        "repositoryName": "text",
        "url": "text"
      },
      "gitlab": {},
      "jira": {
        "issueId": "text",
        "issueKey": "text",
        "url": "text"
      },
      "linear": {
        "issueId": "text",
        "teamId": "text",
        "url": "text"
      },
      "providerId": "DX"
    },
    "timeStamp": "text",
    "timestampUnix": 1,
    "triageAgentVersion": "text",
    "triageDurationSeconds": 1,
    "triageEnd": "2026-01-01T00:00:00.000Z",
    "triageLlmCostUsd": 1,
    "triageMaxInputTokens": 1,
    "triageStart": "2026-01-01T00:00:00.000Z",
    "triageStopReason": "text",
    "triageTokenCount": 1,
    "triageTraceId": "text",
    "updatedAt": "text",
    "userId": "text",
    "userNotes": "text",
    "verified": true,
    "verifiedAt": "text"
  },
  "presignedUrl": "text",
  "version": "text"
}

Legacy alias:

Get Credential Finding

get

Returns a given credential finding

Path parameters
findingIdstringRequired
Query parameters
azureOrganizationIdstringOptional

The Azure organization ID

bitbucketWorkspaceIdstringOptional

The Bitbucket workspace ID

githubOwnerIdinteger · int64Optional

The Github owner ID

gitlabGroupIdinteger · int64Optional

The GitLab group ID

installationIdstringOptional

The Nullify installation ID

azureRepositoryIdstring[]Optional

Filter by Azure repository IDs

githubRepositoryIdinteger · int64[]Optional

Filter by GitHub repository IDs

githubTeamIdinteger · int64Optional

Filter by GitHub team ID

bitbucketRepositoryIdstring[]Optional

Filter by Bitbucket repository IDs

Responses
200

OK

application/json
presignedUrlstringOptional
versionstringOptional
get/secrets/findings/{findingId}
GET /secrets/findings/{findingId} HTTP/1.1
Host: api.<TENANT>.nullify.ai
Accept: */*
{
  "finding": {
    "aiDevTitle": "text",
    "aiTitle": "text",
    "allowlistReason": "text",
    "allowlistType": "AI",
    "archivedAt": "2026-01-01T00:00:00.000Z",
    "archivedTraceId": "text",
    "author": "text",
    "branch": "text",
    "commit": "text",
    "createdAt": "text",
    "deletedAt": "2026-01-01T00:00:00.000Z",
    "deletedTraceId": "text",
    "description": "text",
    "devDescription": "text",
    "endColumn": 1,
    "endLine": 1,
    "entropy": 1,
    "exploitabilityConfidence": "text",
    "exploitabilityLabel": "text",
    "failedTriage": true,
    "falsePositiveReason": "text",
    "fileOwners": [
      {
        "name": "text",
        "type": "email"
      }
    ],
    "filePath": "text",
    "id": "text",
    "impactConfidence": "text",
    "impactLabel": "CRITICAL",
    "installationId": "text",
    "isAllowlisted": true,
    "isArchived": true,
    "isDefaultBranch": true,
    "isDeleted": true,
    "isDuplicate": true,
    "isFalsePositive": true,
    "isResolved": true,
    "match": "text",
    "owner": "text",
    "ownerType": "text",
    "platform": "text",
    "priorityLabel": "URGENT",
    "priorityLabelReason": "text",
    "priorityOverride": "URGENT",
    "priorityScore": 1,
    "projectId": "text",
    "projectName": "text",
    "redactedSecret": "text",
    "repository": "text",
    "repositoryId": "text",
    "repositoryName": "text",
    "resolvedAt": "2026-01-01T00:00:00.000Z",
    "ruleId": "text",
    "scannedCommitSha": "text",
    "scanner": "text",
    "scopes": [
      "text"
    ],
    "secretHash": "text",
    "secretType": "text",
    "secretValue": "text",
    "severityConfidence": "text",
    "severityLabel": "CRITICAL",
    "severityOverride": "CRITICAL",
    "severityScore": 1,
    "startColumn": 1,
    "startLine": 1,
    "tenantId": "text",
    "ticket": {
      "asana": {
        "projectGid": "text",
        "taskGid": "text",
        "url": "text"
      },
      "azure": {
        "url": "text",
        "workItemId": 1
      },
      "github": {
        "issueId": 1,
        "nodeId": "text",
        "number": 1,
        "repositoryName": "text",
        "url": "text"
      },
      "gitlab": {},
      "jira": {
        "issueId": "text",
        "issueKey": "text",
        "url": "text"
      },
      "linear": {
        "issueId": "text",
        "teamId": "text",
        "url": "text"
      },
      "providerId": "DX"
    },
    "timeStamp": "text",
    "timestampUnix": 1,
    "triageAgentVersion": "text",
    "triageDurationSeconds": 1,
    "triageEnd": "2026-01-01T00:00:00.000Z",
    "triageLlmCostUsd": 1,
    "triageMaxInputTokens": 1,
    "triageStart": "2026-01-01T00:00:00.000Z",
    "triageStopReason": "text",
    "triageTokenCount": 1,
    "triageTraceId": "text",
    "updatedAt": "text",
    "userId": "text",
    "userNotes": "text",
    "verified": true,
    "verifiedAt": "text"
  },
  "presignedUrl": "text",
  "version": "text"
}

Sensitive data:

Get Sensitive Data Finding

get

Returns a specific sensitive data finding by ID

Path parameters
findingIdstringRequired
Query parameters
azureOrganizationIdstringOptional

The Azure organization ID

bitbucketWorkspaceIdstringOptional

The Bitbucket workspace ID

githubOwnerIdinteger · int64Optional

The Github owner ID

gitlabGroupIdinteger · int64Optional

The GitLab group ID

installationIdstringOptional

The Nullify installation ID

azureRepositoryIdstring[]Optional

Filter by Azure repository IDs

githubRepositoryIdinteger · int64[]Optional

Filter by GitHub repository IDs

githubTeamIdinteger · int64Optional

Filter by GitHub team ID

bitbucketRepositoryIdstring[]Optional

Filter by Bitbucket repository IDs

Responses
200

OK

application/json
presignedUrlstringOptional
versionstringOptional
get/secrets/sensitivedata/findings/{findingId}
GET /secrets/sensitivedata/findings/{findingId} HTTP/1.1
Host: api.<TENANT>.nullify.ai
Accept: */*
{
  "finding": {
    "aiTitle": "text",
    "archivedAt": "2026-01-01T00:00:00.000Z",
    "archivedTraceId": "text",
    "author": "text",
    "branch": "text",
    "budgetExhausted": true,
    "commit": "text",
    "createdAt": "text",
    "deletedAt": "2026-01-01T00:00:00.000Z",
    "deletedTraceId": "text",
    "failedTriage": true,
    "falsePositiveReason": "text",
    "fields": [
      {
        "dataType": "text",
        "endColumn": 1,
        "endLine": 1,
        "ruleId": "text",
        "scanner": "text",
        "startColumn": 1,
        "startLine": 1
      }
    ],
    "fileOwners": [
      {
        "name": "text",
        "type": "email"
      }
    ],
    "filePath": "text",
    "id": "text",
    "installationId": "text",
    "isAllowlisted": true,
    "isArchived": true,
    "isDefaultBranch": true,
    "isDeleted": true,
    "isDuplicate": true,
    "isFalsePositive": true,
    "isResolved": true,
    "isTriaged": true,
    "owner": "text",
    "ownerType": "text",
    "platform": "text",
    "priorityLabel": "URGENT",
    "priorityLabelReason": "text",
    "priorityOverride": "URGENT",
    "priorityScore": 1,
    "projectId": "text",
    "projectName": "text",
    "repositoryId": "text",
    "repositoryName": "text",
    "resolvedAt": "2026-01-01T00:00:00.000Z",
    "scannedCommitSha": "text",
    "secretValue": "text",
    "tenantId": "text",
    "ticket": {
      "asana": {
        "projectGid": "text",
        "taskGid": "text",
        "url": "text"
      },
      "azure": {
        "url": "text",
        "workItemId": 1
      },
      "github": {
        "issueId": 1,
        "nodeId": "text",
        "number": 1,
        "repositoryName": "text",
        "url": "text"
      },
      "gitlab": {},
      "jira": {
        "issueId": "text",
        "issueKey": "text",
        "url": "text"
      },
      "linear": {
        "issueId": "text",
        "teamId": "text",
        "url": "text"
      },
      "providerId": "DX"
    },
    "timestampUnix": 1,
    "triageAgentVersion": "text",
    "triageDurationSeconds": 1,
    "triageEnd": "2026-01-01T00:00:00.000Z",
    "triageLlmCostUsd": 1,
    "triageStart": "2026-01-01T00:00:00.000Z",
    "triageStopReason": "text",
    "triageTokenCount": 1,
    "updatedAt": "text",
    "userId": "text",
    "userNotes": "text"
  },
  "presignedUrl": "text",
  "version": "text"
}

Update a finding

Override priority or attach notes. Credential findings accept priorityOverride (URGENT, IMPORTANT, MEDIUM, INFORMATIONAL, LOW, NEGLIGIBLE, FALSE_POSITIVE, UNKNOWN), severityOverride (CRITICAL, HIGH, MEDIUM, LOW, NONE, INFORMATIONAL, UNKNOWN) and userNotes. Sensitive-data findings accept only priorityOverride and userNotes; they have no severity override. An invalid value returns 400. The response is the updated finding.

Credentials:

Update Credential Finding

patch

Update a given credential finding with the fields provided

Path parameters
findingIdstringRequired
Query parameters
azureOrganizationIdstringOptional

The Azure organization ID

bitbucketWorkspaceIdstringOptional

The Bitbucket workspace ID

githubOwnerIdinteger · int64Optional

The Github owner ID

gitlabGroupIdinteger · int64Optional

The GitLab group ID

installationIdstringOptional

The Nullify installation ID

azureRepositoryIdstring[]Optional

Filter by Azure repository IDs

githubRepositoryIdinteger · int64[]Optional

Filter by GitHub repository IDs

githubTeamIdinteger · int64Optional

Filter by GitHub team ID

bitbucketRepositoryIdstring[]Optional

Filter by Bitbucket repository IDs

Body
priorityOverridestring · enum · nullableOptionalPossible values:
severityOverridestring · enum · nullableOptionalPossible values:
userNotesstring · nullableOptional
Responses
200

OK

application/json
versionstringOptional
patch/secrets/credentials/findings/{findingId}
PATCH /secrets/credentials/findings/{findingId} HTTP/1.1
Host: api.<TENANT>.nullify.ai
Content-Type: application/json
Accept: */*
Content-Length: 78

{
  "priorityOverride": "URGENT",
  "severityOverride": "CRITICAL",
  "userNotes": "text"
}
{
  "finding": {
    "aiDevTitle": "text",
    "aiTitle": "text",
    "allowlistReason": "text",
    "allowlistType": "AI",
    "archivedAt": "2026-01-01T00:00:00.000Z",
    "archivedTraceId": "text",
    "author": "text",
    "branch": "text",
    "commit": "text",
    "createdAt": "text",
    "deletedAt": "2026-01-01T00:00:00.000Z",
    "deletedTraceId": "text",
    "description": "text",
    "devDescription": "text",
    "endColumn": 1,
    "endLine": 1,
    "entropy": 1,
    "exploitabilityConfidence": "text",
    "exploitabilityLabel": "text",
    "failedTriage": true,
    "falsePositiveReason": "text",
    "fileOwners": [
      {
        "name": "text",
        "type": "email"
      }
    ],
    "filePath": "text",
    "id": "text",
    "impactConfidence": "text",
    "impactLabel": "CRITICAL",
    "installationId": "text",
    "isAllowlisted": true,
    "isArchived": true,
    "isDefaultBranch": true,
    "isDeleted": true,
    "isDuplicate": true,
    "isFalsePositive": true,
    "isResolved": true,
    "match": "text",
    "owner": "text",
    "ownerType": "text",
    "platform": "text",
    "priorityLabel": "URGENT",
    "priorityLabelReason": "text",
    "priorityOverride": "URGENT",
    "priorityScore": 1,
    "projectId": "text",
    "projectName": "text",
    "redactedSecret": "text",
    "repository": "text",
    "repositoryId": "text",
    "repositoryName": "text",
    "resolvedAt": "2026-01-01T00:00:00.000Z",
    "ruleId": "text",
    "scannedCommitSha": "text",
    "scanner": "text",
    "scopes": [
      "text"
    ],
    "secretHash": "text",
    "secretType": "text",
    "secretValue": "text",
    "severityConfidence": "text",
    "severityLabel": "CRITICAL",
    "severityOverride": "CRITICAL",
    "severityScore": 1,
    "startColumn": 1,
    "startLine": 1,
    "tenantId": "text",
    "ticket": {
      "asana": {
        "projectGid": "text",
        "taskGid": "text",
        "url": "text"
      },
      "azure": {
        "url": "text",
        "workItemId": 1
      },
      "github": {
        "issueId": 1,
        "nodeId": "text",
        "number": 1,
        "repositoryName": "text",
        "url": "text"
      },
      "gitlab": {},
      "jira": {
        "issueId": "text",
        "issueKey": "text",
        "url": "text"
      },
      "linear": {
        "issueId": "text",
        "teamId": "text",
        "url": "text"
      },
      "providerId": "DX"
    },
    "timeStamp": "text",
    "timestampUnix": 1,
    "triageAgentVersion": "text",
    "triageDurationSeconds": 1,
    "triageEnd": "2026-01-01T00:00:00.000Z",
    "triageLlmCostUsd": 1,
    "triageMaxInputTokens": 1,
    "triageStart": "2026-01-01T00:00:00.000Z",
    "triageStopReason": "text",
    "triageTokenCount": 1,
    "triageTraceId": "text",
    "updatedAt": "text",
    "userId": "text",
    "userNotes": "text",
    "verified": true,
    "verifiedAt": "text"
  },
  "version": "text"
}

Legacy alias:

Update Credential Finding

patch

Update a given credential finding with the fields provided

Path parameters
findingIdstringRequired
Query parameters
azureOrganizationIdstringOptional

The Azure organization ID

bitbucketWorkspaceIdstringOptional

The Bitbucket workspace ID

githubOwnerIdinteger · int64Optional

The Github owner ID

gitlabGroupIdinteger · int64Optional

The GitLab group ID

installationIdstringOptional

The Nullify installation ID

azureRepositoryIdstring[]Optional

Filter by Azure repository IDs

githubRepositoryIdinteger · int64[]Optional

Filter by GitHub repository IDs

githubTeamIdinteger · int64Optional

Filter by GitHub team ID

bitbucketRepositoryIdstring[]Optional

Filter by Bitbucket repository IDs

Body
priorityOverridestring · enum · nullableOptionalPossible values:
severityOverridestring · enum · nullableOptionalPossible values:
userNotesstring · nullableOptional
Responses
200

OK

application/json
versionstringOptional
patch/secrets/findings/{findingId}
PATCH /secrets/findings/{findingId} HTTP/1.1
Host: api.<TENANT>.nullify.ai
Content-Type: application/json
Accept: */*
Content-Length: 78

{
  "priorityOverride": "URGENT",
  "severityOverride": "CRITICAL",
  "userNotes": "text"
}
{
  "finding": {
    "aiDevTitle": "text",
    "aiTitle": "text",
    "allowlistReason": "text",
    "allowlistType": "AI",
    "archivedAt": "2026-01-01T00:00:00.000Z",
    "archivedTraceId": "text",
    "author": "text",
    "branch": "text",
    "commit": "text",
    "createdAt": "text",
    "deletedAt": "2026-01-01T00:00:00.000Z",
    "deletedTraceId": "text",
    "description": "text",
    "devDescription": "text",
    "endColumn": 1,
    "endLine": 1,
    "entropy": 1,
    "exploitabilityConfidence": "text",
    "exploitabilityLabel": "text",
    "failedTriage": true,
    "falsePositiveReason": "text",
    "fileOwners": [
      {
        "name": "text",
        "type": "email"
      }
    ],
    "filePath": "text",
    "id": "text",
    "impactConfidence": "text",
    "impactLabel": "CRITICAL",
    "installationId": "text",
    "isAllowlisted": true,
    "isArchived": true,
    "isDefaultBranch": true,
    "isDeleted": true,
    "isDuplicate": true,
    "isFalsePositive": true,
    "isResolved": true,
    "match": "text",
    "owner": "text",
    "ownerType": "text",
    "platform": "text",
    "priorityLabel": "URGENT",
    "priorityLabelReason": "text",
    "priorityOverride": "URGENT",
    "priorityScore": 1,
    "projectId": "text",
    "projectName": "text",
    "redactedSecret": "text",
    "repository": "text",
    "repositoryId": "text",
    "repositoryName": "text",
    "resolvedAt": "2026-01-01T00:00:00.000Z",
    "ruleId": "text",
    "scannedCommitSha": "text",
    "scanner": "text",
    "scopes": [
      "text"
    ],
    "secretHash": "text",
    "secretType": "text",
    "secretValue": "text",
    "severityConfidence": "text",
    "severityLabel": "CRITICAL",
    "severityOverride": "CRITICAL",
    "severityScore": 1,
    "startColumn": 1,
    "startLine": 1,
    "tenantId": "text",
    "ticket": {
      "asana": {
        "projectGid": "text",
        "taskGid": "text",
        "url": "text"
      },
      "azure": {
        "url": "text",
        "workItemId": 1
      },
      "github": {
        "issueId": 1,
        "nodeId": "text",
        "number": 1,
        "repositoryName": "text",
        "url": "text"
      },
      "gitlab": {},
      "jira": {
        "issueId": "text",
        "issueKey": "text",
        "url": "text"
      },
      "linear": {
        "issueId": "text",
        "teamId": "text",
        "url": "text"
      },
      "providerId": "DX"
    },
    "timeStamp": "text",
    "timestampUnix": 1,
    "triageAgentVersion": "text",
    "triageDurationSeconds": 1,
    "triageEnd": "2026-01-01T00:00:00.000Z",
    "triageLlmCostUsd": 1,
    "triageMaxInputTokens": 1,
    "triageStart": "2026-01-01T00:00:00.000Z",
    "triageStopReason": "text",
    "triageTokenCount": 1,
    "triageTraceId": "text",
    "updatedAt": "text",
    "userId": "text",
    "userNotes": "text",
    "verified": true,
    "verifiedAt": "text"
  },
  "version": "text"
}

Sensitive data:

Update Sensitive Data Finding

patch

Update a given sensitive data finding with the fields provided

Path parameters
findingIdstringRequired
Query parameters
azureOrganizationIdstringOptional

The Azure organization ID

bitbucketWorkspaceIdstringOptional

The Bitbucket workspace ID

githubOwnerIdinteger · int64Optional

The Github owner ID

gitlabGroupIdinteger · int64Optional

The GitLab group ID

installationIdstringOptional

The Nullify installation ID

azureRepositoryIdstring[]Optional

Filter by Azure repository IDs

githubRepositoryIdinteger · int64[]Optional

Filter by GitHub repository IDs

githubTeamIdinteger · int64Optional

Filter by GitHub team ID

bitbucketRepositoryIdstring[]Optional

Filter by Bitbucket repository IDs

Body
priorityOverridestring · enum · nullableOptionalPossible values:
userNotesstring · nullableOptional
Responses
200

OK

application/json
versionstringOptional
patch/secrets/sensitivedata/findings/{findingId}
PATCH /secrets/sensitivedata/findings/{findingId} HTTP/1.1
Host: api.<TENANT>.nullify.ai
Content-Type: application/json
Accept: */*
Content-Length: 48

{
  "priorityOverride": "URGENT",
  "userNotes": "text"
}
{
  "finding": {
    "aiTitle": "text",
    "archivedAt": "2026-01-01T00:00:00.000Z",
    "archivedTraceId": "text",
    "author": "text",
    "branch": "text",
    "budgetExhausted": true,
    "commit": "text",
    "createdAt": "text",
    "deletedAt": "2026-01-01T00:00:00.000Z",
    "deletedTraceId": "text",
    "failedTriage": true,
    "falsePositiveReason": "text",
    "fields": [
      {
        "dataType": "text",
        "endColumn": 1,
        "endLine": 1,
        "ruleId": "text",
        "scanner": "text",
        "startColumn": 1,
        "startLine": 1
      }
    ],
    "fileOwners": [
      {
        "name": "text",
        "type": "email"
      }
    ],
    "filePath": "text",
    "id": "text",
    "installationId": "text",
    "isAllowlisted": true,
    "isArchived": true,
    "isDefaultBranch": true,
    "isDeleted": true,
    "isDuplicate": true,
    "isFalsePositive": true,
    "isResolved": true,
    "isTriaged": true,
    "owner": "text",
    "ownerType": "text",
    "platform": "text",
    "priorityLabel": "URGENT",
    "priorityLabelReason": "text",
    "priorityOverride": "URGENT",
    "priorityScore": 1,
    "projectId": "text",
    "projectName": "text",
    "repositoryId": "text",
    "repositoryName": "text",
    "resolvedAt": "2026-01-01T00:00:00.000Z",
    "scannedCommitSha": "text",
    "secretValue": "text",
    "tenantId": "text",
    "ticket": {
      "asana": {
        "projectGid": "text",
        "taskGid": "text",
        "url": "text"
      },
      "azure": {
        "url": "text",
        "workItemId": 1
      },
      "github": {
        "issueId": 1,
        "nodeId": "text",
        "number": 1,
        "repositoryName": "text",
        "url": "text"
      },
      "gitlab": {},
      "jira": {
        "issueId": "text",
        "issueKey": "text",
        "url": "text"
      },
      "linear": {
        "issueId": "text",
        "teamId": "text",
        "url": "text"
      },
      "providerId": "DX"
    },
    "timestampUnix": 1,
    "triageAgentVersion": "text",
    "triageDurationSeconds": 1,
    "triageEnd": "2026-01-01T00:00:00.000Z",
    "triageLlmCostUsd": 1,
    "triageStart": "2026-01-01T00:00:00.000Z",
    "triageStopReason": "text",
    "triageTokenCount": 1,
    "updatedAt": "text",
    "userId": "text",
    "userNotes": "text"
  },
  "version": "text"
}

Get triage details

Fetch how Nullify triaged a finding: its severity, priority and reasoning. Triage is not instant: for a finding that exists but has no triage yet the call returns 404 (triage not yet available), so retry later rather than treating it as a missing finding. Credential findings fall back to a validation-only result when the credential was checked against its provider but no full report is readable.

Credentials:

Get Triaged Credential Finding

get

Returns the triage data for a specific credential finding

Path parameters
findingIdstringRequired
Query parameters
azureOrganizationIdstringOptional

The Azure organization ID

bitbucketWorkspaceIdstringOptional

The Bitbucket workspace ID

githubOwnerIdinteger · int64Optional

The Github owner ID

gitlabGroupIdinteger · int64Optional

The GitLab group ID

installationIdstringOptional

The Nullify installation ID

azureRepositoryIdstring[]Optional

Filter by Azure repository IDs

githubRepositoryIdinteger · int64[]Optional

Filter by GitHub repository IDs

githubTeamIdinteger · int64Optional

Filter by GitHub team ID

bitbucketRepositoryIdstring[]Optional

Filter by Bitbucket repository IDs

Responses
200

OK

application/json
versionstringOptional
get/secrets/credentials/findings/{findingId}/triage
GET /secrets/credentials/findings/{findingId}/triage HTTP/1.1
Host: api.<TENANT>.nullify.ai
Accept: */*
{
  "finding": {
    "agentVersion": "text",
    "assessmentFactors": [
      {
        "description": "text",
        "title": "text"
      }
    ],
    "codeContext": {
      "codeBlocks": [
        {
          "codeText": "text",
          "endLine": 1,
          "filePath": "text",
          "startLine": 1
        }
      ],
      "dataFlow": "text",
      "error": "text",
      "exitReason": "text",
      "summary": "text",
      "thoughts": "text"
    },
    "falsePositiveReason": "text",
    "finding": {
      "aiDevTitle": "text",
      "aiTitle": "text",
      "allowlistReason": "text",
      "allowlistType": "AI",
      "archivedAt": "2026-01-01T00:00:00.000Z",
      "archivedTraceId": "text",
      "author": "text",
      "branch": "text",
      "commit": "text",
      "createdAt": "text",
      "deletedAt": "2026-01-01T00:00:00.000Z",
      "deletedTraceId": "text",
      "description": "text",
      "devDescription": "text",
      "endColumn": 1,
      "endLine": 1,
      "entropy": 1,
      "exploitabilityConfidence": "text",
      "exploitabilityLabel": "text",
      "failedTriage": true,
      "falsePositiveReason": "text",
      "fileOwners": [
        {
          "name": "text",
          "type": "email"
        }
      ],
      "filePath": "text",
      "id": "text",
      "impactConfidence": "text",
      "impactLabel": "CRITICAL",
      "installationId": "text",
      "isAllowlisted": true,
      "isArchived": true,
      "isDefaultBranch": true,
      "isDeleted": true,
      "isDuplicate": true,
      "isFalsePositive": true,
      "isResolved": true,
      "match": "text",
      "owner": "text",
      "ownerType": "text",
      "platform": "text",
      "priorityLabel": "URGENT",
      "priorityLabelReason": "text",
      "priorityOverride": "URGENT",
      "priorityScore": 1,
      "projectId": "text",
      "projectName": "text",
      "redactedSecret": "text",
      "repository": "text",
      "repositoryId": "text",
      "repositoryName": "text",
      "resolvedAt": "2026-01-01T00:00:00.000Z",
      "ruleId": "text",
      "scannedCommitSha": "text",
      "scanner": "text",
      "scopes": [
        "text"
      ],
      "secretHash": "text",
      "secretType": "text",
      "secretValue": "text",
      "severityConfidence": "text",
      "severityLabel": "CRITICAL",
      "severityOverride": "CRITICAL",
      "severityScore": 1,
      "startColumn": 1,
      "startLine": 1,
      "tenantId": "text",
      "ticket": {
        "asana": {
          "projectGid": "text",
          "taskGid": "text",
          "url": "text"
        },
        "azure": {
          "url": "text",
          "workItemId": 1
        },
        "github": {
          "issueId": 1,
          "nodeId": "text",
          "number": 1,
          "repositoryName": "text",
          "url": "text"
        },
        "gitlab": {},
        "jira": {
          "issueId": "text",
          "issueKey": "text",
          "url": "text"
        },
        "linear": {
          "issueId": "text",
          "teamId": "text",
          "url": "text"
        },
        "providerId": "DX"
      },
      "timeStamp": "text",
      "timestampUnix": 1,
      "triageAgentVersion": "text",
      "triageDurationSeconds": 1,
      "triageEnd": "2026-01-01T00:00:00.000Z",
      "triageLlmCostUsd": 1,
      "triageMaxInputTokens": 1,
      "triageStart": "2026-01-01T00:00:00.000Z",
      "triageStopReason": "text",
      "triageTokenCount": 1,
      "triageTraceId": "text",
      "updatedAt": "text",
      "userId": "text",
      "userNotes": "text",
      "verified": true,
      "verifiedAt": "text"
    },
    "fixStoryPointEstimate": 1,
    "investigationSteps": [
      {
        "details": [
          "text"
        ],
        "title": "text"
      }
    ],
    "isFalsePositive": true,
    "orgContextVersion": "text",
    "priority": {
      "description": "text",
      "exploitability": {
        "description": "text",
        "label": "HIGH"
      },
      "impact": {
        "description": "text",
        "label": "HIGH"
      },
      "label": "IMPORTANT",
      "score": 1
    },
    "repoContextVersion": "text",
    "triage": {
      "budgetExhausted": true,
      "campaignMetadata": {
        "id": "text",
        "name": "text"
      },
      "cloudContext": {
        "confidence": 1,
        "mode": "MODEA",
        "ownershipBasis": "declared",
        "repos": [
          "text"
        ],
        "thoughts": "text"
      },
      "complianceImpact": {
        "citations": [
          {
            "documentId": "text",
            "endLine": 1,
            "fileName": "text",
            "nodeId": "text",
            "page": 1,
            "quote": "text",
            "score": 1,
            "startLine": 1,
            "title": "text"
          }
        ],
        "confidence": "HIGH",
        "frameworks": [
          {
            "clause": "text",
            "framework": "CCPA",
            "obligation": "text"
          }
        ],
        "rationale": "text"
      },
      "customerQuestions": {
        "customMessage": "text",
        "generatedMemoryIds": [
          "text"
        ],
        "id": "text",
        "questions": [
          {
            "answer": null,
            "answerMemoryId": "text",
            "answeredAt": "2026-01-01T00:00:00.000Z",
            "customMessage": "text",
            "findingIds": [
              "text"
            ],
            "id": "text",
            "options": [
              {
                "id": "text",
                "label": "text",
                "value": "text"
              }
            ],
            "questionText": "text",
            "questionType": "FREE_TEXT",
            "relatedMemoryIds": [
              "text"
            ],
            "scope": "CLOUD",
            "scopeResourceId": "text",
            "unknownIds": [
              "text"
            ]
          }
        ]
      },
      "description": "text",
      "descriptionSummary": "text",
      "devDescription": "text",
      "devTitle": "text",
      "evidence": {
        "edges": [
          {
            "confidence": 1,
            "explanation": "text",
            "properties": {
              "ANY_ADDITIONAL_PROPERTY": "anything"
            },
            "sourceId": "text",
            "targetId": "text",
            "type": "ABOUT"
          }
        ],
        "nodes": []
      },
      "exploitHypothesis": {
        "edges": [
          {
            "confidence": 1,
            "explanation": "text",
            "properties": {
              "ANY_ADDITIONAL_PROPERTY": "anything"
            },
            "sourceId": "text",
            "targetId": "text",
            "type": "ABOUT"
          }
        ],
        "nodes": []
      },
      "exploitability": {
        "attackComplexity": {
          "description": "text",
          "exploitChainRequired": {
            "description": "text",
            "label": "HIGH",
            "title": "text"
          },
          "label": "HIGH",
          "payloadDifficulty": {
            "description": "text",
            "label": "EASY"
          }
        },
        "attackRequirements": {
          "description": "text",
          "environmentState": {
            "description": "text",
            "label": "HIGH",
            "title": "text"
          },
          "label": "HIGH",
          "mitm": {
            "description": "text",
            "label": "HIGH",
            "title": "text"
          },
          "raceCondition": {
            "description": "text",
            "label": "HIGH",
            "title": "text"
          },
          "timeWindow": {
            "description": "text",
            "label": "HIGH",
            "title": "text"
          },
          "title": "text"
        },
        "attackVector": {
          "description": "text",
          "label": "ADJACENT",
          "subVectors": [
            {
              "description": "text",
              "otherVector": "text",
              "vector": "ADJACENT_ARP_SPOOFING"
            }
          ]
        },
        "confidence": "HIGH",
        "description": "text",
        "label": "LIKELY",
        "privilegesRequired": {
          "description": "text",
          "label": "HIGH",
          "title": "text",
          "types": [
            "PRIVILEGED_USER"
          ]
        },
        "title": "text",
        "unknowns": [
          "text"
        ],
        "userInteraction": {
          "description": "text",
          "label": "ACTIVE",
          "otherTypes": [
            "text"
          ],
          "title": "text",
          "types": [
            "BROWSING"
          ]
        }
      },
      "failedTriage": true,
      "fixEffort": {
        "confidence": "HIGH",
        "description": "text",
        "label": "EASY",
        "title": "text",
        "unknowns": [
          "text"
        ]
      },
      "id": "text",
      "impact": {
        "availability": {
          "cause": [
            "BUFFER_OVERFLOW"
          ],
          "description": "text",
          "label": "HIGH",
          "title": "text",
          "type": [
            "COMPLETE_SERVICE_OUTAGE"
          ]
        },
        "businessCriticality": {
          "description": "text",
          "label": "HIGH",
          "title": "text"
        },
        "confidence": "HIGH",
        "confidentiality": {
          "dataLeaked": [
            "ACCESS_TOKEN"
          ],
          "label": "HIGH"
        },
        "description": "text",
        "integrity": {
          "description": "text",
          "label": "HIGH",
          "title": "text",
          "type": [
            "DATABASE_ALTERED"
          ]
        },
        "label": "CRITICAL",
        "title": "text",
        "unknowns": [
          "text"
        ]
      },
      "investigationConfidence": "HIGH",
      "investigationId": "text",
      "investigationUnknowns": [
        "text"
      ],
      "lastTriagedAt": "2026-01-01T00:00:00.000Z",
      "memoriesGenerated": [
        "text"
      ],
      "memoriesUsed": [
        "text"
      ],
      "parentTriageId": "text",
      "pentest": {
        "attemptedCVEs": [
          "text"
        ],
        "browserEvidence": {
          "citation": "text",
          "family": "text",
          "reason": "text",
          "screenshotRefs": [
            "text"
          ],
          "verdict": "text"
        },
        "confidence": 1,
        "cost": 1,
        "duration": 1,
        "exploitedCVE": "text",
        "logs": [
          {
            "logs": [],
            "summary": "text"
          }
        ],
        "mutationDisclosure": {
          "writes": [
            {
              "method": "text",
              "outcome": "text",
              "statusCode": 1,
              "url": "text"
            }
          ],
          "writesAttempted": true
        },
        "outcome": "CANNOT_DETERMINE",
        "report": "text",
        "reproductionScript": "text",
        "sourceAvailability": {
          "apiSchema": true,
          "checkout": true,
          "codeSnippets": true
        },
        "testedEndpoints": [
          {
            "method": "text",
            "path": "text"
          }
        ],
        "validatedBy": {
          "engine": "FINDING_EXPLOIT_VALIDATION",
          "recordedAt": "2026-01-01T00:00:00.000Z",
          "runId": "text"
        }
      },
      "priority": "FALSE_POSITIVE",
      "references": [
        {
          "documentId": "text",
          "endLine": 1,
          "fileName": "text",
          "nodeId": "text",
          "page": 1,
          "quote": "text",
          "score": 1,
          "startLine": 1,
          "title": "text"
        }
      ],
      "retriageComparison": {
        "narrative": "text",
        "newInformation": {
          "cloudContextUpdated": true,
          "memoryChanges": [
            {
              "description": "text",
              "kind": "ADDED"
            }
          ],
          "pentestResultAdded": true,
          "userComments": [
            {
              "commentId": "text",
              "influence": "changed_verdict",
              "keyClaim": "text"
            }
          ]
        },
        "qualityAssessment": {
          "remainingUncertainties": [
            "text"
          ],
          "sufficientEvidence": true
        },
        "verdictChanges": [
          {
            "current": "text",
            "field": "text",
            "previous": "text",
            "reason": "text"
          }
        ]
      },
      "retriageMetadata": {
        "memoryChanges": [
          {
            "memoryChangeType": "MEMORY_ADDED",
            "memoryId": "text"
          }
        ],
        "triggeredAt": "2026-01-01T00:00:00.000Z"
      },
      "retriageStatus": "NOT_RETRIAGED",
      "severity": {
        "confidence": "HIGH",
        "label": "CRITICAL",
        "score": 1,
        "unknowns": [
          "text"
        ]
      },
      "stopReason": "cost_cap",
      "thoughts": "text",
      "title": "text",
      "version": 1
    },
    "triagedCommitSha": "text",
    "validationResult": {
      "evidence": "text",
      "permissions": "text",
      "result": "INVALID"
    }
  },
  "version": "text",
  "vulnManagementFrameworks": {
    "results": [
      {
        "controls": [
          {
            "confidence": "exact",
            "id": "text",
            "level": "text",
            "relationship": "text",
            "title": "text",
            "url": "text"
          }
        ],
        "framework": "cvss-3.1",
        "mappingConfidence": "exact",
        "notes": [
          "text"
        ],
        "rank": "text",
        "score": {
          "baseScore": 1,
          "nomenclature": "text",
          "qualitative": "text",
          "synthesized": true,
          "vector": "text"
        },
        "version": "text"
      }
    ]
  }
}

Legacy alias:

Get Triaged Credential Finding

get

Returns the triage data for a specific credential finding

Path parameters
findingIdstringRequired
Query parameters
azureOrganizationIdstringOptional

The Azure organization ID

bitbucketWorkspaceIdstringOptional

The Bitbucket workspace ID

githubOwnerIdinteger · int64Optional

The Github owner ID

gitlabGroupIdinteger · int64Optional

The GitLab group ID

installationIdstringOptional

The Nullify installation ID

azureRepositoryIdstring[]Optional

Filter by Azure repository IDs

githubRepositoryIdinteger · int64[]Optional

Filter by GitHub repository IDs

githubTeamIdinteger · int64Optional

Filter by GitHub team ID

bitbucketRepositoryIdstring[]Optional

Filter by Bitbucket repository IDs

Responses
200

OK

application/json
versionstringOptional
get/secrets/findings/{findingId}/triage
GET /secrets/findings/{findingId}/triage HTTP/1.1
Host: api.<TENANT>.nullify.ai
Accept: */*
{
  "finding": {
    "agentVersion": "text",
    "assessmentFactors": [
      {
        "description": "text",
        "title": "text"
      }
    ],
    "codeContext": {
      "codeBlocks": [
        {
          "codeText": "text",
          "endLine": 1,
          "filePath": "text",
          "startLine": 1
        }
      ],
      "dataFlow": "text",
      "error": "text",
      "exitReason": "text",
      "summary": "text",
      "thoughts": "text"
    },
    "falsePositiveReason": "text",
    "finding": {
      "aiDevTitle": "text",
      "aiTitle": "text",
      "allowlistReason": "text",
      "allowlistType": "AI",
      "archivedAt": "2026-01-01T00:00:00.000Z",
      "archivedTraceId": "text",
      "author": "text",
      "branch": "text",
      "commit": "text",
      "createdAt": "text",
      "deletedAt": "2026-01-01T00:00:00.000Z",
      "deletedTraceId": "text",
      "description": "text",
      "devDescription": "text",
      "endColumn": 1,
      "endLine": 1,
      "entropy": 1,
      "exploitabilityConfidence": "text",
      "exploitabilityLabel": "text",
      "failedTriage": true,
      "falsePositiveReason": "text",
      "fileOwners": [
        {
          "name": "text",
          "type": "email"
        }
      ],
      "filePath": "text",
      "id": "text",
      "impactConfidence": "text",
      "impactLabel": "CRITICAL",
      "installationId": "text",
      "isAllowlisted": true,
      "isArchived": true,
      "isDefaultBranch": true,
      "isDeleted": true,
      "isDuplicate": true,
      "isFalsePositive": true,
      "isResolved": true,
      "match": "text",
      "owner": "text",
      "ownerType": "text",
      "platform": "text",
      "priorityLabel": "URGENT",
      "priorityLabelReason": "text",
      "priorityOverride": "URGENT",
      "priorityScore": 1,
      "projectId": "text",
      "projectName": "text",
      "redactedSecret": "text",
      "repository": "text",
      "repositoryId": "text",
      "repositoryName": "text",
      "resolvedAt": "2026-01-01T00:00:00.000Z",
      "ruleId": "text",
      "scannedCommitSha": "text",
      "scanner": "text",
      "scopes": [
        "text"
      ],
      "secretHash": "text",
      "secretType": "text",
      "secretValue": "text",
      "severityConfidence": "text",
      "severityLabel": "CRITICAL",
      "severityOverride": "CRITICAL",
      "severityScore": 1,
      "startColumn": 1,
      "startLine": 1,
      "tenantId": "text",
      "ticket": {
        "asana": {
          "projectGid": "text",
          "taskGid": "text",
          "url": "text"
        },
        "azure": {
          "url": "text",
          "workItemId": 1
        },
        "github": {
          "issueId": 1,
          "nodeId": "text",
          "number": 1,
          "repositoryName": "text",
          "url": "text"
        },
        "gitlab": {},
        "jira": {
          "issueId": "text",
          "issueKey": "text",
          "url": "text"
        },
        "linear": {
          "issueId": "text",
          "teamId": "text",
          "url": "text"
        },
        "providerId": "DX"
      },
      "timeStamp": "text",
      "timestampUnix": 1,
      "triageAgentVersion": "text",
      "triageDurationSeconds": 1,
      "triageEnd": "2026-01-01T00:00:00.000Z",
      "triageLlmCostUsd": 1,
      "triageMaxInputTokens": 1,
      "triageStart": "2026-01-01T00:00:00.000Z",
      "triageStopReason": "text",
      "triageTokenCount": 1,
      "triageTraceId": "text",
      "updatedAt": "text",
      "userId": "text",
      "userNotes": "text",
      "verified": true,
      "verifiedAt": "text"
    },
    "fixStoryPointEstimate": 1,
    "investigationSteps": [
      {
        "details": [
          "text"
        ],
        "title": "text"
      }
    ],
    "isFalsePositive": true,
    "orgContextVersion": "text",
    "priority": {
      "description": "text",
      "exploitability": {
        "description": "text",
        "label": "HIGH"
      },
      "impact": {
        "description": "text",
        "label": "HIGH"
      },
      "label": "IMPORTANT",
      "score": 1
    },
    "repoContextVersion": "text",
    "triage": {
      "budgetExhausted": true,
      "campaignMetadata": {
        "id": "text",
        "name": "text"
      },
      "cloudContext": {
        "confidence": 1,
        "mode": "MODEA",
        "ownershipBasis": "declared",
        "repos": [
          "text"
        ],
        "thoughts": "text"
      },
      "complianceImpact": {
        "citations": [
          {
            "documentId": "text",
            "endLine": 1,
            "fileName": "text",
            "nodeId": "text",
            "page": 1,
            "quote": "text",
            "score": 1,
            "startLine": 1,
            "title": "text"
          }
        ],
        "confidence": "HIGH",
        "frameworks": [
          {
            "clause": "text",
            "framework": "CCPA",
            "obligation": "text"
          }
        ],
        "rationale": "text"
      },
      "customerQuestions": {
        "customMessage": "text",
        "generatedMemoryIds": [
          "text"
        ],
        "id": "text",
        "questions": [
          {
            "answer": null,
            "answerMemoryId": "text",
            "answeredAt": "2026-01-01T00:00:00.000Z",
            "customMessage": "text",
            "findingIds": [
              "text"
            ],
            "id": "text",
            "options": [
              {
                "id": "text",
                "label": "text",
                "value": "text"
              }
            ],
            "questionText": "text",
            "questionType": "FREE_TEXT",
            "relatedMemoryIds": [
              "text"
            ],
            "scope": "CLOUD",
            "scopeResourceId": "text",
            "unknownIds": [
              "text"
            ]
          }
        ]
      },
      "description": "text",
      "descriptionSummary": "text",
      "devDescription": "text",
      "devTitle": "text",
      "evidence": {
        "edges": [
          {
            "confidence": 1,
            "explanation": "text",
            "properties": {
              "ANY_ADDITIONAL_PROPERTY": "anything"
            },
            "sourceId": "text",
            "targetId": "text",
            "type": "ABOUT"
          }
        ],
        "nodes": []
      },
      "exploitHypothesis": {
        "edges": [
          {
            "confidence": 1,
            "explanation": "text",
            "properties": {
              "ANY_ADDITIONAL_PROPERTY": "anything"
            },
            "sourceId": "text",
            "targetId": "text",
            "type": "ABOUT"
          }
        ],
        "nodes": []
      },
      "exploitability": {
        "attackComplexity": {
          "description": "text",
          "exploitChainRequired": {
            "description": "text",
            "label": "HIGH",
            "title": "text"
          },
          "label": "HIGH",
          "payloadDifficulty": {
            "description": "text",
            "label": "EASY"
          }
        },
        "attackRequirements": {
          "description": "text",
          "environmentState": {
            "description": "text",
            "label": "HIGH",
            "title": "text"
          },
          "label": "HIGH",
          "mitm": {
            "description": "text",
            "label": "HIGH",
            "title": "text"
          },
          "raceCondition": {
            "description": "text",
            "label": "HIGH",
            "title": "text"
          },
          "timeWindow": {
            "description": "text",
            "label": "HIGH",
            "title": "text"
          },
          "title": "text"
        },
        "attackVector": {
          "description": "text",
          "label": "ADJACENT",
          "subVectors": [
            {
              "description": "text",
              "otherVector": "text",
              "vector": "ADJACENT_ARP_SPOOFING"
            }
          ]
        },
        "confidence": "HIGH",
        "description": "text",
        "label": "LIKELY",
        "privilegesRequired": {
          "description": "text",
          "label": "HIGH",
          "title": "text",
          "types": [
            "PRIVILEGED_USER"
          ]
        },
        "title": "text",
        "unknowns": [
          "text"
        ],
        "userInteraction": {
          "description": "text",
          "label": "ACTIVE",
          "otherTypes": [
            "text"
          ],
          "title": "text",
          "types": [
            "BROWSING"
          ]
        }
      },
      "failedTriage": true,
      "fixEffort": {
        "confidence": "HIGH",
        "description": "text",
        "label": "EASY",
        "title": "text",
        "unknowns": [
          "text"
        ]
      },
      "id": "text",
      "impact": {
        "availability": {
          "cause": [
            "BUFFER_OVERFLOW"
          ],
          "description": "text",
          "label": "HIGH",
          "title": "text",
          "type": [
            "COMPLETE_SERVICE_OUTAGE"
          ]
        },
        "businessCriticality": {
          "description": "text",
          "label": "HIGH",
          "title": "text"
        },
        "confidence": "HIGH",
        "confidentiality": {
          "dataLeaked": [
            "ACCESS_TOKEN"
          ],
          "label": "HIGH"
        },
        "description": "text",
        "integrity": {
          "description": "text",
          "label": "HIGH",
          "title": "text",
          "type": [
            "DATABASE_ALTERED"
          ]
        },
        "label": "CRITICAL",
        "title": "text",
        "unknowns": [
          "text"
        ]
      },
      "investigationConfidence": "HIGH",
      "investigationId": "text",
      "investigationUnknowns": [
        "text"
      ],
      "lastTriagedAt": "2026-01-01T00:00:00.000Z",
      "memoriesGenerated": [
        "text"
      ],
      "memoriesUsed": [
        "text"
      ],
      "parentTriageId": "text",
      "pentest": {
        "attemptedCVEs": [
          "text"
        ],
        "browserEvidence": {
          "citation": "text",
          "family": "text",
          "reason": "text",
          "screenshotRefs": [
            "text"
          ],
          "verdict": "text"
        },
        "confidence": 1,
        "cost": 1,
        "duration": 1,
        "exploitedCVE": "text",
        "logs": [
          {
            "logs": [],
            "summary": "text"
          }
        ],
        "mutationDisclosure": {
          "writes": [
            {
              "method": "text",
              "outcome": "text",
              "statusCode": 1,
              "url": "text"
            }
          ],
          "writesAttempted": true
        },
        "outcome": "CANNOT_DETERMINE",
        "report": "text",
        "reproductionScript": "text",
        "sourceAvailability": {
          "apiSchema": true,
          "checkout": true,
          "codeSnippets": true
        },
        "testedEndpoints": [
          {
            "method": "text",
            "path": "text"
          }
        ],
        "validatedBy": {
          "engine": "FINDING_EXPLOIT_VALIDATION",
          "recordedAt": "2026-01-01T00:00:00.000Z",
          "runId": "text"
        }
      },
      "priority": "FALSE_POSITIVE",
      "references": [
        {
          "documentId": "text",
          "endLine": 1,
          "fileName": "text",
          "nodeId": "text",
          "page": 1,
          "quote": "text",
          "score": 1,
          "startLine": 1,
          "title": "text"
        }
      ],
      "retriageComparison": {
        "narrative": "text",
        "newInformation": {
          "cloudContextUpdated": true,
          "memoryChanges": [
            {
              "description": "text",
              "kind": "ADDED"
            }
          ],
          "pentestResultAdded": true,
          "userComments": [
            {
              "commentId": "text",
              "influence": "changed_verdict",
              "keyClaim": "text"
            }
          ]
        },
        "qualityAssessment": {
          "remainingUncertainties": [
            "text"
          ],
          "sufficientEvidence": true
        },
        "verdictChanges": [
          {
            "current": "text",
            "field": "text",
            "previous": "text",
            "reason": "text"
          }
        ]
      },
      "retriageMetadata": {
        "memoryChanges": [
          {
            "memoryChangeType": "MEMORY_ADDED",
            "memoryId": "text"
          }
        ],
        "triggeredAt": "2026-01-01T00:00:00.000Z"
      },
      "retriageStatus": "NOT_RETRIAGED",
      "severity": {
        "confidence": "HIGH",
        "label": "CRITICAL",
        "score": 1,
        "unknowns": [
          "text"
        ]
      },
      "stopReason": "cost_cap",
      "thoughts": "text",
      "title": "text",
      "version": 1
    },
    "triagedCommitSha": "text",
    "validationResult": {
      "evidence": "text",
      "permissions": "text",
      "result": "INVALID"
    }
  },
  "version": "text",
  "vulnManagementFrameworks": {
    "results": [
      {
        "controls": [
          {
            "confidence": "exact",
            "id": "text",
            "level": "text",
            "relationship": "text",
            "title": "text",
            "url": "text"
          }
        ],
        "framework": "cvss-3.1",
        "mappingConfidence": "exact",
        "notes": [
          "text"
        ],
        "rank": "text",
        "score": {
          "baseScore": 1,
          "nomenclature": "text",
          "qualitative": "text",
          "synthesized": true,
          "vector": "text"
        },
        "version": "text"
      }
    ]
  }
}

Sensitive data:

Get Triaged Sensitive Data Finding

get

Returns the triage data for a specific sensitive data finding

Path parameters
findingIdstringRequired
Query parameters
azureOrganizationIdstringOptional

The Azure organization ID

bitbucketWorkspaceIdstringOptional

The Bitbucket workspace ID

githubOwnerIdinteger · int64Optional

The Github owner ID

gitlabGroupIdinteger · int64Optional

The GitLab group ID

installationIdstringOptional

The Nullify installation ID

azureRepositoryIdstring[]Optional

Filter by Azure repository IDs

githubRepositoryIdinteger · int64[]Optional

Filter by GitHub repository IDs

githubTeamIdinteger · int64Optional

Filter by GitHub team ID

bitbucketRepositoryIdstring[]Optional

Filter by Bitbucket repository IDs

Responses
200

OK

application/json
versionstringOptional
get/secrets/sensitivedata/findings/{findingId}/triage
GET /secrets/sensitivedata/findings/{findingId}/triage HTTP/1.1
Host: api.<TENANT>.nullify.ai
Accept: */*
{
  "finding": {
    "agentVersion": "text",
    "assessmentFactors": [
      {
        "description": "text",
        "title": "text"
      }
    ],
    "codeContext": {
      "codeBlocks": [
        {
          "codeText": "text",
          "endLine": 1,
          "filePath": "text",
          "startLine": 1
        }
      ],
      "dataFlow": "text",
      "error": "text",
      "exitReason": "text",
      "summary": "text",
      "thoughts": "text"
    },
    "falsePositiveReason": "text",
    "finding": {
      "aiTitle": "text",
      "archivedAt": "2026-01-01T00:00:00.000Z",
      "archivedTraceId": "text",
      "author": "text",
      "branch": "text",
      "budgetExhausted": true,
      "commit": "text",
      "createdAt": "text",
      "deletedAt": "2026-01-01T00:00:00.000Z",
      "deletedTraceId": "text",
      "failedTriage": true,
      "falsePositiveReason": "text",
      "fields": [
        {
          "dataType": "text",
          "endColumn": 1,
          "endLine": 1,
          "ruleId": "text",
          "scanner": "text",
          "startColumn": 1,
          "startLine": 1
        }
      ],
      "fileOwners": [
        {
          "name": "text",
          "type": "email"
        }
      ],
      "filePath": "text",
      "id": "text",
      "installationId": "text",
      "isAllowlisted": true,
      "isArchived": true,
      "isDefaultBranch": true,
      "isDeleted": true,
      "isDuplicate": true,
      "isFalsePositive": true,
      "isResolved": true,
      "isTriaged": true,
      "owner": "text",
      "ownerType": "text",
      "platform": "text",
      "priorityLabel": "URGENT",
      "priorityLabelReason": "text",
      "priorityOverride": "URGENT",
      "priorityScore": 1,
      "projectId": "text",
      "projectName": "text",
      "repositoryId": "text",
      "repositoryName": "text",
      "resolvedAt": "2026-01-01T00:00:00.000Z",
      "scannedCommitSha": "text",
      "secretValue": "text",
      "tenantId": "text",
      "ticket": {
        "asana": {
          "projectGid": "text",
          "taskGid": "text",
          "url": "text"
        },
        "azure": {
          "url": "text",
          "workItemId": 1
        },
        "github": {
          "issueId": 1,
          "nodeId": "text",
          "number": 1,
          "repositoryName": "text",
          "url": "text"
        },
        "gitlab": {},
        "jira": {
          "issueId": "text",
          "issueKey": "text",
          "url": "text"
        },
        "linear": {
          "issueId": "text",
          "teamId": "text",
          "url": "text"
        },
        "providerId": "DX"
      },
      "timestampUnix": 1,
      "triageAgentVersion": "text",
      "triageDurationSeconds": 1,
      "triageEnd": "2026-01-01T00:00:00.000Z",
      "triageLlmCostUsd": 1,
      "triageStart": "2026-01-01T00:00:00.000Z",
      "triageStopReason": "text",
      "triageTokenCount": 1,
      "updatedAt": "text",
      "userId": "text",
      "userNotes": "text"
    },
    "fixStoryPointEstimate": 1,
    "investigationSteps": [
      {
        "details": [
          "text"
        ],
        "title": "text"
      }
    ],
    "isFalsePositive": true,
    "orgContextVersion": "text",
    "priority": {
      "description": "text",
      "exploitability": {
        "description": "text",
        "label": "HIGH"
      },
      "impact": {
        "description": "text",
        "label": "HIGH"
      },
      "label": "IMPORTANT",
      "score": 1
    },
    "repoContextVersion": "text",
    "triage": {
      "budgetExhausted": true,
      "campaignMetadata": {
        "id": "text",
        "name": "text"
      },
      "cloudContext": {
        "confidence": 1,
        "mode": "MODEA",
        "ownershipBasis": "declared",
        "repos": [
          "text"
        ],
        "thoughts": "text"
      },
      "complianceImpact": {
        "citations": [
          {
            "documentId": "text",
            "endLine": 1,
            "fileName": "text",
            "nodeId": "text",
            "page": 1,
            "quote": "text",
            "score": 1,
            "startLine": 1,
            "title": "text"
          }
        ],
        "confidence": "HIGH",
        "frameworks": [
          {
            "clause": "text",
            "framework": "CCPA",
            "obligation": "text"
          }
        ],
        "rationale": "text"
      },
      "customerQuestions": {
        "customMessage": "text",
        "generatedMemoryIds": [
          "text"
        ],
        "id": "text",
        "questions": [
          {
            "answer": null,
            "answerMemoryId": "text",
            "answeredAt": "2026-01-01T00:00:00.000Z",
            "customMessage": "text",
            "findingIds": [
              "text"
            ],
            "id": "text",
            "options": [
              {
                "id": "text",
                "label": "text",
                "value": "text"
              }
            ],
            "questionText": "text",
            "questionType": "FREE_TEXT",
            "relatedMemoryIds": [
              "text"
            ],
            "scope": "CLOUD",
            "scopeResourceId": "text",
            "unknownIds": [
              "text"
            ]
          }
        ]
      },
      "description": "text",
      "descriptionSummary": "text",
      "devDescription": "text",
      "devTitle": "text",
      "evidence": {
        "edges": [
          {
            "confidence": 1,
            "explanation": "text",
            "properties": {
              "ANY_ADDITIONAL_PROPERTY": "anything"
            },
            "sourceId": "text",
            "targetId": "text",
            "type": "ABOUT"
          }
        ],
        "nodes": []
      },
      "exploitHypothesis": {
        "edges": [
          {
            "confidence": 1,
            "explanation": "text",
            "properties": {
              "ANY_ADDITIONAL_PROPERTY": "anything"
            },
            "sourceId": "text",
            "targetId": "text",
            "type": "ABOUT"
          }
        ],
        "nodes": []
      },
      "exploitability": {
        "attackComplexity": {
          "description": "text",
          "exploitChainRequired": {
            "description": "text",
            "label": "HIGH",
            "title": "text"
          },
          "label": "HIGH",
          "payloadDifficulty": {
            "description": "text",
            "label": "EASY"
          }
        },
        "attackRequirements": {
          "description": "text",
          "environmentState": {
            "description": "text",
            "label": "HIGH",
            "title": "text"
          },
          "label": "HIGH",
          "mitm": {
            "description": "text",
            "label": "HIGH",
            "title": "text"
          },
          "raceCondition": {
            "description": "text",
            "label": "HIGH",
            "title": "text"
          },
          "timeWindow": {
            "description": "text",
            "label": "HIGH",
            "title": "text"
          },
          "title": "text"
        },
        "attackVector": {
          "description": "text",
          "label": "ADJACENT",
          "subVectors": [
            {
              "description": "text",
              "otherVector": "text",
              "vector": "ADJACENT_ARP_SPOOFING"
            }
          ]
        },
        "confidence": "HIGH",
        "description": "text",
        "label": "LIKELY",
        "privilegesRequired": {
          "description": "text",
          "label": "HIGH",
          "title": "text",
          "types": [
            "PRIVILEGED_USER"
          ]
        },
        "title": "text",
        "unknowns": [
          "text"
        ],
        "userInteraction": {
          "description": "text",
          "label": "ACTIVE",
          "otherTypes": [
            "text"
          ],
          "title": "text",
          "types": [
            "BROWSING"
          ]
        }
      },
      "failedTriage": true,
      "fixEffort": {
        "confidence": "HIGH",
        "description": "text",
        "label": "EASY",
        "title": "text",
        "unknowns": [
          "text"
        ]
      },
      "id": "text",
      "impact": {
        "availability": {
          "cause": [
            "BUFFER_OVERFLOW"
          ],
          "description": "text",
          "label": "HIGH",
          "title": "text",
          "type": [
            "COMPLETE_SERVICE_OUTAGE"
          ]
        },
        "businessCriticality": {
          "description": "text",
          "label": "HIGH",
          "title": "text"
        },
        "confidence": "HIGH",
        "confidentiality": {
          "dataLeaked": [
            "ACCESS_TOKEN"
          ],
          "label": "HIGH"
        },
        "description": "text",
        "integrity": {
          "description": "text",
          "label": "HIGH",
          "title": "text",
          "type": [
            "DATABASE_ALTERED"
          ]
        },
        "label": "CRITICAL",
        "title": "text",
        "unknowns": [
          "text"
        ]
      },
      "investigationConfidence": "HIGH",
      "investigationId": "text",
      "investigationUnknowns": [
        "text"
      ],
      "lastTriagedAt": "2026-01-01T00:00:00.000Z",
      "memoriesGenerated": [
        "text"
      ],
      "memoriesUsed": [
        "text"
      ],
      "parentTriageId": "text",
      "pentest": {
        "attemptedCVEs": [
          "text"
        ],
        "browserEvidence": {
          "citation": "text",
          "family": "text",
          "reason": "text",
          "screenshotRefs": [
            "text"
          ],
          "verdict": "text"
        },
        "confidence": 1,
        "cost": 1,
        "duration": 1,
        "exploitedCVE": "text",
        "logs": [
          {
            "logs": [],
            "summary": "text"
          }
        ],
        "mutationDisclosure": {
          "writes": [
            {
              "method": "text",
              "outcome": "text",
              "statusCode": 1,
              "url": "text"
            }
          ],
          "writesAttempted": true
        },
        "outcome": "CANNOT_DETERMINE",
        "report": "text",
        "reproductionScript": "text",
        "sourceAvailability": {
          "apiSchema": true,
          "checkout": true,
          "codeSnippets": true
        },
        "testedEndpoints": [
          {
            "method": "text",
            "path": "text"
          }
        ],
        "validatedBy": {
          "engine": "FINDING_EXPLOIT_VALIDATION",
          "recordedAt": "2026-01-01T00:00:00.000Z",
          "runId": "text"
        }
      },
      "priority": "FALSE_POSITIVE",
      "references": [
        {
          "documentId": "text",
          "endLine": 1,
          "fileName": "text",
          "nodeId": "text",
          "page": 1,
          "quote": "text",
          "score": 1,
          "startLine": 1,
          "title": "text"
        }
      ],
      "retriageComparison": {
        "narrative": "text",
        "newInformation": {
          "cloudContextUpdated": true,
          "memoryChanges": [
            {
              "description": "text",
              "kind": "ADDED"
            }
          ],
          "pentestResultAdded": true,
          "userComments": [
            {
              "commentId": "text",
              "influence": "changed_verdict",
              "keyClaim": "text"
            }
          ]
        },
        "qualityAssessment": {
          "remainingUncertainties": [
            "text"
          ],
          "sufficientEvidence": true
        },
        "verdictChanges": [
          {
            "current": "text",
            "field": "text",
            "previous": "text",
            "reason": "text"
          }
        ]
      },
      "retriageMetadata": {
        "memoryChanges": [
          {
            "memoryChangeType": "MEMORY_ADDED",
            "memoryId": "text"
          }
        ],
        "triggeredAt": "2026-01-01T00:00:00.000Z"
      },
      "retriageStatus": "NOT_RETRIAGED",
      "severity": {
        "confidence": "HIGH",
        "label": "CRITICAL",
        "score": 1,
        "unknowns": [
          "text"
        ]
      },
      "stopReason": "cost_cap",
      "thoughts": "text",
      "title": "text",
      "version": 1
    },
    "triagedCommitSha": "text"
  },
  "version": "text",
  "vulnManagementFrameworks": {
    "results": [
      {
        "controls": [
          {
            "confidence": "exact",
            "id": "text",
            "level": "text",
            "relationship": "text",
            "title": "text",
            "url": "text"
          }
        ],
        "framework": "cvss-3.1",
        "mappingConfidence": "exact",
        "notes": [
          "text"
        ],
        "rank": "text",
        "score": {
          "baseScore": 1,
          "nomenclature": "text",
          "qualitative": "text",
          "synthesized": true,
          "vector": "text"
        },
        "version": "text"
      }
    ]
  }
}

Returns up to three candidate people for routing the finding, based on git blame for the finding location and repository contributions, each with a reason.

Credentials:

Get Credential Finding Related Users

get

Get users related to a credential finding based on git blame and repository contributions.

Path parameters
findingIdstringRequired
Query parameters
azureOrganizationIdstringOptional

The Azure organization ID

bitbucketWorkspaceIdstringOptional

The Bitbucket workspace ID

githubOwnerIdinteger · int64Optional

The Github owner ID

gitlabGroupIdinteger · int64Optional

The GitLab group ID

installationIdstringOptional

The Nullify installation ID

azureRepositoryIdstring[]Optional

Filter by Azure repository IDs

githubRepositoryIdinteger · int64[]Optional

Filter by GitHub repository IDs

githubTeamIdinteger · int64Optional

Filter by GitHub team ID

bitbucketRepositoryIdstring[]Optional

Filter by Bitbucket repository IDs

Responses
200

OK

application/json
versionstringOptional
get/secrets/credentials/findings/{findingId}/users
GET /secrets/credentials/findings/{findingId}/users HTTP/1.1
Host: api.<TENANT>.nullify.ai
Accept: */*
{
  "users": [
    {
      "reason": "text",
      "user": {
        "asana": {
          "id": "text"
        },
        "azure": {
          "id": "text"
        },
        "azureEntra": {
          "id": "text"
        },
        "bitbucket": {
          "id": "text"
        },
        "createdAt": "text",
        "createdBy": "text",
        "deleted": true,
        "displayName": "text",
        "email": "text",
        "github": {
          "id": 1,
          "nodeId": "text"
        },
        "gitlab": {
          "id": 1
        },
        "googleWorkspace": {
          "id": "text"
        },
        "id": "text",
        "isBot": true,
        "isRestricted": true,
        "jira": {
          "id": "text",
          "name": "text"
        },
        "lastUpdatedBy": "text",
        "linear": {
          "id": "text"
        },
        "name": "text",
        "okta": {
          "id": "text"
        },
        "provider": {
          "asana": {
            "id": "text"
          },
          "azure": {
            "id": "text"
          },
          "azureEntra": {
            "id": "text"
          },
          "bitBucket": {
            "id": "text"
          },
          "gitHub": {
            "id": 1,
            "nodeId": "text"
          },
          "gitlab": {
            "id": 1
          },
          "googleWorkspace": {
            "id": "text"
          },
          "id": "DX",
          "jira": {
            "id": "text",
            "name": "text"
          },
          "linear": {
            "id": "text"
          },
          "okta": {
            "id": "text"
          },
          "slack": {
            "id": "text",
            "name": "text"
          },
          "teams": {
            "id": "text",
            "teamIDs": [
              "text"
            ]
          }
        },
        "realName": "text",
        "slack": {
          "id": "text",
          "name": "text"
        },
        "slug": "text",
        "teams": {
          "id": "text",
          "teamIDs": [
            "text"
          ]
        },
        "updatedAt": "text",
        "username": "text"
      }
    }
  ],
  "version": "text"
}

Legacy alias:

Get Credential Finding Related Users

get

Get users related to a credential finding based on git blame and repository contributions.

Path parameters
findingIdstringRequired
Query parameters
azureOrganizationIdstringOptional

The Azure organization ID

bitbucketWorkspaceIdstringOptional

The Bitbucket workspace ID

githubOwnerIdinteger · int64Optional

The Github owner ID

gitlabGroupIdinteger · int64Optional

The GitLab group ID

installationIdstringOptional

The Nullify installation ID

azureRepositoryIdstring[]Optional

Filter by Azure repository IDs

githubRepositoryIdinteger · int64[]Optional

Filter by GitHub repository IDs

githubTeamIdinteger · int64Optional

Filter by GitHub team ID

bitbucketRepositoryIdstring[]Optional

Filter by Bitbucket repository IDs

Responses
200

OK

application/json
versionstringOptional
get/secrets/findings/{findingId}/users
GET /secrets/findings/{findingId}/users HTTP/1.1
Host: api.<TENANT>.nullify.ai
Accept: */*
{
  "users": [
    {
      "reason": "text",
      "user": {
        "asana": {
          "id": "text"
        },
        "azure": {
          "id": "text"
        },
        "azureEntra": {
          "id": "text"
        },
        "bitbucket": {
          "id": "text"
        },
        "createdAt": "text",
        "createdBy": "text",
        "deleted": true,
        "displayName": "text",
        "email": "text",
        "github": {
          "id": 1,
          "nodeId": "text"
        },
        "gitlab": {
          "id": 1
        },
        "googleWorkspace": {
          "id": "text"
        },
        "id": "text",
        "isBot": true,
        "isRestricted": true,
        "jira": {
          "id": "text",
          "name": "text"
        },
        "lastUpdatedBy": "text",
        "linear": {
          "id": "text"
        },
        "name": "text",
        "okta": {
          "id": "text"
        },
        "provider": {
          "asana": {
            "id": "text"
          },
          "azure": {
            "id": "text"
          },
          "azureEntra": {
            "id": "text"
          },
          "bitBucket": {
            "id": "text"
          },
          "gitHub": {
            "id": 1,
            "nodeId": "text"
          },
          "gitlab": {
            "id": 1
          },
          "googleWorkspace": {
            "id": "text"
          },
          "id": "DX",
          "jira": {
            "id": "text",
            "name": "text"
          },
          "linear": {
            "id": "text"
          },
          "okta": {
            "id": "text"
          },
          "slack": {
            "id": "text",
            "name": "text"
          },
          "teams": {
            "id": "text",
            "teamIDs": [
              "text"
            ]
          }
        },
        "realName": "text",
        "slack": {
          "id": "text",
          "name": "text"
        },
        "slug": "text",
        "teams": {
          "id": "text",
          "teamIDs": [
            "text"
          ]
        },
        "updatedAt": "text",
        "username": "text"
      }
    }
  ],
  "version": "text"
}

Sensitive data:

Get Sensitive Data Finding Related Users

get

Get users related to a sensitive data (PII) finding based on git blame and repository contributions.

Path parameters
findingIdstringRequired
Query parameters
azureOrganizationIdstringOptional

The Azure organization ID

bitbucketWorkspaceIdstringOptional

The Bitbucket workspace ID

githubOwnerIdinteger · int64Optional

The Github owner ID

gitlabGroupIdinteger · int64Optional

The GitLab group ID

installationIdstringOptional

The Nullify installation ID

azureRepositoryIdstring[]Optional

Filter by Azure repository IDs

githubRepositoryIdinteger · int64[]Optional

Filter by GitHub repository IDs

githubTeamIdinteger · int64Optional

Filter by GitHub team ID

bitbucketRepositoryIdstring[]Optional

Filter by Bitbucket repository IDs

Responses
200

OK

application/json
versionstringOptional
get/secrets/sensitivedata/findings/{findingId}/users
GET /secrets/sensitivedata/findings/{findingId}/users HTTP/1.1
Host: api.<TENANT>.nullify.ai
Accept: */*
{
  "users": [
    {
      "reason": "text",
      "user": {
        "asana": {
          "id": "text"
        },
        "azure": {
          "id": "text"
        },
        "azureEntra": {
          "id": "text"
        },
        "bitbucket": {
          "id": "text"
        },
        "createdAt": "text",
        "createdBy": "text",
        "deleted": true,
        "displayName": "text",
        "email": "text",
        "github": {
          "id": 1,
          "nodeId": "text"
        },
        "gitlab": {
          "id": 1
        },
        "googleWorkspace": {
          "id": "text"
        },
        "id": "text",
        "isBot": true,
        "isRestricted": true,
        "jira": {
          "id": "text",
          "name": "text"
        },
        "lastUpdatedBy": "text",
        "linear": {
          "id": "text"
        },
        "name": "text",
        "okta": {
          "id": "text"
        },
        "provider": {
          "asana": {
            "id": "text"
          },
          "azure": {
            "id": "text"
          },
          "azureEntra": {
            "id": "text"
          },
          "bitBucket": {
            "id": "text"
          },
          "gitHub": {
            "id": 1,
            "nodeId": "text"
          },
          "gitlab": {
            "id": 1
          },
          "googleWorkspace": {
            "id": "text"
          },
          "id": "DX",
          "jira": {
            "id": "text",
            "name": "text"
          },
          "linear": {
            "id": "text"
          },
          "okta": {
            "id": "text"
          },
          "slack": {
            "id": "text",
            "name": "text"
          },
          "teams": {
            "id": "text",
            "teamIDs": [
              "text"
            ]
          }
        },
        "realName": "text",
        "slack": {
          "id": "text",
          "name": "text"
        },
        "slug": "text",
        "teams": {
          "id": "text",
          "teamIDs": [
            "text"
          ]
        },
        "updatedAt": "text",
        "username": "text"
      }
    }
  ],
  "version": "text"
}

List finding events

Retrieve the decision history for a credential finding. Use the credentials path; the legacy path remains as an alias. Sensitive-data findings do not expose this resource. The response is not paginated.

Credentials:

Get Finding Events

get

Returns a list of events for a given finding.

Path parameters
findingIdstringRequired
Query parameters
nextTokenstring · nullableOptional
azureOrganizationIdstringOptional

The Azure organization ID

bitbucketWorkspaceIdstringOptional

The Bitbucket workspace ID

githubOwnerIdinteger · int64Optional

The Github owner ID

gitlabGroupIdinteger · int64Optional

The GitLab group ID

installationIdstringOptional

The Nullify installation ID

azureRepositoryIdstring[]Optional

Filter by Azure repository IDs

githubRepositoryIdinteger · int64[]Optional

Filter by GitHub repository IDs

githubTeamIdinteger · int64Optional

Filter by GitHub team ID

bitbucketRepositoryIdstring[]Optional

Filter by Bitbucket repository IDs

Responses
200

OK

application/json
nextTokenstringOptional
numItemsintegerRequired
versionstringOptional
get/secrets/credentials/findings/{findingId}/events
GET /secrets/credentials/findings/{findingId}/events HTTP/1.1
Host: api.<TENANT>.nullify.ai
Accept: */*
{
  "events": [
    {
      "data": null,
      "id": "text",
      "time": "text",
      "timestampUnix": 1,
      "type": "org_context_agent_started"
    }
  ],
  "nextToken": "text",
  "numItems": 1,
  "version": "text"
}

Legacy alias:

Get Finding Events

get

Returns a list of events for a given finding.

Path parameters
findingIdstringRequired
Query parameters
nextTokenstring · nullableOptional
azureOrganizationIdstringOptional

The Azure organization ID

bitbucketWorkspaceIdstringOptional

The Bitbucket workspace ID

githubOwnerIdinteger · int64Optional

The Github owner ID

gitlabGroupIdinteger · int64Optional

The GitLab group ID

installationIdstringOptional

The Nullify installation ID

azureRepositoryIdstring[]Optional

Filter by Azure repository IDs

githubRepositoryIdinteger · int64[]Optional

Filter by GitHub repository IDs

githubTeamIdinteger · int64Optional

Filter by GitHub team ID

bitbucketRepositoryIdstring[]Optional

Filter by Bitbucket repository IDs

Responses
200

OK

application/json
nextTokenstringOptional
numItemsintegerRequired
versionstringOptional
get/secrets/findings/{findingId}/events
GET /secrets/findings/{findingId}/events HTTP/1.1
Host: api.<TENANT>.nullify.ai
Accept: */*
{
  "events": [
    {
      "data": null,
      "id": "text",
      "time": "text",
      "timestampUnix": 1,
      "type": "org_context_agent_started"
    }
  ],
  "nextToken": "text",
  "numItems": 1,
  "version": "text"
}

Allowlisting

Allowlist a finding

Suppress an individual finding with an audit trail. Supply an allowlistReason and an allowlistType (AI, UserFixed, UserAssumeRisk, UserFalsePositive, or UserOther). The finding is marked resolved, an allowlist event is recorded, and an open ticket is closed on a best-effort basis; a ticket-close failure does not fail the call. Success returns 204.

Credentials:

Allowlist Credential Finding

post

Allowlist a credential secret

Path parameters
findingIdstringRequired
Query parameters
azureOrganizationIdstringOptional

The Azure organization ID

bitbucketWorkspaceIdstringOptional

The Bitbucket workspace ID

githubOwnerIdinteger · int64Optional

The Github owner ID

gitlabGroupIdinteger · int64Optional

The GitLab group ID

installationIdstringOptional

The Nullify installation ID

azureRepositoryIdstring[]Optional

Filter by Azure repository IDs

githubRepositoryIdinteger · int64[]Optional

Filter by GitHub repository IDs

githubTeamIdinteger · int64Optional

Filter by GitHub team ID

bitbucketRepositoryIdstring[]Optional

Filter by Bitbucket repository IDs

Body
allowlistReasonstringRequired

The reason for allowlisting the finding

allowlistTypestring · enumRequiredPossible values:
Responses
204

No Content

No content

post/secrets/credentials/findings/{findingId}/allowlist
POST /secrets/credentials/findings/{findingId}/allowlist HTTP/1.1
Host: api.<TENANT>.nullify.ai
Content-Type: application/json
Accept: */*
Content-Length: 47

{
  "allowlistReason": "text",
  "allowlistType": "AI"
}

No content

Legacy alias:

Allowlist Credential Finding

post

Allowlist a credential secret

Path parameters
findingIdstringRequired
Query parameters
azureOrganizationIdstringOptional

The Azure organization ID

bitbucketWorkspaceIdstringOptional

The Bitbucket workspace ID

githubOwnerIdinteger · int64Optional

The Github owner ID

gitlabGroupIdinteger · int64Optional

The GitLab group ID

installationIdstringOptional

The Nullify installation ID

azureRepositoryIdstring[]Optional

Filter by Azure repository IDs

githubRepositoryIdinteger · int64[]Optional

Filter by GitHub repository IDs

githubTeamIdinteger · int64Optional

Filter by GitHub team ID

bitbucketRepositoryIdstring[]Optional

Filter by Bitbucket repository IDs

Body
allowlistReasonstringRequired

The reason for allowlisting the finding

allowlistTypestring · enumRequiredPossible values:
Responses
204

No Content

No content

post/secrets/findings/{findingId}/allowlist
POST /secrets/findings/{findingId}/allowlist HTTP/1.1
Host: api.<TENANT>.nullify.ai
Content-Type: application/json
Accept: */*
Content-Length: 47

{
  "allowlistReason": "text",
  "allowlistType": "AI"
}

No content

Sensitive data:

Allowlist Sensitive Data Finding

post

Allowlist a sensitive data (PII) finding

Path parameters
findingIdstringRequired
Query parameters
azureOrganizationIdstringOptional

The Azure organization ID

bitbucketWorkspaceIdstringOptional

The Bitbucket workspace ID

githubOwnerIdinteger · int64Optional

The Github owner ID

gitlabGroupIdinteger · int64Optional

The GitLab group ID

installationIdstringOptional

The Nullify installation ID

azureRepositoryIdstring[]Optional

Filter by Azure repository IDs

githubRepositoryIdinteger · int64[]Optional

Filter by GitHub repository IDs

githubTeamIdinteger · int64Optional

Filter by GitHub team ID

bitbucketRepositoryIdstring[]Optional

Filter by Bitbucket repository IDs

Body
allowlistReasonstringRequired

The reason for allowlisting the finding

allowlistTypestring · enumRequiredPossible values:
Responses
204

No Content

No content

post/secrets/sensitivedata/findings/{findingId}/allowlist
POST /secrets/sensitivedata/findings/{findingId}/allowlist HTTP/1.1
Host: api.<TENANT>.nullify.ai
Content-Type: application/json
Accept: */*
Content-Length: 47

{
  "allowlistReason": "text",
  "allowlistType": "AI"
}

No content

Allowlist findings in bulk

Allowlist multiple findings in a single call. The body adds a findingIds array alongside allowlistReason and allowlistType; an empty array returns 400. Findings are processed concurrently and the call is not atomic: an unknown ID returns 404 but findings already processed stay allowlisted. For credentials, the bulk call records the allowlist type but does not store allowlistReason on the finding, so use the single-finding call when you need the reason kept. Success returns 204.

Credentials:

Allowlist Batch of Credential Findings

post

Allowlist a list of credential findings, by findingsID

Query parameters
azureOrganizationIdstringOptional

The Azure organization ID

bitbucketWorkspaceIdstringOptional

The Bitbucket workspace ID

githubOwnerIdinteger · int64Optional

The Github owner ID

gitlabGroupIdinteger · int64Optional

The GitLab group ID

installationIdstringOptional

The Nullify installation ID

azureRepositoryIdstring[]Optional

Filter by Azure repository IDs

githubRepositoryIdinteger · int64[]Optional

Filter by GitHub repository IDs

githubTeamIdinteger · int64Optional

Filter by GitHub team ID

bitbucketRepositoryIdstring[]Optional

Filter by Bitbucket repository IDs

Body
allowlistReasonstringRequired

The reason for allowing the finding

allowlistTypestring · enumRequiredPossible values:
findingIdsstring[] · nullableRequired

The ID of the finding to allowlist

Responses
204

No Content

No content

post/secrets/credentials/findings/allowlist/batch
POST /secrets/credentials/findings/allowlist/batch HTTP/1.1
Host: api.<TENANT>.nullify.ai
Content-Type: application/json
Accept: */*
Content-Length: 69

{
  "allowlistReason": "text",
  "allowlistType": "AI",
  "findingIds": [
    "text"
  ]
}

No content

Legacy alias:

Allowlist Batch of Credential Findings

post

Allowlist a list of credential findings, by findingsID

Query parameters
azureOrganizationIdstringOptional

The Azure organization ID

bitbucketWorkspaceIdstringOptional

The Bitbucket workspace ID

githubOwnerIdinteger · int64Optional

The Github owner ID

gitlabGroupIdinteger · int64Optional

The GitLab group ID

installationIdstringOptional

The Nullify installation ID

azureRepositoryIdstring[]Optional

Filter by Azure repository IDs

githubRepositoryIdinteger · int64[]Optional

Filter by GitHub repository IDs

githubTeamIdinteger · int64Optional

Filter by GitHub team ID

bitbucketRepositoryIdstring[]Optional

Filter by Bitbucket repository IDs

Body
allowlistReasonstringRequired

The reason for allowing the finding

allowlistTypestring · enumRequiredPossible values:
findingIdsstring[] · nullableRequired

The ID of the finding to allowlist

Responses
204

No Content

No content

post/secrets/findings/allowlist/batch
POST /secrets/findings/allowlist/batch HTTP/1.1
Host: api.<TENANT>.nullify.ai
Content-Type: application/json
Accept: */*
Content-Length: 69

{
  "allowlistReason": "text",
  "allowlistType": "AI",
  "findingIds": [
    "text"
  ]
}

No content

Sensitive data:

Allowlist Batch of Sensitive Data Findings

post

Allowlist a list of sensitive data findings, by findingsID

Query parameters
azureOrganizationIdstringOptional

The Azure organization ID

bitbucketWorkspaceIdstringOptional

The Bitbucket workspace ID

githubOwnerIdinteger · int64Optional

The Github owner ID

gitlabGroupIdinteger · int64Optional

The GitLab group ID

installationIdstringOptional

The Nullify installation ID

azureRepositoryIdstring[]Optional

Filter by Azure repository IDs

githubRepositoryIdinteger · int64[]Optional

Filter by GitHub repository IDs

githubTeamIdinteger · int64Optional

Filter by GitHub team ID

bitbucketRepositoryIdstring[]Optional

Filter by Bitbucket repository IDs

Body
allowlistReasonstringRequired

The reason for allowlisting the findings

allowlistTypestring · enumRequiredPossible values:
findingIdsstring[] · nullableRequired

The IDs of the findings to allowlist

Responses
204

No Content

No content

post/secrets/sensitivedata/findings/allowlist/batch
POST /secrets/sensitivedata/findings/allowlist/batch HTTP/1.1
Host: api.<TENANT>.nullify.ai
Content-Type: application/json
Accept: */*
Content-Length: 69

{
  "allowlistReason": "text",
  "allowlistType": "AI",
  "findingIds": [
    "text"
  ]
}

No content

Remove a finding from the allowlist

Reverse an allowlist decision and return the finding to the active backlog. Supply unallowlistReason and unallowlistType. A ticket closed by the allowlist is reopened unless the finding is also archived, a false positive or a duplicate. If the old ticket cannot be reopened a new linked ticket is created. Success returns 204.

Credentials:

Unallowlist Credential Finding

post

Unallowlist a credential secret

Path parameters
findingIdstringRequired
Query parameters
azureOrganizationIdstringOptional

The Azure organization ID

bitbucketWorkspaceIdstringOptional

The Bitbucket workspace ID

githubOwnerIdinteger · int64Optional

The Github owner ID

gitlabGroupIdinteger · int64Optional

The GitLab group ID

installationIdstringOptional

The Nullify installation ID

azureRepositoryIdstring[]Optional

Filter by Azure repository IDs

githubRepositoryIdinteger · int64[]Optional

Filter by GitHub repository IDs

githubTeamIdinteger · int64Optional

Filter by GitHub team ID

bitbucketRepositoryIdstring[]Optional

Filter by Bitbucket repository IDs

Body
unallowlistReasonstringRequired

The reason for unallowlisting the finding

unallowlistTypestring · enumRequiredPossible values:
Responses
204

No Content

No content

post/secrets/credentials/findings/{findingId}/unallowlist
POST /secrets/credentials/findings/{findingId}/unallowlist HTTP/1.1
Host: api.<TENANT>.nullify.ai
Content-Type: application/json
Accept: */*
Content-Length: 51

{
  "unallowlistReason": "text",
  "unallowlistType": "AI"
}

No content

Legacy alias:

Unallowlist Credential Finding

post

Unallowlist a credential secret

Path parameters
findingIdstringRequired
Query parameters
azureOrganizationIdstringOptional

The Azure organization ID

bitbucketWorkspaceIdstringOptional

The Bitbucket workspace ID

githubOwnerIdinteger · int64Optional

The Github owner ID

gitlabGroupIdinteger · int64Optional

The GitLab group ID

installationIdstringOptional

The Nullify installation ID

azureRepositoryIdstring[]Optional

Filter by Azure repository IDs

githubRepositoryIdinteger · int64[]Optional

Filter by GitHub repository IDs

githubTeamIdinteger · int64Optional

Filter by GitHub team ID

bitbucketRepositoryIdstring[]Optional

Filter by Bitbucket repository IDs

Body
unallowlistReasonstringRequired

The reason for unallowlisting the finding

unallowlistTypestring · enumRequiredPossible values:
Responses
204

No Content

No content

post/secrets/findings/{findingId}/unallowlist
POST /secrets/findings/{findingId}/unallowlist HTTP/1.1
Host: api.<TENANT>.nullify.ai
Content-Type: application/json
Accept: */*
Content-Length: 51

{
  "unallowlistReason": "text",
  "unallowlistType": "AI"
}

No content

Sensitive data:

Unallowlist Sensitive Data Finding

post

Unallowlist a sensitive data (PII) finding

Path parameters
findingIdstringRequired
Query parameters
azureOrganizationIdstringOptional

The Azure organization ID

bitbucketWorkspaceIdstringOptional

The Bitbucket workspace ID

githubOwnerIdinteger · int64Optional

The Github owner ID

gitlabGroupIdinteger · int64Optional

The GitLab group ID

installationIdstringOptional

The Nullify installation ID

azureRepositoryIdstring[]Optional

Filter by Azure repository IDs

githubRepositoryIdinteger · int64[]Optional

Filter by GitHub repository IDs

githubTeamIdinteger · int64Optional

Filter by GitHub team ID

bitbucketRepositoryIdstring[]Optional

Filter by Bitbucket repository IDs

Body
unallowlistReasonstringRequired

The reason for unallowlisting the finding

unallowlistTypestring · enumRequiredPossible values:
Responses
204

No Content

No content

post/secrets/sensitivedata/findings/{findingId}/unallowlist
POST /secrets/sensitivedata/findings/{findingId}/unallowlist HTTP/1.1
Host: api.<TENANT>.nullify.ai
Content-Type: application/json
Accept: */*
Content-Length: 51

{
  "unallowlistReason": "text",
  "unallowlistType": "AI"
}

No content

Tickets

Create a ticket

Create a ticket for the finding on the tenant's configured ticket integration. The body is optional and accepts message, assignees, project, campaignId and campaignTitle. A finding that already has a ticket on that provider returns 400. Errors to expect: 501 when no ticket integration is configured, 412 when the integration is disabled, needs reconnecting, or requires an assignee you did not supply, and 503 or 504 when the ticket provider is temporarily unavailable. The response is the created ticket.

Credentials:

Create Ticket for Credential Finding

post

Creates a ticket for a given credential finding on the tenant's configured ticket integration

Path parameters
findingIdstringRequired

The ID of the finding to create a Jira ticket for

Query parameters
azureOrganizationIdstringOptional

The Azure organization ID

bitbucketWorkspaceIdstringOptional

The Bitbucket workspace ID

githubOwnerIdinteger · int64Optional

The Github owner ID

gitlabGroupIdinteger · int64Optional

The GitLab group ID

installationIdstringOptional

The Nullify installation ID

azureRepositoryIdstring[]Optional

Filter by Azure repository IDs

githubRepositoryIdinteger · int64[]Optional

Filter by GitHub repository IDs

githubTeamIdinteger · int64Optional

Filter by GitHub team ID

bitbucketRepositoryIdstring[]Optional

Filter by Bitbucket repository IDs

Body
campaignIdstringOptional
campaignTitlestringOptional
messagestringOptional
projectstringOptional
Responses
200

OK

application/json
versionstringOptional
post/secrets/credentials/findings/{findingId}/ticket
POST /secrets/credentials/findings/{findingId}/ticket HTTP/1.1
Host: api.<TENANT>.nullify.ai
Content-Type: application/json
Accept: */*
Content-Length: 1031

{
  "assignees": [
    {
      "asana": {
        "id": "text"
      },
      "azure": {
        "id": "text"
      },
      "azureEntra": {
        "id": "text"
      },
      "bitbucket": {
        "id": "text"
      },
      "createdAt": "text",
      "createdBy": "text",
      "deleted": true,
      "displayName": "text",
      "email": "text",
      "github": {
        "id": 1,
        "nodeId": "text"
      },
      "gitlab": {
        "id": 1
      },
      "googleWorkspace": {
        "id": "text"
      },
      "id": "text",
      "isBot": true,
      "isRestricted": true,
      "jira": {
        "id": "text",
        "name": "text"
      },
      "lastUpdatedBy": "text",
      "linear": {
        "id": "text"
      },
      "name": "text",
      "okta": {
        "id": "text"
      },
      "provider": {
        "asana": {
          "id": "text"
        },
        "azure": {
          "id": "text"
        },
        "azureEntra": {
          "id": "text"
        },
        "bitBucket": {
          "id": "text"
        },
        "gitHub": {
          "id": 1,
          "nodeId": "text"
        },
        "gitlab": {
          "id": 1
        },
        "googleWorkspace": {
          "id": "text"
        },
        "id": "DX",
        "jira": {
          "id": "text",
          "name": "text"
        },
        "linear": {
          "id": "text"
        },
        "okta": {
          "id": "text"
        },
        "slack": {
          "id": "text",
          "name": "text"
        },
        "teams": {
          "id": "text",
          "teamIDs": [
            "text"
          ]
        }
      },
      "realName": "text",
      "slack": {
        "id": "text",
        "name": "text"
      },
      "slug": "text",
      "teams": {
        "id": "text",
        "teamIDs": [
          "text"
        ]
      },
      "updatedAt": "text",
      "username": "text"
    }
  ],
  "campaignId": "text",
  "campaignTitle": "text",
  "message": "text",
  "project": "text"
}
{
  "ticket": {
    "asana": {
      "projectGid": "text",
      "taskGid": "text",
      "url": "text"
    },
    "azure": {
      "url": "text",
      "workItemId": 1
    },
    "github": {
      "issueId": 1,
      "nodeId": "text",
      "number": 1,
      "repositoryName": "text",
      "url": "text"
    },
    "gitlab": {},
    "jira": {
      "issueId": "text",
      "issueKey": "text",
      "url": "text"
    },
    "linear": {
      "issueId": "text",
      "teamId": "text",
      "url": "text"
    },
    "providerId": "DX"
  },
  "version": "text"
}

Legacy alias:

Create Ticket for Credential Finding

post

Creates a ticket for a given credential finding on the tenant's configured ticket integration

Path parameters
findingIdstringRequired

The ID of the finding to create a Jira ticket for

Query parameters
azureOrganizationIdstringOptional

The Azure organization ID

bitbucketWorkspaceIdstringOptional

The Bitbucket workspace ID

githubOwnerIdinteger · int64Optional

The Github owner ID

gitlabGroupIdinteger · int64Optional

The GitLab group ID

installationIdstringOptional

The Nullify installation ID

azureRepositoryIdstring[]Optional

Filter by Azure repository IDs

githubRepositoryIdinteger · int64[]Optional

Filter by GitHub repository IDs

githubTeamIdinteger · int64Optional

Filter by GitHub team ID

bitbucketRepositoryIdstring[]Optional

Filter by Bitbucket repository IDs

Body
campaignIdstringOptional
campaignTitlestringOptional
messagestringOptional
projectstringOptional
Responses
200

OK

application/json
versionstringOptional
post/secrets/findings/{findingId}/ticket
POST /secrets/findings/{findingId}/ticket HTTP/1.1
Host: api.<TENANT>.nullify.ai
Content-Type: application/json
Accept: */*
Content-Length: 1031

{
  "assignees": [
    {
      "asana": {
        "id": "text"
      },
      "azure": {
        "id": "text"
      },
      "azureEntra": {
        "id": "text"
      },
      "bitbucket": {
        "id": "text"
      },
      "createdAt": "text",
      "createdBy": "text",
      "deleted": true,
      "displayName": "text",
      "email": "text",
      "github": {
        "id": 1,
        "nodeId": "text"
      },
      "gitlab": {
        "id": 1
      },
      "googleWorkspace": {
        "id": "text"
      },
      "id": "text",
      "isBot": true,
      "isRestricted": true,
      "jira": {
        "id": "text",
        "name": "text"
      },
      "lastUpdatedBy": "text",
      "linear": {
        "id": "text"
      },
      "name": "text",
      "okta": {
        "id": "text"
      },
      "provider": {
        "asana": {
          "id": "text"
        },
        "azure": {
          "id": "text"
        },
        "azureEntra": {
          "id": "text"
        },
        "bitBucket": {
          "id": "text"
        },
        "gitHub": {
          "id": 1,
          "nodeId": "text"
        },
        "gitlab": {
          "id": 1
        },
        "googleWorkspace": {
          "id": "text"
        },
        "id": "DX",
        "jira": {
          "id": "text",
          "name": "text"
        },
        "linear": {
          "id": "text"
        },
        "okta": {
          "id": "text"
        },
        "slack": {
          "id": "text",
          "name": "text"
        },
        "teams": {
          "id": "text",
          "teamIDs": [
            "text"
          ]
        }
      },
      "realName": "text",
      "slack": {
        "id": "text",
        "name": "text"
      },
      "slug": "text",
      "teams": {
        "id": "text",
        "teamIDs": [
          "text"
        ]
      },
      "updatedAt": "text",
      "username": "text"
    }
  ],
  "campaignId": "text",
  "campaignTitle": "text",
  "message": "text",
  "project": "text"
}
{
  "ticket": {
    "asana": {
      "projectGid": "text",
      "taskGid": "text",
      "url": "text"
    },
    "azure": {
      "url": "text",
      "workItemId": 1
    },
    "github": {
      "issueId": 1,
      "nodeId": "text",
      "number": 1,
      "repositoryName": "text",
      "url": "text"
    },
    "gitlab": {},
    "jira": {
      "issueId": "text",
      "issueKey": "text",
      "url": "text"
    },
    "linear": {
      "issueId": "text",
      "teamId": "text",
      "url": "text"
    },
    "providerId": "DX"
  },
  "version": "text"
}

Sensitive data:

Create Ticket for Sensitive Data Finding

post

Creates a ticket for a given sensitive data finding on the tenant's configured ticket integration

Path parameters
findingIdstringRequired

The ID of the finding to create a ticket for

Query parameters
azureOrganizationIdstringOptional

The Azure organization ID

bitbucketWorkspaceIdstringOptional

The Bitbucket workspace ID

githubOwnerIdinteger · int64Optional

The Github owner ID

gitlabGroupIdinteger · int64Optional

The GitLab group ID

installationIdstringOptional

The Nullify installation ID

azureRepositoryIdstring[]Optional

Filter by Azure repository IDs

githubRepositoryIdinteger · int64[]Optional

Filter by GitHub repository IDs

githubTeamIdinteger · int64Optional

Filter by GitHub team ID

bitbucketRepositoryIdstring[]Optional

Filter by Bitbucket repository IDs

Body
campaignIdstringOptional
campaignTitlestringOptional
messagestringOptional
projectstringOptional
Responses
200

OK

application/json
versionstringOptional
post/secrets/sensitivedata/findings/{findingId}/ticket
POST /secrets/sensitivedata/findings/{findingId}/ticket HTTP/1.1
Host: api.<TENANT>.nullify.ai
Content-Type: application/json
Accept: */*
Content-Length: 1031

{
  "assignees": [
    {
      "asana": {
        "id": "text"
      },
      "azure": {
        "id": "text"
      },
      "azureEntra": {
        "id": "text"
      },
      "bitbucket": {
        "id": "text"
      },
      "createdAt": "text",
      "createdBy": "text",
      "deleted": true,
      "displayName": "text",
      "email": "text",
      "github": {
        "id": 1,
        "nodeId": "text"
      },
      "gitlab": {
        "id": 1
      },
      "googleWorkspace": {
        "id": "text"
      },
      "id": "text",
      "isBot": true,
      "isRestricted": true,
      "jira": {
        "id": "text",
        "name": "text"
      },
      "lastUpdatedBy": "text",
      "linear": {
        "id": "text"
      },
      "name": "text",
      "okta": {
        "id": "text"
      },
      "provider": {
        "asana": {
          "id": "text"
        },
        "azure": {
          "id": "text"
        },
        "azureEntra": {
          "id": "text"
        },
        "bitBucket": {
          "id": "text"
        },
        "gitHub": {
          "id": 1,
          "nodeId": "text"
        },
        "gitlab": {
          "id": 1
        },
        "googleWorkspace": {
          "id": "text"
        },
        "id": "DX",
        "jira": {
          "id": "text",
          "name": "text"
        },
        "linear": {
          "id": "text"
        },
        "okta": {
          "id": "text"
        },
        "slack": {
          "id": "text",
          "name": "text"
        },
        "teams": {
          "id": "text",
          "teamIDs": [
            "text"
          ]
        }
      },
      "realName": "text",
      "slack": {
        "id": "text",
        "name": "text"
      },
      "slug": "text",
      "teams": {
        "id": "text",
        "teamIDs": [
          "text"
        ]
      },
      "updatedAt": "text",
      "username": "text"
    }
  ],
  "campaignId": "text",
  "campaignTitle": "text",
  "message": "text",
  "project": "text"
}
{
  "ticket": {
    "asana": {
      "projectGid": "text",
      "taskGid": "text",
      "url": "text"
    },
    "azure": {
      "url": "text",
      "workItemId": 1
    },
    "github": {
      "issueId": 1,
      "nodeId": "text",
      "number": 1,
      "repositoryName": "text",
      "url": "text"
    },
    "gitlab": {},
    "jira": {
      "issueId": "text",
      "issueKey": "text",
      "url": "text"
    },
    "linear": {
      "issueId": "text",
      "teamId": "text",
      "url": "text"
    },
    "providerId": "DX"
  },
  "version": "text"
}

Delete a ticket

Close the finding's ticket on the ticket integration and clear Nullify's link to it. The call is idempotent: a finding with no ticket returns 200 and does nothing. It returns 501 when no ticket integration is configured.

Credentials:

Delete Ticket for Credential Finding

delete

Removes the ticket associated with a credential finding: closes it on the configured integration and clears Nullify's tracking. Idempotent.

Path parameters
findingIdstringRequired

The ID of the credential finding whose ticket should be removed

Query parameters
azureOrganizationIdstringOptional

The Azure organization ID

bitbucketWorkspaceIdstringOptional

The Bitbucket workspace ID

githubOwnerIdinteger · int64Optional

The Github owner ID

gitlabGroupIdinteger · int64Optional

The GitLab group ID

installationIdstringOptional

The Nullify installation ID

azureRepositoryIdstring[]Optional

Filter by Azure repository IDs

githubRepositoryIdinteger · int64[]Optional

Filter by GitHub repository IDs

githubTeamIdinteger · int64Optional

Filter by GitHub team ID

bitbucketRepositoryIdstring[]Optional

Filter by Bitbucket repository IDs

Responses
200

OK

application/json
versionstringOptional
delete/secrets/credentials/findings/{findingId}/ticket
DELETE /secrets/credentials/findings/{findingId}/ticket HTTP/1.1
Host: api.<TENANT>.nullify.ai
Accept: */*
{
  "version": "text"
}

Legacy alias:

Delete Ticket for Credential Finding

delete

Removes the ticket associated with a credential finding: closes it on the configured integration and clears Nullify's tracking. Idempotent.

Path parameters
findingIdstringRequired

The ID of the credential finding whose ticket should be removed

Query parameters
azureOrganizationIdstringOptional

The Azure organization ID

bitbucketWorkspaceIdstringOptional

The Bitbucket workspace ID

githubOwnerIdinteger · int64Optional

The Github owner ID

gitlabGroupIdinteger · int64Optional

The GitLab group ID

installationIdstringOptional

The Nullify installation ID

azureRepositoryIdstring[]Optional

Filter by Azure repository IDs

githubRepositoryIdinteger · int64[]Optional

Filter by GitHub repository IDs

githubTeamIdinteger · int64Optional

Filter by GitHub team ID

bitbucketRepositoryIdstring[]Optional

Filter by Bitbucket repository IDs

Responses
200

OK

application/json
versionstringOptional
delete/secrets/findings/{findingId}/ticket
DELETE /secrets/findings/{findingId}/ticket HTTP/1.1
Host: api.<TENANT>.nullify.ai
Accept: */*
{
  "version": "text"
}

Sensitive data:

Delete Ticket for Sensitive Data Finding

delete

Removes the ticket associated with a sensitive-data finding: closes it on the configured integration and clears Nullify's tracking. Idempotent.

Path parameters
findingIdstringRequired

The ID of the sensitive-data finding whose ticket should be removed

Query parameters
azureOrganizationIdstringOptional

The Azure organization ID

bitbucketWorkspaceIdstringOptional

The Bitbucket workspace ID

githubOwnerIdinteger · int64Optional

The Github owner ID

gitlabGroupIdinteger · int64Optional

The GitLab group ID

installationIdstringOptional

The Nullify installation ID

azureRepositoryIdstring[]Optional

Filter by Azure repository IDs

githubRepositoryIdinteger · int64[]Optional

Filter by GitHub repository IDs

githubTeamIdinteger · int64Optional

Filter by GitHub team ID

bitbucketRepositoryIdstring[]Optional

Filter by Bitbucket repository IDs

Responses
200

OK

application/json
versionstringOptional
delete/secrets/sensitivedata/findings/{findingId}/ticket
DELETE /secrets/sensitivedata/findings/{findingId}/ticket HTTP/1.1
Host: api.<TENANT>.nullify.ai
Accept: */*
{
  "version": "text"
}

Scan runs

List scan runs

Lists secrets scan runs for one repository, with status, trigger, branch, commit, live, new and allowlisted finding counts and severity totals. repositoryId is required. This list uses offset paging: limit defaults to 10 and is capped at 50, offset skips rows, sort is newest (default) or oldest, and from and to are RFC 3339 bounds on the start time. The response includes totalCount. Fixed and reintroduced counts are always 0 for secrets scans.

List Scan Runs

get
Query parameters
repositoryIdstringRequired

Repository ID to list scan runs for

limitinteger · nullableOptional

Max scan runs per page (default 10, max 50)

offsetinteger · nullableOptional

Pagination offset (default 0)

sortstring · enum · nullableOptional

Sort order by start time (default newest)

Possible values:
fromstring · nullableOptional

Only include scan runs started at or after this RFC3339 timestamp

tostring · nullableOptional

Only include scan runs started at or before this RFC3339 timestamp

azureOrganizationIdstringOptional

The Azure organization ID

bitbucketWorkspaceIdstringOptional

The Bitbucket workspace ID

githubOwnerIdinteger · int64Optional

The Github owner ID

gitlabGroupIdinteger · int64Optional

The GitLab group ID

installationIdstringOptional

The Nullify installation ID

azureRepositoryIdstring[]Optional

Filter by Azure repository IDs

githubRepositoryIdinteger · int64[]Optional

Filter by GitHub repository IDs

githubTeamIdinteger · int64Optional

Filter by GitHub team ID

bitbucketRepositoryIdstring[]Optional

Filter by Bitbucket repository IDs

Responses
200

OK

application/json
totalCountintegerOptional
get/secrets/scan-runs
GET /secrets/scan-runs?repositoryId=text HTTP/1.1
Host: api.<TENANT>.nullify.ai
Accept: */*
{
  "scanRuns": [
    {
      "allowlistedFindingsCount": 1,
      "branch": "text",
      "commitHash": "text",
      "completedAt": "text",
      "errorMessage": "text",
      "fixedFindingsCount": 1,
      "isDefaultBranch": true,
      "liveFindingsCount": 1,
      "newFindingsCount": 1,
      "reintroducedFindingsCount": 1,
      "scaOutcome": {
        "coverageGaps": [
          {
            "ecosystems": [
              "text"
            ],
            "packageAuth": [
              {
                "credential": "rejected",
                "dir": "text",
                "ecosystem": "text",
                "evidence": "text",
                "registry": "text",
                "tool": "text",
                "version": 1
              }
            ],
            "reason": "text",
            "scope": "text",
            "side": "source",
            "source": "sbom",
            "status": "text",
            "suspect": {
              "firstSeen": "2026-01-01T00:00:00.000Z",
              "loss": "text",
              "sha256": "text",
              "version": 1
            },
            "touchedByChange": true
          }
        ],
        "degraded": true,
        "failureStage": "clone",
        "keptLiveCoverage": 1,
        "keptLiveNotSeenInSbom": 1,
        "keptLivePackageGate": 1,
        "keptLiveUnchangedManifests": 1,
        "sbomAuthoritative": true,
        "sbomFailureClass": "oom",
        "sbomIncomplete": true,
        "sbomSource": "text",
        "ticketsReopenSkipped": 1
      },
      "scanCompletedAt": "text",
      "scanRunId": "text",
      "severityCritical": 1,
      "severityHigh": 1,
      "severityLow": 1,
      "severityMedium": 1,
      "startedAt": "text",
      "status": "text",
      "triggerType": "text"
    }
  ],
  "totalCount": 1
}

Published operation index

This index comes from the published specification. Check its request and response schemas before calling an operation; deployment versions and feature availability can differ.

Method
Path
Operation

GET

/secrets/credentials/findings

Get Secrets Credential Findings

POST

/secrets/credentials/findings/allowlist/batch

Allowlist Batch of Credential Findings

GET

/secrets/credentials/findings/detailed

Get Secrets Credential Findings Detailed

GET

/secrets/credentials/findings/{findingId}

Get Credential Finding

PATCH

/secrets/credentials/findings/{findingId}

Update Credential Finding

POST

/secrets/credentials/findings/{findingId}/allowlist

Allowlist Credential Finding

GET

/secrets/credentials/findings/{findingId}/events

Get Finding Events

DELETE

/secrets/credentials/findings/{findingId}/ticket

Delete Ticket for Credential Finding

POST

/secrets/credentials/findings/{findingId}/ticket

Create Ticket for Credential Finding

GET

/secrets/credentials/findings/{findingId}/triage

Get Triaged Credential Finding

POST

/secrets/credentials/findings/{findingId}/unallowlist

Unallowlist Credential Finding

GET

/secrets/credentials/findings/{findingId}/users

Get Credential Finding Related Users

GET

/secrets/events

Get Secret Events

GET

/secrets/findings

Get Secrets Credential Findings

POST

/secrets/findings/allowlist/batch

Allowlist Batch of Credential Findings

GET

/secrets/findings/detailed

Get Secrets Credential Findings Detailed - [DEPRECATED - TO BE REMOVED BY 2025]

GET

/secrets/findings/preview

Get Secrets Credential Findings

GET

/secrets/findings/{findingId}

Get Credential Finding

PATCH

/secrets/findings/{findingId}

Update Credential Finding

POST

/secrets/findings/{findingId}/allowlist

Allowlist Credential Finding

GET

/secrets/findings/{findingId}/events

Get Finding Events

DELETE

/secrets/findings/{findingId}/ticket

Delete Ticket for Credential Finding

POST

/secrets/findings/{findingId}/ticket

Create Ticket for Credential Finding

GET

/secrets/findings/{findingId}/triage

Get Triaged Credential Finding

POST

/secrets/findings/{findingId}/unallowlist

Unallowlist Credential Finding

GET

/secrets/findings/{findingId}/users

Get Credential Finding Related Users

GET

/secrets/scan-runs

List Scan Runs

GET

/secrets/sensitivedata/findings

Get Sensitive Data Findings

POST

/secrets/sensitivedata/findings/allowlist/batch

Allowlist Batch of Sensitive Data Findings

GET

/secrets/sensitivedata/findings/{findingId}

Get Sensitive Data Finding

PATCH

/secrets/sensitivedata/findings/{findingId}

Update Sensitive Data Finding

POST

/secrets/sensitivedata/findings/{findingId}/allowlist

Allowlist Sensitive Data Finding

DELETE

/secrets/sensitivedata/findings/{findingId}/ticket

Delete Ticket for Sensitive Data Finding

POST

/secrets/sensitivedata/findings/{findingId}/ticket

Create Ticket for Sensitive Data Finding

GET

/secrets/sensitivedata/findings/{findingId}/triage

Get Triaged Sensitive Data Finding

POST

/secrets/sensitivedata/findings/{findingId}/unallowlist

Unallowlist Sensitive Data Finding

GET

/secrets/sensitivedata/findings/{findingId}/users

Get Sensitive Data Finding Related Users

Last updated