FixMyCloud|Developer Docs

API Reference

Full API Reference

Auto-generated from the live API schema. Always up to date.

1.0.0https://api.fixmycloud.ai/api/v189 endpoints

Auth

post/api/v1/auth/signup

Register a new user and create their first workspace.

Request body

{ "$ref": "#/components/schemas/SignupRequest" }

Responses

201Successful Response
422Validation Error
post/api/v1/auth/login

Request body

{ "$ref": "#/components/schemas/LoginRequest" }

Responses

200Successful Response
422Validation Error
post/api/v1/auth/refresh

Request body

{ "$ref": "#/components/schemas/RefreshRequest" }

Responses

200Successful Response
422Validation Error
post/api/v1/auth/forgot-password

Request body

{ "$ref": "#/components/schemas/ForgotPasswordRequest" }

Responses

202Successful Response
422Validation Error
post/api/v1/auth/reset-password

Request body

{ "$ref": "#/components/schemas/ResetPasswordRequest" }

Responses

200Successful Response
422Validation Error
post/api/v1/auth/change-password

Authenticated password change. Requires the current password.

Parameters

x-api-keyheaderoptional

Request body

{ "$ref": "#/components/schemas/ChangePasswordRequest" }

Responses

200Successful Response
422Validation Error
post/api/v1/auth/resend-verification

Request body

{ "type": "object", "title": "Data" }

Responses

200Successful Response
422Validation Error
post/api/v1/auth/verify-email/{token}

Parameters

tokenpathrequired

Responses

200Successful Response
422Validation Error
get/api/v1/auth/me

Parameters

x-api-keyheaderoptional

Responses

200Successful Response
422Validation Error

Connections

get/api/v1/connections/

Parameters

x-tenant-slugheaderoptional
x-api-keyheaderoptional

Responses

200Successful Response
422Validation Error
post/api/v1/connections/

Parameters

x-tenant-slugheaderoptional
x-api-keyheaderoptional

Request body

{ "$ref": "#/components/schemas/CreateConnectionRequest" }

Responses

201Successful Response
422Validation Error
post/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-slugheaderoptional
x-api-keyheaderoptional

Responses

200Successful Response
422Validation Error
get/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-slugheaderoptional
x-api-keyheaderoptional

Responses

200Successful Response
422Validation Error
get/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-slugheaderoptional
x-api-keyheaderoptional

Responses

200Successful Response
422Validation Error
get/api/v1/connections/windows/setup-instructions

Return WinRM setup instructions for Windows Server. Customer pastes these commands in PowerShell (as Administrator).

Parameters

x-tenant-slugheaderoptional
x-api-keyheaderoptional

Responses

200Successful Response
422Validation Error
get/api/v1/connections/azure/setup-instructions

Return Azure Service Principal setup instructions.

Parameters

x-tenant-slugheaderoptional
x-api-keyheaderoptional

Responses

200Successful Response
422Validation Error
get/api/v1/connections/gcp/setup-instructions

Return GCP Service Account setup instructions.

Parameters

x-tenant-slugheaderoptional
x-api-keyheaderoptional

Responses

200Successful Response
422Validation Error
get/api/v1/connections/{connection_id}

Parameters

connection_idpathrequired
x-tenant-slugheaderoptional
x-api-keyheaderoptional

Responses

200Successful Response
422Validation Error
patch/api/v1/connections/{connection_id}

Parameters

connection_idpathrequired
x-tenant-slugheaderoptional
x-api-keyheaderoptional

Request body

{ "$ref": "#/components/schemas/UpdateConnectionRequest" }

Responses

200Successful Response
422Validation Error
delete/api/v1/connections/{connection_id}

Parameters

connection_idpathrequired
x-tenant-slugheaderoptional
x-api-keyheaderoptional

Responses

204Successful Response
422Validation Error
post/api/v1/connections/{connection_id}/test

Parameters

connection_idpathrequired
x-tenant-slugheaderoptional
x-api-keyheaderoptional

Responses

200Successful Response
422Validation Error
post/api/v1/connections/{connection_id}/remediation-credentials

Set separate write-access credentials for auto-remediation.

Parameters

connection_idpathrequired
x-tenant-slugheaderoptional
x-api-keyheaderoptional

Request body

{ "$ref": "#/components/schemas/RemediationCredentialsRequest" }

Responses

200Successful Response
422Validation Error
delete/api/v1/connections/{connection_id}/remediation-credentials

Remove remediation credentials — disables auto-fix for this connection.

Parameters

connection_idpathrequired
x-tenant-slugheaderoptional
x-api-keyheaderoptional

Responses

200Successful Response
422Validation Error

Scans

post/api/v1/scans/trigger

Parameters

x-tenant-slugheaderoptional
x-api-keyheaderoptional

Request body

{ "$ref": "#/components/schemas/TriggerScanRequest" }

Responses

202Successful Response
422Validation Error
get/api/v1/scans/

Parameters

connection_idqueryoptional
statusqueryoptional
limitqueryoptional
offsetqueryoptional
x-tenant-slugheaderoptional
x-api-keyheaderoptional

Responses

200Successful Response
422Validation Error
get/api/v1/scans/{scan_id}

Parameters

scan_idpathrequired
x-tenant-slugheaderoptional
x-api-keyheaderoptional

Responses

200Successful Response
422Validation Error
post/api/v1/scans/{scan_id}/cancel

Parameters

scan_idpathrequired
x-tenant-slugheaderoptional
x-api-keyheaderoptional

Responses

200Successful Response
422Validation Error

Findings

get/api/v1/findings/

Parameters

severityqueryoptionalFilter by severity
statusqueryoptionalFilter by status
providerqueryoptional
rule_codequeryoptional
connection_idqueryoptional
scan_job_idqueryoptional
auto_fix_onlyqueryoptional
searchqueryoptional
sort_byqueryoptional
limitqueryoptional
offsetqueryoptional
x-tenant-slugheaderoptional
x-api-keyheaderoptional

Responses

200Successful Response
422Validation Error
get/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-slugheaderoptional
x-api-keyheaderoptional

Responses

200Successful Response
422Validation Error
get/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-slugheaderoptional
x-api-keyheaderoptional

Responses

200Successful Response
422Validation Error
get/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-slugheaderoptional
x-api-keyheaderoptional

Responses

200Successful Response
422Validation Error
get/api/v1/findings/{finding_id}

Parameters

finding_idpathrequired
x-tenant-slugheaderoptional
x-api-keyheaderoptional

Responses

200Successful Response
422Validation Error
post/api/v1/findings/{finding_id}/suppress

Parameters

finding_idpathrequired
x-tenant-slugheaderoptional
x-api-keyheaderoptional

Request body

{ "$ref": "#/components/schemas/SuppressFindingRequest" }

Responses

200Successful Response
422Validation Error
post/api/v1/findings/{finding_id}/accept-risk

Parameters

finding_idpathrequired
x-tenant-slugheaderoptional
x-api-keyheaderoptional

Request body

{ "$ref": "#/components/schemas/SuppressFindingRequest" }

Responses

200Successful Response
422Validation Error
post/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_idpathrequired
x-tenant-slugheaderoptional
x-api-keyheaderoptional

Request body

{ "$ref": "#/components/schemas/ReopenFindingRequest" }

Responses

200Successful Response
422Validation Error
post/api/v1/findings/{finding_id}/ai-remediation

Generate detailed AI remediation steps for a finding. Cached after first generation.

Parameters

finding_idpathrequired
x-tenant-slugheaderoptional
x-api-keyheaderoptional

Responses

200Successful Response
422Validation Error

Compliance

get/api/v1/compliance/frameworks

Responses

200Successful Response
get/api/v1/compliance/score

Parameters

frameworkqueryoptional
connection_idqueryoptional
x-tenant-slugheaderoptional
x-api-keyheaderoptional

Responses

200Successful Response
422Validation Error
get/api/v1/compliance/score/{framework_id}

Parameters

framework_idpathrequired
x-tenant-slugheaderoptional
x-api-keyheaderoptional

Responses

200Successful Response
422Validation Error
get/api/v1/compliance/report

Parameters

frameworkqueryrequired
x-tenant-slugheaderoptional
x-api-keyheaderoptional

Responses

200Successful Response
422Validation Error

Reports

get/api/v1/reports/

Parameters

report_typequeryoptional
limitqueryoptional
offsetqueryoptional
x-tenant-slugheaderoptional
x-api-keyheaderoptional

Responses

200Successful Response
422Validation Error
get/api/v1/reports/{report_id}

Parameters

report_idpathrequired
x-tenant-slugheaderoptional
x-api-keyheaderoptional

Responses

200Successful Response
422Validation Error
post/api/v1/reports/generate

Manually trigger report generation for the tenant.

Parameters

report_typequeryoptional
x-tenant-slugheaderoptional
x-api-keyheaderoptional

Responses

200Successful Response
422Validation Error

Schedules

get/api/v1/schedules/

Parameters

x-api-keyheaderoptional

Responses

200Successful Response
422Validation Error
post/api/v1/schedules/

Parameters

x-api-keyheaderoptional

Request body

{ "$ref": "#/components/schemas/ScheduleCreateRequest" }

Responses

201Successful Response
422Validation Error
get/api/v1/schedules/{schedule_id}

Parameters

schedule_idpathrequired
x-api-keyheaderoptional

Responses

200Successful Response
422Validation Error
put/api/v1/schedules/{schedule_id}

Parameters

schedule_idpathrequired
x-api-keyheaderoptional

Request body

{ "$ref": "#/components/schemas/ScheduleUpdateRequest" }

Responses

200Successful Response
422Validation Error
delete/api/v1/schedules/{schedule_id}

Parameters

schedule_idpathrequired
x-api-keyheaderoptional

Responses

200Successful Response
422Validation Error
post/api/v1/schedules/{schedule_id}/pause

Parameters

schedule_idpathrequired
x-api-keyheaderoptional

Responses

200Successful Response
422Validation Error
post/api/v1/schedules/{schedule_id}/resume

Parameters

schedule_idpathrequired
x-api-keyheaderoptional

Responses

200Successful Response
422Validation Error
post/api/v1/schedules/{schedule_id}/run-now

Parameters

schedule_idpathrequired
x-api-keyheaderoptional

Responses

200Successful Response
422Validation Error
get/api/v1/schedules/{schedule_id}/runs

Parameters

schedule_idpathrequired
limitqueryoptional
x-api-keyheaderoptional

Responses

200Successful Response
422Validation Error

Webhooks

get/api/v1/webhooks/endpoints

Parameters

x-tenant-slugheaderoptional
x-api-keyheaderoptional

Responses

200Successful Response
422Validation Error
post/api/v1/webhooks/endpoints

Parameters

x-tenant-slugheaderoptional
x-api-keyheaderoptional

Request body

{ "$ref": "#/components/schemas/CreateWebhookRequest" }

Responses

201Successful Response
422Validation Error
delete/api/v1/webhooks/endpoints/{endpoint_id}

Parameters

endpoint_idpathrequired
x-tenant-slugheaderoptional
x-api-keyheaderoptional

Responses

204Successful Response
422Validation Error
get/api/v1/webhooks/audit-logs

Parameters

actionqueryoptional
resource_typequeryoptional
limitqueryoptional
offsetqueryoptional
x-tenant-slugheaderoptional
x-api-keyheaderoptional

Responses

200Successful Response
422Validation Error

Users

get/api/v1/users/team

Parameters

x-tenant-slugheaderoptional
x-api-keyheaderoptional

Responses

200Successful Response
422Validation Error
post/api/v1/users/invite

Parameters

x-tenant-slugheaderoptional
x-api-keyheaderoptional

Request body

{ "$ref": "#/components/schemas/InviteUserRequest" }

Responses

201Successful Response
422Validation Error
patch/api/v1/users/team/{membership_id}/role

Parameters

membership_idpathrequired
x-tenant-slugheaderoptional
x-api-keyheaderoptional

Request body

{ "$ref": "#/components/schemas/UpdateRoleRequest" }

Responses

200Successful Response
422Validation Error
delete/api/v1/users/team/{membership_id}

Parameters

membership_idpathrequired
x-tenant-slugheaderoptional
x-api-keyheaderoptional

Responses

200Successful Response
422Validation Error
patch/api/v1/users/profile

Parameters

x-api-keyheaderoptional

Request body

{ "$ref": "#/components/schemas/UpdateProfileRequest" }

Responses

200Successful Response
422Validation Error

Tenants

get/api/v1/tenants/current

Parameters

x-tenant-slugheaderoptional
x-api-keyheaderoptional

Responses

200Successful Response
422Validation Error
patch/api/v1/tenants/current

Parameters

x-tenant-slugheaderoptional
x-api-keyheaderoptional

Request body

{ "$ref": "#/components/schemas/UpdateTenantRequest" }

Responses

200Successful Response
422Validation Error
patch/api/v1/tenants/current/remediation-policy

Parameters

x-tenant-slugheaderoptional
x-api-keyheaderoptional

Request body

{ "$ref": "#/components/schemas/UpdateRemediationPolicyRequest" }

Responses

200Successful Response
422Validation Error
patch/api/v1/tenants/current/settings

Parameters

x-tenant-slugheaderoptional
x-api-keyheaderoptional

Request body

{ "$ref": "#/components/schemas/UpdateSettingsRequest" }

Responses

200Successful Response
422Validation Error
get/api/v1/tenants/msp/workspaces

MSP mode: list all child workspaces managed by this tenant.

Parameters

x-tenant-slugheaderoptional
x-api-keyheaderoptional

Responses

200Successful Response
422Validation Error

Contact

post/api/v1/contact/

Public contact form submission. Verifies Turnstile captcha then sends email to hello@fixmycloud.ai.

Request body

{ "$ref": "#/components/schemas/ContactRequest" }

Responses

200Successful Response
422Validation Error

API 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-slugheaderoptional
x-api-keyheaderoptional

Request body

{ "$ref": "#/components/schemas/CreateApiKeyRequest" }

Responses

201Successful Response
422Validation Error
get/api/v1/api-keys/

List all API keys for this tenant (keys are masked — only prefix shown).

Parameters

x-tenant-slugheaderoptional
x-api-keyheaderoptional

Responses

200Successful Response
422Validation Error
delete/api/v1/api-keys/{key_id}

Revoke an API key — it can no longer be used to authenticate.

Parameters

key_idpathrequired
x-tenant-slugheaderoptional
x-api-keyheaderoptional

Responses

204Successful Response
422Validation Error

Remediations

post/api/v1/remediations/request

Parameters

x-tenant-slugheaderoptional
x-api-keyheaderoptional

Request body

{ "$ref": "#/components/schemas/RequestRemediationRequest" }

Responses

201Successful Response
422Validation Error
get/api/v1/remediations/

List all remediation actions for this workspace (all statuses).

Parameters

limitqueryoptional
x-tenant-slugheaderoptional
x-api-keyheaderoptional

Responses

200Successful Response
422Validation Error
get/api/v1/remediations/pending

Parameters

x-tenant-slugheaderoptional
x-api-keyheaderoptional

Responses

200Successful Response
422Validation Error
post/api/v1/remediations/{action_id}/approve

Parameters

action_idpathrequired
x-tenant-slugheaderoptional
x-api-keyheaderoptional

Responses

200Successful Response
422Validation Error
post/api/v1/remediations/{action_id}/reject

Parameters

action_idpathrequired
x-tenant-slugheaderoptional
x-api-keyheaderoptional

Request body

{ "$ref": "#/components/schemas/ApproveRejectRequest" }

Responses

200Successful Response
422Validation Error
post/api/v1/remediations/{action_id}/rollback

Parameters

action_idpathrequired
x-tenant-slugheaderoptional
x-api-keyheaderoptional

Responses

202Successful Response
422Validation Error

Approvals

get/api/v1/approvals/

List all items needing approval across the tenant.

Parameters

x-tenant-slugheaderoptional
x-api-keyheaderoptional

Responses

200Successful Response
422Validation Error

Billing

get/api/v1/billing/plans

Return plan catalog with pricing. No auth required.

Responses

200Successful Response
get/api/v1/billing/subscription

Get current subscription state for the tenant.

Parameters

x-tenant-slugheaderoptional
x-api-keyheaderoptional

Responses

200Successful Response
422Validation Error
post/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-slugheaderoptional
x-api-keyheaderoptional

Request body

{ "$ref": "#/components/schemas/CheckoutRequest" }

Responses

200Successful Response
422Validation Error
post/api/v1/billing/portal

Open Stripe Billing Portal for payment management.

Parameters

x-tenant-slugheaderoptional
x-api-keyheaderoptional

Responses

200Successful Response
422Validation Error
post/api/v1/billing/cancel

Cancel subscription at period end (not immediate).

Parameters

x-tenant-slugheaderoptional
x-api-keyheaderoptional

Responses

200Successful Response
422Validation Error
post/api/v1/billing/resume

Resume a subscription that was set to cancel at period end.

Parameters

x-tenant-slugheaderoptional
x-api-keyheaderoptional

Responses

200Successful Response
422Validation Error

Rules

get/api/v1/rules/

Parameters

providerqueryoptional
severityqueryoptional
statusqueryoptional
sourcequeryoptional
searchqueryoptional
limitqueryoptional
x-tenant-slugheaderoptional
x-api-keyheaderoptional

Responses

200Successful Response
422Validation Error
post/api/v1/rules/

Parameters

x-api-keyheaderoptional

Request body

{ "$ref": "#/components/schemas/CreateRuleRequest" }

Responses

201Successful Response
422Validation Error
get/api/v1/rules/{rule_id}

Parameters

rule_idpathrequired
x-tenant-slugheaderoptional
x-api-keyheaderoptional

Responses

200Successful Response
422Validation Error
patch/api/v1/rules/{rule_id}

Parameters

rule_idpathrequired
x-api-keyheaderoptional

Request body

{ "$ref": "#/components/schemas/UpdateRuleRequest" }

Responses

200Successful Response
422Validation Error

Invitations

post/api/v1/invitations/

Admin creates an invitation for an email to join the workspace.

Parameters

x-tenant-slugheaderoptional
x-api-keyheaderoptional

Request body

{ "$ref": "#/components/schemas/CreateInvitationRequest" }

Responses

201Successful Response
422Validation Error
get/api/v1/invitations/

Admin lists invitations for the current workspace.

Parameters

x-tenant-slugheaderoptional
x-api-keyheaderoptional

Responses

200Successful Response
422Validation Error
get/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

tokenpathrequired

Responses

200Successful Response
422Validation Error
post/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

tokenpathrequired

Request body

{ "$ref": "#/components/schemas/AcceptInvitationRequest" }

Responses

200Successful Response
422Validation Error
post/api/v1/invitations/{invitation_id}/resend

Admin resends an invite email. Refreshes expiry if old.

Parameters

invitation_idpathrequired
x-tenant-slugheaderoptional
x-api-keyheaderoptional

Responses

200Successful Response
422Validation Error
delete/api/v1/invitations/{invitation_id}

Admin revokes a pending invitation. No-op if already accepted/revoked.

Parameters

invitation_idpathrequired
x-tenant-slugheaderoptional
x-api-keyheaderoptional

Responses

200Successful Response
422Validation Error

Connectors

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-slugheaderoptional
x-api-keyheaderoptional

Request body

{ "$ref": "#/components/schemas/EnrollmentCreateRequest" }

Responses

201Successful Response
422Validation Error
get/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

statusqueryoptional
limitqueryoptional
offsetqueryoptional
x-tenant-slugheaderoptional
x-api-keyheaderoptional

Responses

200Successful Response
422Validation Error
delete/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_idpathrequired
x-tenant-slugheaderoptional
x-api-keyheaderoptional

Responses

204Successful Response
422Validation Error
get/api/v1/connectors

List connectors for the current tenant. Supports filtering by status and connector_type. Paginated via limit (1-100) + offset.

Parameters

statusqueryoptional
connector_typequeryoptional
limitqueryoptional
offsetqueryoptional
x-tenant-slugheaderoptional
x-api-keyheaderoptional

Responses

200Successful Response
422Validation Error
get/api/v1/connectors/{connector_id}

Detail view for a specific connector with operational counts.

Parameters

connector_idpathrequired
x-tenant-slugheaderoptional
x-api-keyheaderoptional

Responses

200Successful Response
422Validation Error
post/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_idpathrequired
x-tenant-slugheaderoptional
x-api-keyheaderoptional

Responses

200Successful Response
422Validation Error

Connector 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

{ "$ref": "#/components/schemas/ConnectorRegisterRequest" }

Responses

201Successful Response
422Validation Error
post/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

{ "$ref": "#/components/schemas/HeartbeatRequest" }

Responses

200Successful Response
422Validation Error
post/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 Response
post/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_idpathrequired

Request body

{ "$ref": "#/components/schemas/JobResultRequest" }

Responses

200Successful Response
422Validation Error