Skip to content

Updated

API v1 Reference

The /api/v1 surface is a curated, additive re-export of the existing API. Breaking changes will be introduced under a new major version.

Base URL: https://app.lyrashieldai.com/api/v1. Authenticate with a workspace API key in the Authorization: Bearer <key> header.

Download the OpenAPI 3.1 spec as JSON: openapi.json

Endpoints (37)

GET/agent-approvalsList agent approvals

Parameters

NameInRequiredType
workspaceIdqueryyesstring
statusquerynostring
cursorquerynostring
limitquerynostring

Responses

  • 200 — List of agent approvals
  • 400 — Bad request
  • 401 — Unauthorized
  • 403 — Forbidden
  • 404 — Not found
  • 409 — Conflict
  • 422 — Validation failed
  • 429 — Rate limited
  • 500 — Internal server error
  • 503 — Service temporarily unavailable
POST/agent-approvalsCreate an agent approval

Parameters

NameInRequiredType
workspaceIdqueryyesstring

Request body: application/json

Responses

  • 201 — Agent approval created
  • 400 — Bad request
  • 401 — Unauthorized
  • 403 — Forbidden
  • 404 — Not found
  • 409 — Conflict
  • 422 — Validation failed
  • 429 — Rate limited
  • 500 — Internal server error
  • 503 — Service temporarily unavailable
POST/agent-approvals/{id}/approveApprove an agent action

Parameters

NameInRequiredType
idpathyesstring
workspaceIdqueryyesstring

Request body: application/json

Responses

  • 200 — Agent approval approved
  • 400 — Bad request
  • 401 — Unauthorized
  • 403 — Forbidden
  • 404 — Not found
  • 409 — Conflict
  • 422 — Validation failed
  • 429 — Rate limited
  • 500 — Internal server error
  • 503 — Service temporarily unavailable
POST/agent-approvals/{id}/denyDeny an agent action

Parameters

NameInRequiredType
idpathyesstring
workspaceIdqueryyesstring

Request body: application/json

Responses

  • 200 — Agent approval denied
  • 400 — Bad request
  • 401 — Unauthorized
  • 403 — Forbidden
  • 404 — Not found
  • 409 — Conflict
  • 422 — Validation failed
  • 429 — Rate limited
  • 500 — Internal server error
  • 503 — Service temporarily unavailable
GET/findingsList findings

Parameters

NameInRequiredType
workspaceIdqueryyesstring
targetIdquerynostring
observedInScanIdquerynostring
scanIdquerynostring
severityquerynostring
statusquerynostring
verifiedquerynostring
categoryquerynostring
qquerynostring
statsquerynostring
cursorquerynostring
limitquerynostring

Responses

  • 200 — List of findings
  • 400 — Bad request
  • 401 — Unauthorized
  • 403 — Forbidden
  • 404 — Not found
  • 409 — Conflict
  • 422 — Validation failed
  • 429 — Rate limited
  • 500 — Internal server error
  • 503 — Service temporarily unavailable
GET/findings/{id}Get a finding

Parameters

NameInRequiredType
idpathyesstring
workspaceIdqueryyesstring

Responses

  • 200 — Finding details
  • 400 — Bad request
  • 401 — Unauthorized
  • 403 — Forbidden
  • 404 — Not found
  • 409 — Conflict
  • 422 — Validation failed
  • 429 — Rate limited
  • 500 — Internal server error
  • 503 — Service temporarily unavailable
PATCH/findings/{id}Update a finding

Parameters

NameInRequiredType
idpathyesstring
workspaceIdqueryyesstring

Request body: application/json

Responses

  • 200 — Finding updated
  • 400 — Bad request
  • 401 — Unauthorized
  • 403 — Forbidden
  • 404 — Not found
  • 409 — Conflict
  • 422 — Validation failed
  • 429 — Rate limited
  • 500 — Internal server error
  • 503 — Service temporarily unavailable
POST/findings/{id}/fix-proposalsCreate a fix proposal

Parameters

NameInRequiredType
idpathyesstring
workspaceIdqueryyesstring

Request body: application/json

Responses

  • 200 — Fix proposal created
  • 400 — Bad request
  • 401 — Unauthorized
  • 403 — Forbidden
  • 404 — Not found
  • 409 — Conflict
  • 422 — Validation failed
  • 429 — Rate limited
  • 500 — Internal server error
  • 503 — Service temporarily unavailable
POST/findings/{id}/retestsQueue a retest

Parameters

NameInRequiredType
idpathyesstring
workspaceIdqueryyesstring

Request body: application/json

Responses

  • 201 — Retest queued
  • 400 — Bad request
  • 401 — Unauthorized
  • 403 — Forbidden
  • 404 — Not found
  • 409 — Conflict
  • 422 — Validation failed
  • 429 — Rate limited
  • 500 — Internal server error
  • 503 — Service temporarily unavailable
GET/fix-proposalsList fix proposals

Parameters

NameInRequiredType
workspaceIdqueryyesstring
findingIdquerynostring
statusquerynostring
cursorquerynostring
limitquerynostring

Responses

  • 200 — List of fix proposals
  • 400 — Bad request
  • 401 — Unauthorized
  • 403 — Forbidden
  • 404 — Not found
  • 409 — Conflict
  • 422 — Validation failed
  • 429 — Rate limited
  • 500 — Internal server error
  • 503 — Service temporarily unavailable
POST/fix-proposals/{id}/create-prCreate a pull request

Parameters

NameInRequiredType
idpathyesstring
workspaceIdqueryyesstring

Request body: application/json

Responses

  • 400 — Bad request
  • 401 — Unauthorized
  • 403 — Forbidden
  • 404 — Not found
  • 409 — Pull request creation is blocked pending server-generated patch evidence
  • 422 — Validation failed
  • 429 — Rate limited
  • 500 — Internal server error
  • 503 — Service temporarily unavailable
GET/launch-readinessLaunch readiness report

Parameters

NameInRequiredType
workspaceIdqueryyesstring
targetIdquerynostring

Responses

  • 200 — Launch readiness summary
  • 400 — Bad request
  • 401 — Unauthorized
  • 403 — Forbidden
  • 404 — Not found
  • 409 — Conflict
  • 422 — Validation failed
  • 429 — Rate limited
  • 500 — Internal server error
  • 503 — Service temporarily unavailable
GET/projectsList projects

Parameters

NameInRequiredType
workspaceIdqueryyesstring
cursorquerynostring
limitquerynostring

Responses

  • 200 — List of projects
  • 400 — Bad request
  • 401 — Unauthorized
  • 403 — Forbidden
  • 404 — Not found
  • 409 — Conflict
  • 422 — Validation failed
  • 429 — Rate limited
  • 500 — Internal server error
  • 503 — Service temporarily unavailable
POST/projectsCreate a project

Parameters

NameInRequiredType
workspaceIdqueryyesstring

Request body: application/json

Responses

  • 200 — Project created
  • 400 — Bad request
  • 401 — Unauthorized
  • 403 — Forbidden
  • 404 — Not found
  • 409 — Conflict
  • 422 — Validation failed
  • 429 — Rate limited
  • 500 — Internal server error
  • 503 — Service temporarily unavailable
GET/reportsList reports

Parameters

NameInRequiredType
workspaceIdqueryyesstring
cursorquerynostring
limitquerynostring

Responses

  • 200 — List of reports
  • 400 — Bad request
  • 401 — Unauthorized
  • 403 — Forbidden
  • 404 — Not found
  • 409 — Conflict
  • 422 — Validation failed
  • 429 — Rate limited
  • 500 — Internal server error
  • 503 — Service temporarily unavailable
POST/reportsCreate a report

Parameters

NameInRequiredType
workspaceIdqueryyesstring

Request body: application/json

Responses

  • 201 — Report created
  • 400 — Bad request
  • 401 — Unauthorized
  • 403 — Forbidden
  • 404 — Not found
  • 409 — Conflict
  • 422 — Validation failed
  • 429 — Rate limited
  • 500 — Internal server error
  • 503 — Service temporarily unavailable
GET/reports/{id}Get a report

Parameters

NameInRequiredType
idpathyesstring
workspaceIdqueryyesstring

Responses

  • 200 — Report details
  • 400 — Bad request
  • 401 — Unauthorized
  • 403 — Forbidden
  • 404 — Not found
  • 409 — Conflict
  • 422 — Validation failed
  • 429 — Rate limited
  • 500 — Internal server error
  • 503 — Service temporarily unavailable
POST/reports/{id}Share or revoke a report

Parameters

NameInRequiredType
idpathyesstring
workspaceIdqueryyesstring

Request body: application/json

Responses

  • 200 — Report action completed
  • 400 — Bad request
  • 401 — Unauthorized
  • 403 — Forbidden
  • 404 — Not found
  • 409 — Conflict
  • 422 — Validation failed
  • 429 — Rate limited
  • 500 — Internal server error
  • 503 — Service temporarily unavailable
GET/reports/{id}/downloadDownload a report

Parameters

NameInRequiredType
idpathyesstring
workspaceIdqueryyesstring

Responses

  • 200 — Report HTML
  • 400 — Bad request
  • 401 — Unauthorized
  • 403 — Forbidden
  • 404 — Not found
  • 409 — Conflict
  • 422 — Validation failed
  • 429 — Rate limited
  • 500 — Internal server error
  • 503 — Service temporarily unavailable
GET/retestsList retests

Parameters

NameInRequiredType
workspaceIdqueryyesstring
findingIdquerynostring
statusquerynostring
cursorquerynostring
limitquerynostring

Responses

  • 200 — List of retests
  • 400 — Bad request
  • 401 — Unauthorized
  • 403 — Forbidden
  • 404 — Not found
  • 409 — Conflict
  • 422 — Validation failed
  • 429 — Rate limited
  • 500 — Internal server error
  • 503 — Service temporarily unavailable
GET/scansList scans

Parameters

NameInRequiredType
workspaceIdqueryyesstring
targetIdquerynostring
statusquerynostring
cursorquerynostring
limitquerynostring
If-None-Matchheadernostring

Responses

  • 200 — List of scans
  • 304 — Not Modified
  • 400 — Bad request
  • 401 — Unauthorized
  • 403 — Forbidden
  • 404 — Not found
  • 409 — Conflict
  • 422 — Validation failed
  • 429 — Rate limited
  • 500 — Internal server error
  • 503 — Service temporarily unavailable
POST/scansCreate a scan

Creates a recorded scan with a server-owned immutable execution plan. `workflow` selects REVIEW_TARGET (default) or REVIEW_CHANGES (repository diff review — requires `baseRef`, optional `headRef`); `attachmentIds` reference previously staged workspace artifacts. AUTHENTICATED_ASSESSMENT is a gated staging beta: it requires `authorizationRef` (a recorded scoped authorization) and returns SCAN_WORKFLOW_UNAVAILABLE (400) unless the deployment enables it for this workspace/target. Advisory local checks (CLI check-diff, GitHub Action gate) are never equivalent to this recorded path.

Parameters

NameInRequiredType
workspaceIdqueryyesstring

Request body: application/json

Responses

  • 201 — Scan created
  • 400 — Bad request
  • 401 — Unauthorized
  • 403 — Forbidden
  • 404 — Not found
  • 409 — Conflict
  • 422 — Validation failed
  • 429 — Rate limited
  • 500 — Internal server error
  • 503 — Service temporarily unavailable
GET/scans/{id}Get a scan

Returns the scan with its recorded execution plan (workflow, scope, resolved immutable source revisions), events, result-manifest checksum and coverage receipts.

Parameters

NameInRequiredType
idpathyesstring
workspaceIdqueryyesstring
If-None-Matchheadernostring

Responses

  • 200 — Scan details
  • 304 — Not Modified
  • 400 — Bad request
  • 401 — Unauthorized
  • 403 — Forbidden
  • 404 — Not found
  • 409 — Conflict
  • 422 — Validation failed
  • 429 — Rate limited
  • 500 — Internal server error
  • 503 — Service temporarily unavailable
POST/scans/{id}Cancel a scan

Parameters

NameInRequiredType
idpathyesstring
workspaceIdqueryyesstring

Request body: application/json

Responses

  • 200 — Scan cancelled
  • 400 — Bad request
  • 401 — Unauthorized
  • 403 — Forbidden
  • 404 — Not found
  • 409 — Conflict
  • 422 — Validation failed
  • 429 — Rate limited
  • 500 — Internal server error
  • 503 — Service temporarily unavailable
POST/scans/{id}/artifacts/sarifImport a SARIF report into a scan

Imports third-party SARIF 2.1.0 detections into an existing scan. Imported findings are tagged external_import and never count as scanner coverage or independently verified findings. Requires a write-scoped API key or browser session; delegated OAuth connections are refused.

Parameters

NameInRequiredType
idpathyesstring
workspaceIdqueryyesstring

Request body: application/json

Responses

  • 200 — SARIF findings imported
  • 400 — Bad request
  • 401 — Unauthorized
  • 403 — Forbidden
  • 404 — Not found
  • 409 — Conflict
  • 413 — SARIF payload exceeds the 5 MiB limit
  • 422 — Validation failed
  • 429 — Rate limited
  • 500 — Internal server error
  • 503 — Service temporarily unavailable
GET/scans/eligibilityAdvisory scan eligibility preflight

Read-only advisory check: whether POST /scans would currently admit the requested review — same permission, plan, domain-proof and entitlement gates, evaluated without any trial, billing, scan or audit mutation. `allowed:false` is a successful read carrying a structured denial (`code`, `message`, `blockers`), not an error. POST /scans re-checks authoritatively at creation; a pass here never guarantees admission. `attachmentIds` is a repeated query parameter.

Parameters

NameInRequiredType
workspaceIdqueryyesstring
targetIdqueryyesstring
goalqueryyes—
modequeryyes—
workflowquerynostring
baseRefquerynostring
headRefquerynostring
attachmentIdsquerynoarray
authorizationRefquerynostring

Responses

  • 200 — Eligibility verdict
  • 400 — Bad request
  • 401 — Unauthorized
  • 403 — Forbidden
  • 404 — Not found
  • 409 — Conflict
  • 422 — Validation failed
  • 429 — Rate limited
  • 500 — Internal server error
  • 503 — Service temporarily unavailable
GET/schedulesList schedules

Parameters

NameInRequiredType
workspaceIdqueryyesstring
targetIdquerynostring
enabledquerynostring
cursorquerynostring
limitquerynostring

Responses

  • 200 — List of schedules
  • 400 — Bad request
  • 401 — Unauthorized
  • 403 — Forbidden
  • 404 — Not found
  • 409 — Conflict
  • 422 — Validation failed
  • 429 — Rate limited
  • 500 — Internal server error
  • 503 — Service temporarily unavailable
POST/schedulesCreate a schedule

Parameters

NameInRequiredType
workspaceIdqueryyesstring

Request body: application/json

Responses

  • 201 — Schedule created
  • 400 — Bad request
  • 401 — Unauthorized
  • 403 — Forbidden
  • 404 — Not found
  • 409 — Conflict
  • 422 — Validation failed
  • 429 — Rate limited
  • 500 — Internal server error
  • 503 — Service temporarily unavailable
DELETE/schedules/{id}Delete a schedule

Parameters

NameInRequiredType
idpathyesstring
workspaceIdqueryyesstring

Responses

  • 200 — Schedule deleted
  • 400 — Bad request
  • 401 — Unauthorized
  • 403 — Forbidden
  • 404 — Not found
  • 409 — Conflict
  • 422 — Validation failed
  • 429 — Rate limited
  • 500 — Internal server error
  • 503 — Service temporarily unavailable
GET/schedules/{id}Get a schedule

Parameters

NameInRequiredType
idpathyesstring
workspaceIdqueryyesstring

Responses

  • 200 — Schedule details
  • 400 — Bad request
  • 401 — Unauthorized
  • 403 — Forbidden
  • 404 — Not found
  • 409 — Conflict
  • 422 — Validation failed
  • 429 — Rate limited
  • 500 — Internal server error
  • 503 — Service temporarily unavailable
PATCH/schedules/{id}Update a schedule

Parameters

NameInRequiredType
idpathyesstring
workspaceIdqueryyesstring

Request body: application/json

Responses

  • 200 — Schedule updated
  • 400 — Bad request
  • 401 — Unauthorized
  • 403 — Forbidden
  • 404 — Not found
  • 409 — Conflict
  • 422 — Validation failed
  • 429 — Rate limited
  • 500 — Internal server error
  • 503 — Service temporarily unavailable
GET/targetsList targets

Parameters

NameInRequiredType
workspaceIdqueryyesstring
projectIdquerynostring
cursorquerynostring
limitquerynostring

Responses

  • 200 — List of targets
  • 400 — Bad request
  • 401 — Unauthorized
  • 403 — Forbidden
  • 404 — Not found
  • 409 — Conflict
  • 422 — Validation failed
  • 429 — Rate limited
  • 500 — Internal server error
  • 503 — Service temporarily unavailable
POST/targetsCreate a target

Parameters

NameInRequiredType
workspaceIdqueryyesstring

Request body: application/json

Responses

  • 200 — Target created
  • 400 — Bad request
  • 401 — Unauthorized
  • 403 — Forbidden
  • 404 — Not found
  • 409 — Conflict
  • 422 — Validation failed
  • 429 — Rate limited
  • 500 — Internal server error
  • 503 — Service temporarily unavailable
DELETE/targets/{id}Delete a target (soft delete)

Marks the target deleted and frees its plan target slot. Scans, findings, verdicts, reports and evidence are retained in the workspace. Refused while a scan for the target is queued or running.

Parameters

NameInRequiredType
idpathyesstring
workspaceIdqueryyesstring

Responses

  • 204 — Target deleted
  • 400 — Bad request
  • 401 — Unauthorized
  • 403 — Forbidden
  • 404 — Target not found or already deleted
  • 409 — Target has a queued or running scan
  • 422 — Validation failed
  • 429 — Rate limited
  • 500 — Internal server error
  • 503 — Service temporarily unavailable
PATCH/targets/{id}Update a target

Parameters

NameInRequiredType
idpathyesstring
workspaceIdqueryyesstring

Request body: application/json

Responses

  • 200 — Target updated
  • 400 — Bad request
  • 401 — Unauthorized
  • 403 — Forbidden
  • 404 — Not found
  • 409 — Repository ref is immutable after the first scan
  • 422 — Validation failed
  • 429 — Rate limited
  • 500 — Internal server error
  • 503 — Service temporarily unavailable
GET/workspacesList workspaces

Parameters

NameInRequiredType
workspaceIdqueryyesstring

Responses

  • 200 — List of workspaces
  • 400 — Bad request
  • 401 — Unauthorized
  • 403 — Forbidden
  • 404 — Not found
  • 409 — Conflict
  • 422 — Validation failed
  • 429 — Rate limited
  • 500 — Internal server error
  • 503 — Service temporarily unavailable
POST/workspacesCreate a workspace

Parameters

NameInRequiredType
workspaceIdqueryyesstring

Request body: application/json

Responses

  • 200 — Workspace created
  • 400 — Bad request
  • 401 — Unauthorized
  • 403 — Forbidden
  • 404 — Not found
  • 409 — Conflict
  • 422 — Validation failed
  • 429 — Rate limited
  • 500 — Internal server error
  • 503 — Service temporarily unavailable