FortWatchFortWatchDocs
Menu

Change an issue's status

PATCHhttps://api.fortwatch.ai/app/issues/{id}/status
Scope issues:writeOperation ID setIssueStatus

Resolving starts a re-check scan of the asset, which counts toward the daily scan limits; when none can start, the issue still resolves and the next scheduled scan confirms the fix.

Parameters

NameInTypeDescription
idrequiredpathinteger

Request body

JSON, required.

FieldTypeDescription
statusstringRequired. Dismissing has its own endpoint.One of: open, in_progress, resolved
resolutionstring | null

Example request

curl -X PATCH "https://api.fortwatch.ai/app/issues/42/status" \
  -H "Authorization: Bearer $FORTWATCH_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "status": "open",
  "resolution": "string"
}'

Response 200

The request succeeded.

FieldTypeDescription
idrequirednumber
workspaceIdrequirednumber
assetIdrequirednumber
titlerequiredstring
descriptionrequiredstring | null
severityrequiredstring
statusrequiredstring
templateIdrequiredstring | null
dedupKeyrequiredstring
assignedTorequirednumber | null
resolutionrequiredstring | null
resolvedByrequiredstring | null
resolvedByScanIdrequirednumber | null
resolvedByUserIdrequirednumber | null
dismissedByUserIdrequirednumber | null
categoryrequiredstring
dueDaterequiredstring (date-time) | null
resolvedAtrequiredstring (date-time) | null
lastReopenedAtrequiredstring (date-time) | null
dismissReasonrequiredstring | null
dismissNotesrequiredstring | null
dismissExpiresAtrequiredstring (date-time) | null
firstSeenAtrequiredstring (date-time)
lastSeenAtrequiredstring (date-time)
lastCheckedAtrequiredstring (date-time) | null
reachabilityrequiredstring
verificationScanIdrequirednumber | null
verificationSkippedrequiredstring | null
createdAtrequiredstring (date-time)
updatedAtrequiredstring (date-time)
assigneerequiredobject
firstNamerequiredstring
lastNamerequiredstring
assetrequiredobject
idrequirednumber
namerequiredobject | null
valuerequiredstring
typerequiredstring
cdnProviderrequiredobject | null
projectrequiredobject
idrequirednumber
namerequiredstring
_countrequiredobject
findingsrequirednumber
resolvedByUserrequiredobject
firstNamerequiredstring
lastNamerequiredstring
dismissedByUserrequiredobject
firstNamerequiredstring
lastNamerequiredstring
verificationobject
statusrequiredstringOne of: queued, running, done, failed, skipped
scanIdrequirednumber | null
reasonrequiredstring | nullWhy no re-check started: limit, asset_not_active, ownership_unverified, error
nextScheduledAtrequiredstring (date-time) | nullThe asset's next scheduled scan, when no re-check started
json
{
  "id": 42,
  "workspaceId": 42,
  "assetId": 42,
  "title": "string",
  "description": "string",
  "severity": "string",
  "status": "string",
  "templateId": "string",
  "dedupKey": "string",
  "assignedTo": 1,
  "resolution": "string",
  "resolvedBy": "string",
  "resolvedByScanId": 42,
  "resolvedByUserId": 42,
  "dismissedByUserId": 42,
  "category": "string",
  "dueDate": "2026-10-16T12:00:00.000Z",
  "resolvedAt": "2026-10-16T12:00:00.000Z",
  "lastReopenedAt": "2026-10-16T12:00:00.000Z",
  "dismissReason": "string",
  "dismissNotes": "string",
  "dismissExpiresAt": "2026-10-16T12:00:00.000Z",
  "firstSeenAt": "2026-10-16T12:00:00.000Z",
  "lastSeenAt": "2026-10-16T12:00:00.000Z",
  "lastCheckedAt": "2026-10-16T12:00:00.000Z",
  "reachability": "string",
  "verificationScanId": 42,
  "verificationSkipped": "string",
  "createdAt": "2026-10-16T12:00:00.000Z",
  "updatedAt": "2026-10-16T12:00:00.000Z",
  "assignee": {
    "firstName": "string",
    "lastName": "string"
  },
  "asset": {
    "id": 42,
    "name": {},
    "value": "app.example.com",
    "type": "string",
    "cdnProvider": {},
    "project": {
      "id": 42,
      "name": "Production"
    }
  },
  "_count": {
    "findings": 1
  },
  "resolvedByUser": {
    "firstName": "string",
    "lastName": "string"
  },
  "dismissedByUser": {
    "firstName": "string",
    "lastName": "string"
  },
  "verification": {
    "status": "queued",
    "scanId": 42,
    "reason": "string",
    "nextScheduledAt": "2026-10-16T12:00:00.000Z"
  }
}

Errors

400The request is not valid: a field is missing or has the wrong shape (the message names it).
401No valid credentials: the API key or access token is missing, revoked or expired (INVALID_API_KEY, INVALID_TOKEN).
403Not allowed: the key or token lacks this scope (SCOPE_REQUIRED), the route is dashboard-only (SESSION_REQUIRED), or a plan limit applies.
404Not found in your workspace.
429Too many requests (RATE_LIMITED): wait the seconds Retry-After gives.