Mark an issue
Marks an issue as a false positive or an accepted risk, or opens it again. The reason shows in the app with your key's name.
OAuth permission: issues:write · an API key has them all
A false positive leaves the score; an accepted risk stays in it. For a fixed issue, do not mark it: recheck it and Rustine closes it.
Path parameters
issue_idstringrequiredIssue id.
Request body
statusstringrequiredfalse_positive(leaves the score),accepted_risk(stays in the score) oropento undo.openfalse_positiveaccepted_riskreasonstringoptionalWhy, with the evidence checked (10 to 500 characters). Required for
false_positiveandaccepted_risk; shown in the app with the key's name.
Response
idstringIssue id; it keeps its identity from one scan to the next.
objectstringproject_idstringProject of the issue.
target_idstringTarget where it was found.
addressstringHostname of the site or
owner/repo.control_idstringThe check that found it (stable identifier).
familystringFamily of the check.
databasesecretsexposedFilespersonalDatavulnerableVersionsconfigurationcomplianceservercodeseveritystringcriticalhighmediumlowinfoconfidencestringHow sure the finding is.
confirmedlikelyestimatedstatusstringopen;fixed(a later scan or recheck no longer finds it);false_positive(left out of the score);accepted_risk(kept in the score).openfixedfalse_positiveaccepted_risktitlestringOne line, in the language of the key's owner.
explanationstringThe risk in plain words, in the key owner's language.
detailstringTechnical detail, in the key owner's language.
locationstringWhere: a path, a table, or
file:line@commitin a repository.filestring | nullRepository issue: the file.
lineinteger | nullRepository issue: the line.
commitstring | nullRepository issue: the commit analysed.
evidencestringWhat the check observed, secrets masked.
fix_unlockedbooleanWhether its fix is unlocked (readable for free).
status_reasonstring | nullWhy it was marked a false positive or an accepted risk.
marked_bystring | nullWho marked it: an agent, an API key's name, or
app.first_seen_atstringFirst scan that found it.
last_seen_atstringLast scan that found it.
fixed_atstring | nullWhen it was found fixed.
Errors
| Status | error.code | What happens |
|---|---|---|
| 400 | body_invalid | The request body is not valid JSON. Check the Content-Type: application/json header. |
| 400 | parameter_invalid | A parameter is missing or invalid; param names it. |
| 400 | reason_required | Marking a false positive or an accepted risk needs a reason, 10 to 500 characters. |
| 401 | authentication_required | No key in the request. Pass it in the Authorization: Bearer rst_… header, never in the address. |
| 401 | invalid_api_key | The key or OAuth token is wrong, revoked or expired. Check it is copied in full, or create a new key. |
| 402 | api_plan_required | The workspace is on the Free plan. The API comes with Pro, or on a 14-day trial with Solo. |
| 402 | api_trial_ended | Solo's 14-day trial is over. Move to Pro: your keys work again at once. |
| 403 | scope_missing | The OAuth token lacks the permission this route needs (shown on its page). Reconnect the agent to grant it. An API key has every permission. |
| 404 | resource_not_found | Nothing with this id in the key's workspace. An object of another workspace answers the same: its existence is never revealed. |
| 409 | issue_already_fixed | The issue is fixed: there is nothing to mark. |
| 409 | proof_required | The site must first be proved yours (full audit, fix, marking). Prove it in the app: DNS, file or meta tag. |
| 429 | rate_limited | Too many requests for this key (120 per minute). Wait Retry-After seconds. |
| 500 | internal_error | An error on our side, reported automatically. Retry later; give the Request-Id to support if it comes back. |
| 503 | service_unavailable | Rustine is unavailable for a moment. Retry with the same Idempotency-Key. |