GET /v1/findings (API key) or the MCP list_findings tool (OAuth) to browse findings programmatically. Both surfaces use the same filters and return the same summary fields.
List findings
Query parameters
Response
Each item infindings includes:
The response also includes
total, limit, offset, and next_cursor for pagination. Use offset until offset + len(findings) >= total; next_cursor is an opaque pagination marker.
Match the dashboard
The MindFort UI uses tabs and filters that map to API parameters:Without
exclude_secured=true, list results include informational secured probe findings (severity=secured) that the dashboard hides on the default Open tab. This is the most common reason API or MCP counts look higher than the UI.Examples
Vulnerabilities for a target (matches default Open tab):Get finding details
description, impact, evidence, approach, remediation_advice, status, and retest decision context.
Use retest_status to interpret the current run:
QUEUED: accepted but not yet executingRUNNING: execution is in progressFAILED: execution could not complete; inspectretest_failure_reasonCOMPLETED: validation finished and its result was applied to the finding lifecycle
Update status
ACTIVE, RESOLVED, ARCHIVED. When status is RESOLVED, you may include resolve_reason (FIX or WONT_FIX) and optional resolve_context (max 2000 characters).
Bulk updates are available at POST /v1/findings/status with up to 50 finding_ids.
Override severity
critical, high, medium, low, secured. Pass null to clear an override. info is accepted only as a deprecated alias for secured.
Retest a finding
ACTIVE, RESOLVED, or ARCHIVED finding. The request fails if another retest is already queued or running.
Poll GET /v1/findings/{finding_id} after the request is accepted. When the retest completes, MindFort applies the validation result:
- A fixed finding becomes
RESOLVED. - A finding that remains vulnerable becomes
ACTIVE. - An execution failure leaves the security outcome unchanged and populates
retest_failure_reason.
RUNNING and FAILED transitions update the finding’s updated_at, so change-based consumers can observe them.
Comments
PATCH /v1/findings/{finding_id}/comments/{comment_id} and delete with DELETE /v1/findings/{finding_id}/comments/{comment_id}.
Patch summaries
pr_url, patch_status, and patch_state. Use assigned_to_me=true to restrict to the current user’s findings or search to match finding ID, title, description, endpoint, or impact. Authorized organizations receive the stored GitHub pull-request URL, including private repository URLs. Patch activity is independent of finding lifecycle status.
Analytics
Finding analytics endpoints accept an optionaltarget_id. Omit it for organization-wide metrics. GET /v1/findings/severity-score-history accepts granularity (day, week, or month), and remediation metrics additionally accept optional inclusive from and to dates.
Target health score is available at
GET /v1/targets/{target_id}/health-score.
MCP
The MCP guide exposes the same semantic filters on thelist_findings tool. Pass target_id, assessment_id, status, exclude_secured, severity, sort_by, order_direction, search, or assignment filters; MCP collection tools use an opaque cursor rather than a raw offset.
After a server update, you do not need to reinstall MCP — keep the same https://api.mindfort.app/mcp URL and restart your agent or start a new chat so it picks up the latest tool schema.
Recover a retest credential
Whenretest_failure_code identifies an authentication failure or an unavailable credential, retry with a replacement credential from the same target. The public retest request accepts target_credential_id for a replacement primary credential. To review both accounts for a dual-credential finding, use the dashboard.
Replacement is allowed only after a qualifying credential failure. It changes future retest credentials, not the credentials recorded for the original finding. Inspect retest_failure_reason for the customer-visible explanation. See Retesting findings.
Record a false positive
When updating a finding’s lifecycle status, a false-positive decision usesstatus: "ARCHIVED", resolve_reason: "FALSE_POSITIVE", and a nonempty resolve_context explaining the decision. FIX and WONT_FIX are resolution reasons for RESOLVED findings. See the status endpoint schema for the complete request contract.