API Reference
Full API Reference
Auto-generated from the live API schema. Always up to date.
1.0.0https://api.fixmycloud.ai/api/v189 endpointsAuth
post/api/v1/auth/signup▼
Register a new user and create their first workspace.
Request body
Responses
201Successful Response422Validation Errorpost/api/v1/auth/login▼
Request body
Responses
200Successful Response422Validation Errorpost/api/v1/auth/refresh▼
Request body
Responses
200Successful Response422Validation Errorpost/api/v1/auth/forgot-password▼
Request body
Responses
202Successful Response422Validation Errorpost/api/v1/auth/reset-password▼
Request body
Responses
200Successful Response422Validation Errorpost/api/v1/auth/change-password▼
Authenticated password change. Requires the current password.
Parameters
x-api-keyheaderoptionalRequest body
Responses
200Successful Response422Validation Errorpost/api/v1/auth/resend-verification▼
Request body
Responses
200Successful Response422Validation Errorpost/api/v1/auth/verify-email/{token}▼
Parameters
tokenpathrequiredResponses
200Successful Response422Validation Errorget/api/v1/auth/me▼
Parameters
x-api-keyheaderoptionalResponses
200Successful Response422Validation ErrorConnections
get/api/v1/connections/▼
Parameters
x-tenant-slugheaderoptionalx-api-keyheaderoptionalResponses
200Successful Response422Validation Errorpost/api/v1/connections/▼
Parameters
x-tenant-slugheaderoptionalx-api-keyheaderoptionalRequest body
Responses
201Successful Response422Validation Errorpost/api/v1/connections/linux/generate-key▼
Generate a new RSA-4096 SSH key pair for Linux server scanning. Returns the public key to add to the server's authorized_keys. The private key is returned once and must be saved by the frontend to be submitted as ssh_key when creating the connection.
Parameters
x-tenant-slugheaderoptionalx-api-keyheaderoptionalResponses
200Successful Response422Validation Errorget/api/v1/connections/linux/install-instructions▼
Phase 5.1A — Install instructions for the on-prem connector binary. Used by the frontend "Install Agent" path in the Add Connection flow. The frontend substitutes {ENROLLMENT_TOKEN} and {CONNECTOR_NAME} into the template after fetching an enrollment token from /connectors/enrollments. No secrets in this response; safe to call before any token is generated.
Parameters
x-tenant-slugheaderoptionalx-api-keyheaderoptionalResponses
200Successful Response422Validation Errorget/api/v1/connections/windows/install-instructions▼
F3.6.1 (May 19, 2026) — Install instructions for the Windows on-prem connector. Used by the frontend "Install Agent" path in the Add Connection flow when the user picks 'windows' provider and 'agent' connection mode. Mirror of /linux/install-instructions. The frontend substitutes {ENROLLMENT_TOKEN} and {CONNECTOR_NAME} into the template after fetching an enrollment token from /connectors/enrollments. No secrets in this response; safe to call before any token is generated. The one-liner is multi-statement PowerShell: 1. Download install.ps1 to %TEMP% 2. Invoke it with -Token and -Name args (matching install.ps1's param block) Customer must run as Administrator. install.ps1 enforces this check.
Parameters
x-tenant-slugheaderoptionalx-api-keyheaderoptionalResponses
200Successful Response422Validation Errorget/api/v1/connections/windows/setup-instructions▼
Return WinRM setup instructions for Windows Server. Customer pastes these commands in PowerShell (as Administrator).
Parameters
x-tenant-slugheaderoptionalx-api-keyheaderoptionalResponses
200Successful Response422Validation Errorget/api/v1/connections/azure/setup-instructions▼
Return Azure Service Principal setup instructions.
Parameters
x-tenant-slugheaderoptionalx-api-keyheaderoptionalResponses
200Successful Response422Validation Errorget/api/v1/connections/gcp/setup-instructions▼
Return GCP Service Account setup instructions.
Parameters
x-tenant-slugheaderoptionalx-api-keyheaderoptionalResponses
200Successful Response422Validation Errorget/api/v1/connections/{connection_id}▼
Parameters
connection_idpathrequiredx-tenant-slugheaderoptionalx-api-keyheaderoptionalResponses
200Successful Response422Validation Errorpatch/api/v1/connections/{connection_id}▼
Parameters
connection_idpathrequiredx-tenant-slugheaderoptionalx-api-keyheaderoptionalRequest body
Responses
200Successful Response422Validation Errordelete/api/v1/connections/{connection_id}▼
Parameters
connection_idpathrequiredx-tenant-slugheaderoptionalx-api-keyheaderoptionalResponses
204Successful Response422Validation Errorpost/api/v1/connections/{connection_id}/test▼
Parameters
connection_idpathrequiredx-tenant-slugheaderoptionalx-api-keyheaderoptionalResponses
200Successful Response422Validation Errorpost/api/v1/connections/{connection_id}/remediation-credentials▼
Set separate write-access credentials for auto-remediation.
Parameters
connection_idpathrequiredx-tenant-slugheaderoptionalx-api-keyheaderoptionalRequest body
Responses
200Successful Response422Validation Errordelete/api/v1/connections/{connection_id}/remediation-credentials▼
Remove remediation credentials — disables auto-fix for this connection.
Parameters
connection_idpathrequiredx-tenant-slugheaderoptionalx-api-keyheaderoptionalResponses
200Successful Response422Validation ErrorScans
post/api/v1/scans/trigger▼
Parameters
x-tenant-slugheaderoptionalx-api-keyheaderoptionalRequest body
Responses
202Successful Response422Validation Errorget/api/v1/scans/▼
Parameters
connection_idqueryoptionalstatusqueryoptionallimitqueryoptionaloffsetqueryoptionalx-tenant-slugheaderoptionalx-api-keyheaderoptionalResponses
200Successful Response422Validation Errorget/api/v1/scans/{scan_id}▼
Parameters
scan_idpathrequiredx-tenant-slugheaderoptionalx-api-keyheaderoptionalResponses
200Successful Response422Validation Errorpost/api/v1/scans/{scan_id}/cancel▼
Parameters
scan_idpathrequiredx-tenant-slugheaderoptionalx-api-keyheaderoptionalResponses
200Successful Response422Validation ErrorFindings
get/api/v1/findings/▼
Parameters
severityqueryoptionalFilter by severitystatusqueryoptionalFilter by statusproviderqueryoptionalrule_codequeryoptionalconnection_idqueryoptionalscan_job_idqueryoptionalauto_fix_onlyqueryoptionalsearchqueryoptionalsort_byqueryoptionallimitqueryoptionaloffsetqueryoptionalx-tenant-slugheaderoptionalx-api-keyheaderoptionalResponses
200Successful Response422Validation Errorget/api/v1/findings/summary▼
Dashboard summary counts. Phase 5.4.2: added `total_resolved_last_30d` and `by_connection` map. The `by_connection` map provides per-connection {open, resolved_last_30d} so connection cards can render their own stats from a single API call.
Parameters
x-tenant-slugheaderoptionalx-api-keyheaderoptionalResponses
200Successful Response422Validation Errorget/api/v1/findings/resolution-trend▼
Weekly resolved-finding counts for the last 12 weeks (Phase 5.4.3). Returns exactly 12 weeks of data (oldest first), with 0 for weeks where nothing was resolved. Uses Postgres ISO weeks (Monday start). Powers the dashboard trend chart introduced in Phase 5.4.7.
Parameters
x-tenant-slugheaderoptionalx-api-keyheaderoptionalResponses
200Successful Response422Validation Errorget/api/v1/findings/coverage-summary▼
Returns per-connection finding counts (critical/high) for the dashboard scan coverage widget. One call covers all connections.
Parameters
x-tenant-slugheaderoptionalx-api-keyheaderoptionalResponses
200Successful Response422Validation Errorget/api/v1/findings/{finding_id}▼
Parameters
finding_idpathrequiredx-tenant-slugheaderoptionalx-api-keyheaderoptionalResponses
200Successful Response422Validation Errorpost/api/v1/findings/{finding_id}/suppress▼
Parameters
finding_idpathrequiredx-tenant-slugheaderoptionalx-api-keyheaderoptionalRequest body
Responses
200Successful Response422Validation Errorpost/api/v1/findings/{finding_id}/accept-risk▼
Parameters
finding_idpathrequiredx-tenant-slugheaderoptionalx-api-keyheaderoptionalRequest body
Responses
200Successful Response422Validation Errorpost/api/v1/findings/{finding_id}/reopen▼
Revoke a suppressed or accepted_risk status and return finding to `open`. Phase 5.4.9: gives users a way to undo a previous Suppress/Accept Risk decision without needing to wait for resolution detection.
Parameters
finding_idpathrequiredx-tenant-slugheaderoptionalx-api-keyheaderoptionalRequest body
Responses
200Successful Response422Validation Errorpost/api/v1/findings/{finding_id}/ai-remediation▼
Generate detailed AI remediation steps for a finding. Cached after first generation.
Parameters
finding_idpathrequiredx-tenant-slugheaderoptionalx-api-keyheaderoptionalResponses
200Successful Response422Validation ErrorCompliance
get/api/v1/compliance/frameworks▼
Responses
200Successful Responseget/api/v1/compliance/score▼
Parameters
frameworkqueryoptionalconnection_idqueryoptionalx-tenant-slugheaderoptionalx-api-keyheaderoptionalResponses
200Successful Response422Validation Errorget/api/v1/compliance/score/{framework_id}▼
Parameters
framework_idpathrequiredx-tenant-slugheaderoptionalx-api-keyheaderoptionalResponses
200Successful Response422Validation Errorget/api/v1/compliance/report▼
Parameters
frameworkqueryrequiredx-tenant-slugheaderoptionalx-api-keyheaderoptionalResponses
200Successful Response422Validation ErrorReports
get/api/v1/reports/▼
Parameters
report_typequeryoptionallimitqueryoptionaloffsetqueryoptionalx-tenant-slugheaderoptionalx-api-keyheaderoptionalResponses
200Successful Response422Validation Errorget/api/v1/reports/{report_id}▼
Parameters
report_idpathrequiredx-tenant-slugheaderoptionalx-api-keyheaderoptionalResponses
200Successful Response422Validation Errorpost/api/v1/reports/generate▼
Manually trigger report generation for the tenant.
Parameters
report_typequeryoptionalx-tenant-slugheaderoptionalx-api-keyheaderoptionalResponses
200Successful Response422Validation ErrorSchedules
get/api/v1/schedules/▼
Parameters
x-api-keyheaderoptionalResponses
200Successful Response422Validation Errorpost/api/v1/schedules/▼
Parameters
x-api-keyheaderoptionalRequest body
Responses
201Successful Response422Validation Errorget/api/v1/schedules/{schedule_id}▼
Parameters
schedule_idpathrequiredx-api-keyheaderoptionalResponses
200Successful Response422Validation Errorput/api/v1/schedules/{schedule_id}▼
Parameters
schedule_idpathrequiredx-api-keyheaderoptionalRequest body
Responses
200Successful Response422Validation Errordelete/api/v1/schedules/{schedule_id}▼
Parameters
schedule_idpathrequiredx-api-keyheaderoptionalResponses
200Successful Response422Validation Errorpost/api/v1/schedules/{schedule_id}/pause▼
Parameters
schedule_idpathrequiredx-api-keyheaderoptionalResponses
200Successful Response422Validation Errorpost/api/v1/schedules/{schedule_id}/resume▼
Parameters
schedule_idpathrequiredx-api-keyheaderoptionalResponses
200Successful Response422Validation Errorpost/api/v1/schedules/{schedule_id}/run-now▼
Parameters
schedule_idpathrequiredx-api-keyheaderoptionalResponses
200Successful Response422Validation Errorget/api/v1/schedules/{schedule_id}/runs▼
Parameters
schedule_idpathrequiredlimitqueryoptionalx-api-keyheaderoptionalResponses
200Successful Response422Validation ErrorWebhooks
get/api/v1/webhooks/endpoints▼
Parameters
x-tenant-slugheaderoptionalx-api-keyheaderoptionalResponses
200Successful Response422Validation Errorpost/api/v1/webhooks/endpoints▼
Parameters
x-tenant-slugheaderoptionalx-api-keyheaderoptionalRequest body
Responses
201Successful Response422Validation Errordelete/api/v1/webhooks/endpoints/{endpoint_id}▼
Parameters
endpoint_idpathrequiredx-tenant-slugheaderoptionalx-api-keyheaderoptionalResponses
204Successful Response422Validation Errorget/api/v1/webhooks/audit-logs▼
Parameters
actionqueryoptionalresource_typequeryoptionallimitqueryoptionaloffsetqueryoptionalx-tenant-slugheaderoptionalx-api-keyheaderoptionalResponses
200Successful Response422Validation ErrorUsers
get/api/v1/users/team▼
Parameters
x-tenant-slugheaderoptionalx-api-keyheaderoptionalResponses
200Successful Response422Validation Errorpost/api/v1/users/invite▼
Parameters
x-tenant-slugheaderoptionalx-api-keyheaderoptionalRequest body
Responses
201Successful Response422Validation Errorpatch/api/v1/users/team/{membership_id}/role▼
Parameters
membership_idpathrequiredx-tenant-slugheaderoptionalx-api-keyheaderoptionalRequest body
Responses
200Successful Response422Validation Errordelete/api/v1/users/team/{membership_id}▼
Parameters
membership_idpathrequiredx-tenant-slugheaderoptionalx-api-keyheaderoptionalResponses
200Successful Response422Validation Errorpatch/api/v1/users/profile▼
Parameters
x-api-keyheaderoptionalRequest body
Responses
200Successful Response422Validation ErrorTenants
get/api/v1/tenants/current▼
Parameters
x-tenant-slugheaderoptionalx-api-keyheaderoptionalResponses
200Successful Response422Validation Errorpatch/api/v1/tenants/current▼
Parameters
x-tenant-slugheaderoptionalx-api-keyheaderoptionalRequest body
Responses
200Successful Response422Validation Errorpatch/api/v1/tenants/current/remediation-policy▼
Parameters
x-tenant-slugheaderoptionalx-api-keyheaderoptionalRequest body
Responses
200Successful Response422Validation Errorpatch/api/v1/tenants/current/settings▼
Parameters
x-tenant-slugheaderoptionalx-api-keyheaderoptionalRequest body
Responses
200Successful Response422Validation Errorget/api/v1/tenants/msp/workspaces▼
MSP mode: list all child workspaces managed by this tenant.
Parameters
x-tenant-slugheaderoptionalx-api-keyheaderoptionalResponses
200Successful Response422Validation ErrorContact
post/api/v1/contact/▼
Public contact form submission. Verifies Turnstile captcha then sends email to hello@fixmycloud.ai.
Request body
Responses
200Successful Response422Validation ErrorAPI Keys
post/api/v1/api-keys/▼
Create a new API key for this tenant. The full key is returned ONCE and never stored — copy it now.
Parameters
x-tenant-slugheaderoptionalx-api-keyheaderoptionalRequest body
Responses
201Successful Response422Validation Errorget/api/v1/api-keys/▼
List all API keys for this tenant (keys are masked — only prefix shown).
Parameters
x-tenant-slugheaderoptionalx-api-keyheaderoptionalResponses
200Successful Response422Validation Errordelete/api/v1/api-keys/{key_id}▼
Revoke an API key — it can no longer be used to authenticate.
Parameters
key_idpathrequiredx-tenant-slugheaderoptionalx-api-keyheaderoptionalResponses
204Successful Response422Validation ErrorRemediations
post/api/v1/remediations/request▼
Parameters
x-tenant-slugheaderoptionalx-api-keyheaderoptionalRequest body
Responses
201Successful Response422Validation Errorget/api/v1/remediations/▼
List all remediation actions for this workspace (all statuses).
Parameters
limitqueryoptionalx-tenant-slugheaderoptionalx-api-keyheaderoptionalResponses
200Successful Response422Validation Errorget/api/v1/remediations/pending▼
Parameters
x-tenant-slugheaderoptionalx-api-keyheaderoptionalResponses
200Successful Response422Validation Errorpost/api/v1/remediations/{action_id}/approve▼
Parameters
action_idpathrequiredx-tenant-slugheaderoptionalx-api-keyheaderoptionalResponses
200Successful Response422Validation Errorpost/api/v1/remediations/{action_id}/reject▼
Parameters
action_idpathrequiredx-tenant-slugheaderoptionalx-api-keyheaderoptionalRequest body
Responses
200Successful Response422Validation Errorpost/api/v1/remediations/{action_id}/rollback▼
Parameters
action_idpathrequiredx-tenant-slugheaderoptionalx-api-keyheaderoptionalResponses
202Successful Response422Validation ErrorApprovals
get/api/v1/approvals/▼
List all items needing approval across the tenant.
Parameters
x-tenant-slugheaderoptionalx-api-keyheaderoptionalResponses
200Successful Response422Validation ErrorBilling
get/api/v1/billing/plans▼
Return plan catalog with pricing. No auth required.
Responses
200Successful Responseget/api/v1/billing/subscription▼
Get current subscription state for the tenant.
Parameters
x-tenant-slugheaderoptionalx-api-keyheaderoptionalResponses
200Successful Response422Validation Errorpost/api/v1/billing/checkout▼
Create a Stripe Checkout session for plan upgrade. Only workspace owners/admins with billing permission can do this.
Parameters
x-tenant-slugheaderoptionalx-api-keyheaderoptionalRequest body
Responses
200Successful Response422Validation Errorpost/api/v1/billing/portal▼
Open Stripe Billing Portal for payment management.
Parameters
x-tenant-slugheaderoptionalx-api-keyheaderoptionalResponses
200Successful Response422Validation Errorpost/api/v1/billing/cancel▼
Cancel subscription at period end (not immediate).
Parameters
x-tenant-slugheaderoptionalx-api-keyheaderoptionalResponses
200Successful Response422Validation Errorpost/api/v1/billing/resume▼
Resume a subscription that was set to cancel at period end.
Parameters
x-tenant-slugheaderoptionalx-api-keyheaderoptionalResponses
200Successful Response422Validation ErrorRules
get/api/v1/rules/▼
Parameters
providerqueryoptionalseverityqueryoptionalstatusqueryoptionalsourcequeryoptionalsearchqueryoptionallimitqueryoptionalx-tenant-slugheaderoptionalx-api-keyheaderoptionalResponses
200Successful Response422Validation Errorpost/api/v1/rules/▼
Parameters
x-api-keyheaderoptionalRequest body
Responses
201Successful Response422Validation Errorget/api/v1/rules/{rule_id}▼
Parameters
rule_idpathrequiredx-tenant-slugheaderoptionalx-api-keyheaderoptionalResponses
200Successful Response422Validation Errorpatch/api/v1/rules/{rule_id}▼
Parameters
rule_idpathrequiredx-api-keyheaderoptionalRequest body
Responses
200Successful Response422Validation ErrorInvitations
post/api/v1/invitations/▼
Admin creates an invitation for an email to join the workspace.
Parameters
x-tenant-slugheaderoptionalx-api-keyheaderoptionalRequest body
Responses
201Successful Response422Validation Errorget/api/v1/invitations/▼
Admin lists invitations for the current workspace.
Parameters
x-tenant-slugheaderoptionalx-api-keyheaderoptionalResponses
200Successful Response422Validation Errorget/api/v1/invitations/validate/{token}▼
Public endpoint — called by the accept-invite page to preflight. Returns invitation details + whether the user needs to set a password. Does NOT modify anything.
Parameters
tokenpathrequiredResponses
200Successful Response422Validation Errorpost/api/v1/invitations/accept/{token}▼
Public endpoint — user accepts the invite. If user does not exist: full_name + password required; creates new User. If user exists: password NOT required (they login separately after this). Atomic: validates token, creates/reactivates User+Membership, marks invitation accepted.
Parameters
tokenpathrequiredRequest body
Responses
200Successful Response422Validation Errorpost/api/v1/invitations/{invitation_id}/resend▼
Admin resends an invite email. Refreshes expiry if old.
Parameters
invitation_idpathrequiredx-tenant-slugheaderoptionalx-api-keyheaderoptionalResponses
200Successful Response422Validation Errordelete/api/v1/invitations/{invitation_id}▼
Admin revokes a pending invitation. No-op if already accepted/revoked.
Parameters
invitation_idpathrequiredx-tenant-slugheaderoptionalx-api-keyheaderoptionalResponses
200Successful Response422Validation ErrorConnectors
post/api/v1/connectors/enrollments▼
Create a new enrollment token for registering connectors. The full token is returned ONCE and never stored in plaintext. Copy and distribute it to the connector installer command.
Parameters
x-tenant-slugheaderoptionalx-api-keyheaderoptionalRequest body
Responses
201Successful Response422Validation Errorget/api/v1/connectors/enrollments▼
List enrollment tokens for the current tenant. Tokens are returned WITHOUT their secrets — only prefix + metadata. Supports ?status=active|revoked|expired|exhausted for filtering.
Parameters
statusqueryoptionallimitqueryoptionaloffsetqueryoptionalx-tenant-slugheaderoptionalx-api-keyheaderoptionalResponses
200Successful Response422Validation Errordelete/api/v1/connectors/enrollments/{enrollment_id}▼
Soft-revoke an enrollment token. Sets status=revoked + revoked_at=now(). The row is preserved for audit purposes. Already-registered connectors are unaffected; only prevents future registrations via this token.
Parameters
enrollment_idpathrequiredx-tenant-slugheaderoptionalx-api-keyheaderoptionalResponses
204Successful Response422Validation Errorget/api/v1/connectors▼
List connectors for the current tenant. Supports filtering by status and connector_type. Paginated via limit (1-100) + offset.
Parameters
statusqueryoptionalconnector_typequeryoptionallimitqueryoptionaloffsetqueryoptionalx-tenant-slugheaderoptionalx-api-keyheaderoptionalResponses
200Successful Response422Validation Errorget/api/v1/connectors/{connector_id}▼
Detail view for a specific connector with operational counts.
Parameters
connector_idpathrequiredx-tenant-slugheaderoptionalx-api-keyheaderoptionalResponses
200Successful Response422Validation Errorpost/api/v1/connectors/{connector_id}/revoke▼
Revoke a connector — invalidates its secret permanently. Effect: - Connector.status = revoked - In-flight jobs (queued/dispatched/running) become cancelled - Connector secret no longer authenticates Idempotent: already-revoked connectors return current state.
Parameters
connector_idpathrequiredx-tenant-slugheaderoptionalx-api-keyheaderoptionalResponses
200Successful Response422Validation ErrorConnector API
post/api/v1/connector-api/register▼
Register a connector using an enrollment token. UNAUTHENTICATED — the enrollment token in the body IS the credential. All 401 responses use identical body to avoid leaking validation details.
Request body
Responses
201Successful Response422Validation Errorpost/api/v1/connector-api/heartbeat▼
Connector heartbeat — proves liveness + reports basic telemetry. Side effects: - Appends row to connector_heartbeats (retained ~7 days) - Updates connector.last_heartbeat_at - Transitions pending/offline -> online on any heartbeat Returns server time so connectors can correct clock drift locally. No audit log (heartbeats are high-frequency telemetry, not user actions).
Request body
Responses
200Successful Response422Validation Errorpost/api/v1/connector-api/jobs/poll▼
Connector asks: what work do you have for me? Returns at most one job. Empty response (job=null) is the common case when nothing is queued — connector should back off for POLL_INTERVAL_SECONDS and try again.
Responses
200Successful Responsepost/api/v1/connector-api/jobs/{job_id}/result▼
Connector submits the output of a dispatched job. Platform verifies HMAC on the result (for completed jobs) and stores it verbatim. Downstream parsing into findings/assets happens in Phase 4.
Parameters
job_idpathrequiredRequest body
Responses
200Successful Response422Validation Error