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 admission. 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.