{"openapi":"3.1.0","info":{"title":"ServerIntel API","description":"ServerIntel: real-time server monitoring, self-healing and security. Every endpoint works on the organization you're signed in to (`POST /api/v1/auth/login`, an HttpOnly session cookie). Changes need an owner or admin, are rate limited and are written to your audit log.\n\nLive data: connect a WebSocket to `/api/v1/stream`. You receive a `snapshot`, then a `tick` every second (fleet totals + one compact row per server: `[id, status(0 healthy,1 degraded,2 updating,3 down), cpu%, mem%, disk%, rx kbps, tx kbps, req/s, err%, response ms, version]`), plus `event`, `alert_fired`, `alert_resolved`, `threats`, `deployment`. Send `{\"type\":\"focus\",\"server\":\"web-use1-01\"}` for per-second `detail` (processes, containers) and `{\"type\":\"tail\",\"level\":\"warn\"}` for a live log tail.\n\nAgents connect to `/agent/ws` with a token (see the README).","contact":{"name":"Shawn Beagle","email":"shawnbeagle@gmail.com"},"license":{"name":"MIT"},"version":"1.0.0"},"paths":{"/api/v1/alert-rules":{"get":{"tags":["Alerts"],"summary":"Alert rules.","operationId":"list_rules","responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Rule"}}}}}}},"post":{"tags":["Alerts"],"summary":"Add an alert rule. Rate limited.","operationId":"create_rule","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RuleInput"}}},"required":true},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Rule"}}}},"400":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorBody"}}}}}}},"/api/v1/alert-rules/defaults":{"post":{"tags":["Alerts"],"summary":"Restore the default alert rules. Rate limited.","operationId":"default_rules","responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Rule"}}}}}}}},"/api/v1/alert-rules/{id}":{"put":{"tags":["Alerts"],"summary":"Change an alert rule. Rate limited.","operationId":"update_rule","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","format":"int64"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RuleInput"}}},"required":true},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Rule"}}}},"404":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorBody"}}}}}},"delete":{"tags":["Alerts"],"summary":"Delete an alert rule. Rate limited.","operationId":"delete_rule","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"204":{"description":""},"404":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorBody"}}}}}}},"/api/v1/alerts":{"get":{"tags":["Alerts"],"summary":"Active alerts, or the alert history.","operationId":"list_alerts","parameters":[{"name":"state","in":"query","description":"active (default) or all","required":false,"schema":{"type":["string","null"]}},{"name":"server","in":"query","required":false,"schema":{"type":["string","null"]}},{"name":"limit","in":"query","required":false,"schema":{"type":["integer","null"],"format":"int64"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Alert"}}}}}}}},"/api/v1/ask":{"post":{"tags":["Servers"],"summary":"Ask a question about the fleet in plain English.","operationId":"ask","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Ask"}}},"required":true},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Answer"}}}}}}},"/api/v1/audit":{"get":{"tags":["Account"],"summary":"Who did what in your organization, newest first — including refused and failed attempts.","operationId":"audit_log","parameters":[{"name":"actor","in":"query","description":"only this person (email) or \"anonymous\"","required":false,"schema":{"type":["string","null"]}},{"name":"result","in":"query","description":"\"ok\", \"denied\" or \"failed\"","required":false,"schema":{"type":["string","null"]}},{"name":"limit","in":"query","description":"max rows (default 200, max 1000)","required":false,"schema":{"type":["integer","null"],"minimum":0}},{"name":"format","in":"query","description":"\"csv\" for a download","required":false,"schema":{"type":["string","null"]}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AuditEntry"}}}}},"401":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorBody"}}}}}}},"/api/v1/auth/avatar":{"put":{"tags":["Account"],"summary":"Upload your profile picture (PNG, JPEG or WebP, at most 512 KB).","operationId":"set_avatar","requestBody":{"content":{"image/png":{"schema":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}}}},"required":true},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Profile"}}}}}},"delete":{"tags":["Account"],"summary":"Remove your profile picture.","operationId":"delete_avatar","responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Profile"}}}}}}},"/api/v1/auth/forgot":{"post":{"tags":["Account"],"summary":"Email a password-reset link (always answers the same, so it doesn't reveal who has an account).","operationId":"forgot","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForgotRequest"}}},"required":true},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Ok"}}}}}}},"/api/v1/auth/login":{"post":{"tags":["Account"],"summary":"Sign in. Rate limited per client.","operationId":"login","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginRequest"}}},"required":true},"responses":{"200":{"description":"Signed in; sets an HttpOnly session cookie","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Profile"}}}},"401":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorBody"}}}},"429":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorBody"}}}}}}},"/api/v1/auth/logout":{"post":{"tags":["Account"],"summary":"Sign out (clears the session cookie).","operationId":"logout","responses":{"204":{"description":""}}}},"/api/v1/auth/me":{"get":{"tags":["Account"],"summary":"The signed-in account's profile, organizations, permissions and recent activity.","operationId":"me","responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Profile"}}}},"401":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorBody"}}}}}}},"/api/v1/auth/password":{"post":{"tags":["Account"],"summary":"Change your password (signs you out everywhere else).","operationId":"change_password","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PasswordChange"}}},"required":true},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Profile"}}}},"400":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorBody"}}}}}}},"/api/v1/auth/profile":{"put":{"tags":["Account"],"summary":"Update your name or time zone.","operationId":"update_profile","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProfileUpdate"}}},"required":true},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Profile"}}}}}}},"/api/v1/auth/resend-verification":{"post":{"tags":["Account"],"summary":"Send the verification email again.","operationId":"resend_verification","responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Ok"}}}}}}},"/api/v1/auth/reset":{"post":{"tags":["Account"],"summary":"Choose a new password from a reset link (signs you out everywhere else, then in here).","operationId":"reset_password","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResetRequest"}}},"required":true},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Profile"}}}},"400":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorBody"}}}}}}},"/api/v1/auth/session":{"get":{"tags":["Account"],"summary":"Whether this browser is signed in, and the site's mode (always 200).","operationId":"session_state","responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SessionState"}}}}}}},"/api/v1/auth/signup":{"post":{"tags":["Account"],"summary":"Create an account and its organization (not subscribed yet: checkout comes next). Signs in and emails a verification link.","operationId":"signup","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SignupRequest"}}},"required":true},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Profile"}}}},"400":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorBody"}}}},"403":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorBody"}}}},"429":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorBody"}}}}}}},"/api/v1/auth/switch":{"post":{"tags":["Account"],"summary":"Work in another organization you belong to (master admins: any organization, read-only).","operationId":"switch_org","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SwitchOrg"}}},"required":true},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Profile"}}}},"403":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorBody"}}}}}}},"/api/v1/auth/verify":{"post":{"tags":["Account"],"summary":"Confirm an email address from the link we sent.","operationId":"verify_email","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenRequest"}}},"required":true},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Ok"}}}},"400":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorBody"}}}}}}},"/api/v1/billing":{"get":{"tags":["Billing"],"summary":"Your servers, people, subscription, invoices and invoice details (owners, and members allowed to see billing).","operationId":"view","responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BillingView"}}}}}}},"/api/v1/billing/cancel":{"post":{"tags":["Billing"],"summary":"Cancel at the end of the paid period (can be undone until then). Owners.","operationId":"cancel","responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BillingView"}}}}}}},"/api/v1/billing/checkout":{"post":{"tags":["Billing"],"summary":"Subscribe: returns Stripe Checkout's URL for the servers chosen plus the people in the organization (owners).","operationId":"checkout","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CheckoutRequest"}}},"required":true},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Redirect"}}}}}}},"/api/v1/billing/interval":{"post":{"tags":["Billing"],"summary":"Switch between monthly and yearly billing (owners). Stripe credits the unused time and charges the new period now.","operationId":"set_interval","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntervalChange"}}},"required":true},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BillingView"}}}},"402":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorBody"}}}}}}},"/api/v1/billing/invoices/preview.pdf":{"get":{"tags":["Billing"],"summary":"A sample invoice with your current details, to see your customizations.","operationId":"preview","responses":{"200":{"description":"","content":{"application/pdf":{}}}}}},"/api/v1/billing/invoices/{id}":{"get":{"tags":["Billing"],"summary":"An invoice as a PDF (members of the organization).","operationId":"pdf","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/pdf":{}}},"404":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorBody"}}}}}}},"/api/v1/billing/logo":{"get":{"tags":["Billing"],"summary":"The invoice logo.","operationId":"get_logo","responses":{"200":{"description":""},"404":{"description":""}}},"put":{"tags":["Billing"],"summary":"Upload a logo for invoices (PNG, JPEG or SVG, at most 256 KB). Owners.","operationId":"set_logo","requestBody":{"content":{"image/png":{"schema":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}}}},"required":true},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BillingView"}}}}}},"delete":{"tags":["Billing"],"summary":"Remove the invoice logo. Owners.","operationId":"delete_logo","responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BillingView"}}}}}}},"/api/v1/billing/portal":{"post":{"tags":["Billing"],"summary":"Stripe's customer portal: the card on file and payment history. Owners.","operationId":"portal","responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Redirect"}}}}}}},"/api/v1/billing/profile":{"put":{"tags":["Billing"],"summary":"The company details printed on invoices. Owners.","operationId":"set_profile","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BillingProfile"}}},"required":true},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BillingView"}}}}}}},"/api/v1/billing/resume":{"post":{"tags":["Billing"],"summary":"Keep a subscription that was set to cancel. Owners.","operationId":"resume","responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BillingView"}}}}}}},"/api/v1/billing/servers":{"post":{"tags":["Billing"],"summary":"Pay for more or fewer servers (owners). More: the prorated difference is\ncharged now, and the servers are added once it's paid. Fewer: the unused\ntime is credited to the next invoice.","operationId":"set_servers","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServersChange"}}},"required":true},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BillingView"}}}},"402":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorBody"}}}}}}},"/api/v1/blocks":{"get":{"tags":["Threats"],"summary":"IPs blocked on every server's firewall.","operationId":"list_blocks","responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Block"}}}}}}},"post":{"tags":["Threats"],"summary":"Block an IP across the fleet (pushed to every agent in real time). Rate limited.","operationId":"add_block","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlockRequest"}}},"required":true},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Block"}}}},"400":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorBody"}}}},"409":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorBody"}}}},"429":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorBody"}}}}}}},"/api/v1/blocks/{ip}":{"delete":{"tags":["Threats"],"summary":"Remove an IP from every server's firewall. Rate limited.","operationId":"remove_block","parameters":[{"name":"ip","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":""},"404":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorBody"}}}}}}},"/api/v1/capacity":{"get":{"tags":["Reliability"],"summary":"Capacity planning: forecasts to full, per-role utilization and right-sizing, recent anomalies.","operationId":"capacity","responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CapacityView"}}}}}}},"/api/v1/certificates":{"get":{"tags":["Security"],"summary":"Every domain the fleet serves, with certificate expiry per host (and live checks of the public ones from ServerIntel).","operationId":"certificates","responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CertificatesView"}}}}}}},"/api/v1/certificates/renew":{"post":{"tags":["Security"],"summary":"Renew a domain's certificate on every server that serves it (ACME).","operationId":"renew","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RenewRequest"}}},"required":true},"responses":{"202":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Dispatched"}}}},"403":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorBody"}}}},"404":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorBody"}}}}}}},"/api/v1/deployments":{"get":{"tags":["Deployments"],"summary":"The running (or last) deployment with per-server progress, plus history.","operationId":"list_deployments","responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentList"}}}}}},"post":{"tags":["Deployments"],"summary":"Start a rolling update (canary, then batches, auto-rollback). One at a time. Rate limited.","operationId":"create_deployment","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeployRequest"}}},"required":true},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Deployment"}}}},"409":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorBody"}}}}}}},"/api/v1/deployments/current/{action}":{"post":{"tags":["Deployments"],"summary":"Pause, resume or cancel (cancel rolls back) the running deployment. Rate limited.","operationId":"control_deployment","parameters":[{"name":"action","in":"path","description":"pause | resume | cancel","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Deployment"}}}},"409":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorBody"}}}}}}},"/api/v1/edge":{"get":{"tags":["Security"],"summary":"Flood detection for your internet-facing servers.","operationId":"fleet_view","responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FleetEdgeView"}}}}}}},"/api/v1/enrollment":{"get":{"tags":["Servers"],"summary":"Enrollment tokens, install commands and the servers that joined with them.","operationId":"view","responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnrollmentView"}}}}}}},"/api/v1/enrollment/tokens":{"post":{"tags":["Servers"],"summary":"Create an enrollment token. Admin only.","operationId":"create","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NewToken"}}},"required":true},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatedToken"}}}}}}},"/api/v1/enrollment/tokens/{id}":{"delete":{"tags":["Servers"],"summary":"Revoke a token (servers that already joined stay). Admin only.","operationId":"revoke","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnrollToken"}}}}}}},"/api/v1/events":{"get":{"tags":["System"],"summary":"Timeline: blocks, deployments, alerts, restarts, servers going down and up.","operationId":"list_events","parameters":[{"name":"limit","in":"query","description":"1-300","required":false,"schema":{"type":["integer","null"],"minimum":0}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Event"}}}}}}}},"/api/v1/fleet":{"get":{"tags":["Servers"],"summary":"Fleet-wide counts by status, role, region and version.","operationId":"fleet","responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FleetSummary"}}}}}}},"/api/v1/incidents":{"get":{"tags":["Incidents"],"summary":"Incidents, newest first, with MTTA/MTTR.","operationId":"list","parameters":[{"name":"state","in":"query","description":"\"open\" or \"resolved\"","required":false,"schema":{"type":["string","null"]}},{"name":"format","in":"query","description":"\"csv\" for a download","required":false,"schema":{"type":["string","null"]}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IncidentList"}}}}}}},"/api/v1/incidents/{id}":{"get":{"tags":["Incidents"],"summary":"One incident with its full timeline.","operationId":"get","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Incident"}}}},"404":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorBody"}}}}}}},"/api/v1/incidents/{id}/ack":{"post":{"tags":["Incidents"],"summary":"Acknowledge: you're on it (stops escalation).","operationId":"ack","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Incident"}}}},"403":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorBody"}}}},"409":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorBody"}}}}}}},"/api/v1/incidents/{id}/insight":{"get":{"tags":["Incidents"],"summary":"The diagnostic insight for one incident.","operationId":"for_incident","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Insight"}}}},"404":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorBody"}}}}}}},"/api/v1/incidents/{id}/notes":{"post":{"tags":["Incidents"],"summary":"Add a note to the timeline (findings, actions taken, links).","operationId":"note","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","format":"int64"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NoteRequest"}}},"required":true},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Incident"}}}},"400":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorBody"}}}},"403":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorBody"}}}}}}},"/api/v1/incidents/{id}/resolve":{"post":{"tags":["Incidents"],"summary":"Resolve by hand (for example after a fix that the alerts haven't caught up with).","operationId":"resolve","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Incident"}}}},"403":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorBody"}}}},"409":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorBody"}}}}}}},"/api/v1/insights":{"get":{"tags":["Reliability"],"summary":"Uptime over time, where downtime concentrates, the weakest servers, capacity forecasts and recommendations.","operationId":"view","parameters":[{"name":"days","in":"query","description":"7, 14, 30 or 90","required":false,"schema":{"type":["integer","null"],"format":"int64"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InsightsView"}}}}}}},"/api/v1/insights/diagnostic":{"get":{"tags":["Incidents"],"summary":"Diagnostic insights for every open incident.","operationId":"open","responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Insight"}}}}}}}},"/api/v1/integrity":{"get":{"tags":["Security"],"summary":"File integrity: what's watched, and every change with its verdict.","operationId":"view","parameters":[{"name":"show","in":"query","description":"open, suspicious, unreviewed, expected, all","required":false,"schema":{"type":["string","null"]}},{"name":"server","in":"query","required":false,"schema":{"type":["string","null"]}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FimView"}}}}}}},"/api/v1/integrity/{id}/accept":{"post":{"tags":["Security"],"summary":"Accept a change: it becomes part of the baseline. Admin only.","operationId":"accept","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FimEvent"}}}}}}},"/api/v1/integrity/{id}/restore":{"post":{"tags":["Security"],"summary":"Restore the file from the baseline (or remove it if it was created). Admin only.","operationId":"restore","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"202":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FimEvent"}}}}}}},"/api/v1/invites/{token}":{"get":{"tags":["Account"],"summary":"What an invitation link is for (public: the link itself is the secret).","operationId":"invite_info","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InviteInfo"}}}},"404":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorBody"}}}}}}},"/api/v1/invites/{token}/accept":{"post":{"tags":["Account"],"summary":"Accept an invitation: signed in with the invited address, or by creating an account.","operationId":"accept_invite","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AcceptInvite"}}},"required":true},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Profile"}}}},"400":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorBody"}}}}}}},"/api/v1/logs":{"get":{"tags":["Logs"],"summary":"Search structured logs: full text (`q`), level, server, service, time range; newest first.","operationId":"search_logs","parameters":[{"name":"q","in":"query","description":"Full-text search (words, \"quoted phrases\", -exclusions)","required":false,"schema":{"type":["string","null"]}},{"name":"level","in":"query","description":"debug, info, warn, error (comma separated)","required":false,"schema":{"type":["string","null"]}},{"name":"server","in":"query","required":false,"schema":{"type":["string","null"]}},{"name":"service","in":"query","required":false,"schema":{"type":["string","null"]}},{"name":"from","in":"query","description":"ISO-8601 start","required":false,"schema":{"type":["string","null"],"format":"date-time"}},{"name":"to","in":"query","description":"ISO-8601 end","required":false,"schema":{"type":["string","null"],"format":"date-time"}},{"name":"before","in":"query","description":"Return rows with id below this (pagination cursor from `next_cursor`)","required":false,"schema":{"type":["integer","null"],"format":"int64"}},{"name":"limit","in":"query","description":"1-500, default 100","required":false,"schema":{"type":["integer","null"],"format":"int64"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LogPage"}}}}}}},"/api/v1/maintenance":{"get":{"tags":["Incidents"],"summary":"Maintenance windows (scheduled, active and finished in the last 7 days).","operationId":"list_windows","responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/WindowView"}}}}}}},"post":{"tags":["Incidents"],"summary":"Schedule a maintenance window. Alerts on covered servers are still recorded but open no incidents and page nobody.","operationId":"create_window","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WindowRequest"}}},"required":true},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MaintenanceWindow"}}}},"400":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorBody"}}}},"403":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorBody"}}}}}}},"/api/v1/maintenance/{id}":{"delete":{"tags":["Incidents"],"summary":"End or cancel a window now.","operationId":"delete_window","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"204":{"description":""},"403":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorBody"}}}},"404":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorBody"}}}}}}},"/api/v1/network":{"get":{"tags":["Network"],"summary":"Packet loss, latency, jitter and DNS across the fleet, by region and resolver, plus the monitor's own DNS checks.","operationId":"view","responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NetworkView"}}}}}}},"/api/v1/notifications":{"get":{"tags":["Incidents"],"summary":"Channels and recent deliveries.","operationId":"overview","responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotificationOverview"}}}}}}},"/api/v1/notifications/channels":{"post":{"tags":["Incidents"],"summary":"Add a channel.","operationId":"create","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChannelRequest"}}},"required":true},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChannelSaved"}}}},"400":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorBody"}}}},"403":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorBody"}}}}}}},"/api/v1/notifications/channels/{id}":{"put":{"tags":["Incidents"],"summary":"Change a channel (its kind stays the same; an empty address keeps the current one).","operationId":"update","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","format":"int64"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChannelRequest"}}},"required":true},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChannelSaved"}}}},"400":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorBody"}}}},"404":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorBody"}}}}}},"delete":{"tags":["Incidents"],"summary":"Remove a channel.","operationId":"delete","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"204":{"description":""},"404":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorBody"}}}}}}},"/api/v1/notifications/channels/{id}/secret":{"post":{"tags":["Incidents"],"summary":"Make a new signing secret for a webhook (the old one stops working at once).","operationId":"rotate","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChannelSaved"}}}},"400":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorBody"}}}},"404":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorBody"}}}}}}},"/api/v1/notifications/channels/{id}/test":{"post":{"tags":["Incidents"],"summary":"Send a test message on a channel now and say how it went.","operationId":"test","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TestResult"}}}},"404":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorBody"}}}},"429":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorBody"}}}}}}},"/api/v1/org":{"put":{"tags":["Account"],"summary":"Rename the organization (owners).","operationId":"rename_org","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrgRename"}}},"required":true},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TeamView"}}}}}}},"/api/v1/org/support-access":{"put":{"tags":["Account"],"summary":"Let ServerIntel support look at this organization, read-only, for a limited time (owners).","operationId":"support_access","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SupportAccess"}}},"required":true},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TeamView"}}}}}}},"/api/v1/plans":{"get":{"tags":["Billing"],"summary":"The price list (public).","operationId":"plans","responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Pricing"}}}}}}},"/api/v1/ports":{"get":{"tags":["Network"],"summary":"Every server's listening ports, whether they answer, and anything exposed that shouldn't be.","operationId":"ports","responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PortsView"}}}}}}},"/api/v1/reports/availability":{"get":{"tags":["Reliability"],"summary":"Availability report (default: the last 7 days), as JSON or CSV.","operationId":"report","parameters":[{"name":"days","in":"query","description":"days to cover (1-7, default 7)","required":false,"schema":{"type":["integer","null"],"format":"int64"}},{"name":"format","in":"query","description":"\"csv\" for per-server availability as a download","required":false,"schema":{"type":["string","null"]}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Report"}}}},"503":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorBody"}}}}}}},"/api/v1/reports/executive.pdf":{"get":{"tags":["Reliability"],"summary":"The executive reliability report: availability, where downtime comes from, recommendations, capacity, incidents, self-healing, security and network. A designed PDF.","operationId":"pdf","parameters":[{"name":"days","in":"query","description":"7, 14, 30 (default) or 90","required":false,"schema":{"type":["integer","null"],"format":"int64"}},{"name":"format","in":"query","description":"`json` for the data instead of the PDF","required":false,"schema":{"type":["string","null"]}}],"responses":{"200":{"description":"","content":{"application/pdf":{}}}}}},"/api/v1/security/harden":{"post":{"tags":["Security"],"summary":"Apply a hardening check's remediation on every server failing it.","operationId":"harden","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HardenRequest"}}},"required":true},"responses":{"202":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Dispatched"}}}},"403":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorBody"}}}},"404":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorBody"}}}}}}},"/api/v1/security/patch":{"post":{"tags":["Security"],"summary":"Upgrade the vulnerable package to the fixed version on every affected server.","operationId":"patch","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PatchRequest"}}},"required":true},"responses":{"202":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Dispatched"}}}},"403":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorBody"}}}},"404":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorBody"}}}}}}},"/api/v1/security/posture":{"get":{"tags":["Security"],"summary":"Fleet security posture: vulnerabilities, hardening checks and per-server scores.","operationId":"posture","responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PostureView"}}}}}}},"/api/v1/security/update":{"post":{"tags":["Security"],"summary":"Install a waiting security update on every server that has it.","operationId":"install_update","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRequest"}}},"required":true},"responses":{"202":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Dispatched"}}}},"403":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorBody"}}}},"404":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorBody"}}}}}}},"/api/v1/self-healing":{"get":{"tags":["Reliability"],"summary":"Self-healing runbooks, recent runs and what they achieved.","operationId":"view","responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HealView"}}}}}}},"/api/v1/self-healing/policy":{"put":{"tags":["Reliability"],"summary":"Pause self-healing, or set a runbook to auto / approve / off. Admin only.","operationId":"set_policy","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PolicyChange"}}},"required":true},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Policy"}}}}}}},"/api/v1/self-healing/runs/{id}":{"get":{"tags":["Reliability"],"summary":"One run with every step.","operationId":"get_run","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Run"}}}}}}},"/api/v1/self-healing/runs/{id}/approve":{"post":{"tags":["Reliability"],"summary":"Approve a run that's waiting. Admin only.","operationId":"approve","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Run"}}}}}}},"/api/v1/self-healing/runs/{id}/dismiss":{"post":{"tags":["Reliability"],"summary":"Dismiss a run that's waiting (decide not to act). Admin only.","operationId":"dismiss","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Run"}}}}}}},"/api/v1/servers":{"get":{"tags":["Servers"],"summary":"List every server with its live numbers.","operationId":"list_servers","parameters":[{"name":"status","in":"query","description":"healthy, degraded, updating, down","required":false,"schema":{"type":["string","null"]}},{"name":"role","in":"query","required":false,"schema":{"type":["string","null"]}},{"name":"region","in":"query","required":false,"schema":{"type":["string","null"]}},{"name":"q","in":"query","description":"matches id or hostname","required":false,"schema":{"type":["string","null"]}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ServerSummary"}}}}}}}},"/api/v1/servers/{id}":{"get":{"tags":["Servers"],"summary":"One server: static facts, latest full frame (processes, containers), active alerts.","operationId":"get_server","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServerDetail"}}}},"404":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorBody"}}}}}},"delete":{"tags":["Servers"],"summary":"Remove a server: it stops being monitored and its agent is refused until it's added again. Admins.","operationId":"remove_server","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Removed"}}}},"404":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorBody"}}}}}}},"/api/v1/servers/{id}/forecast":{"get":{"tags":["Reliability"],"summary":"Forecasts for one server.","operationId":"server_forecast","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Forecast"}}}}}}}},"/api/v1/servers/{id}/inventory":{"get":{"tags":["Security"],"summary":"One server's packages (with matching CVEs), hardening checks and certificates.","operationId":"server_inventory","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InventoryView"}}}},"404":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorBody"}}}}}}},"/api/v1/servers/{id}/metrics":{"get":{"tags":["Servers"],"summary":"CPU, memory, disk, network, requests, errors and response time over time.","operationId":"server_metrics","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"range","in":"query","description":"15m (1-second points, from memory), 1h, 6h, 24h, 7d (from PostgreSQL)","required":false,"schema":{"type":["string","null"]}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MetricsResponse"}}}},"404":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorBody"}}}}}}},"/api/v1/servers/{id}/restart":{"post":{"tags":["Actions"],"summary":"Restart a service on a (simulated) server. Rate limited.","operationId":"restart_service","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RestartRequest"}}},"required":true},"responses":{"202":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Accepted"}}}},"404":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorBody"}}}},"429":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorBody"}}}}}}},"/api/v1/servers/{id}/uptime":{"get":{"tags":["Servers"],"summary":"Uptime percentages, outage incidents and response-time history.","operationId":"server_uptime","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UptimeResponse"}}}},"404":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorBody"}}}}}}},"/api/v1/services":{"get":{"tags":["Servers"],"summary":"Every service across the fleet: health, resources, restarts.","operationId":"services","responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServicesView"}}}}}}},"/api/v1/site":{"get":{"tags":["Site"],"summary":"The site's mode (public).","operationId":"public","responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicSite"}}}}}}},"/api/v1/slos":{"get":{"tags":["Reliability"],"summary":"Service level objectives over a rolling 7-day window: SLI, error budget and burn rates.","operationId":"list","responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SloStatus"}}}}},"503":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorBody"}}}}}}},"/api/v1/system":{"get":{"tags":["System"],"summary":"How ServerIntel itself is doing: throughput, backpressure, latency percentiles, memory.","operationId":"system","responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SystemStats"}}}}}}},"/api/v1/team":{"get":{"tags":["Account"],"summary":"Members of your organization and open invitations.","operationId":"team","responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TeamView"}}}}}}},"/api/v1/team/invites":{"post":{"tags":["Account"],"summary":"Invite someone by email (owners, and members allowed to invite). The link works for 7 days.","operationId":"invite","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InviteRequest"}}},"required":true},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TeamView"}}}}}}},"/api/v1/team/invites/{id}":{"delete":{"tags":["Account"],"summary":"Cancel an invitation.","operationId":"cancel_invite","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TeamView"}}}}}}},"/api/v1/team/members/{user_id}":{"put":{"tags":["Account"],"summary":"Change what a member may do, or make them an owner (owners only).","operationId":"set_member_role","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"integer","format":"int64"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MemberChange"}}},"required":true},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TeamView"}}}}}},"delete":{"tags":["Account"],"summary":"Remove a member (owners, and members allowed to invite; anyone may leave).","operationId":"remove_member","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TeamView"}}}}}}},"/api/v1/team/presence":{"get":{"tags":["Account"],"summary":"Who in your organization has ServerIntel open right now (online first).","operationId":"presence","responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/PresenceRow"}}}}}}}},"/api/v1/threats/feed":{"get":{"tags":["Threats"],"summary":"The most recent security events, newest first.","operationId":"threat_feed","parameters":[{"name":"limit","in":"query","description":"1-300","required":false,"schema":{"type":["integer","null"],"minimum":0}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/FeedItem"}}}}}}}},"/api/v1/threats/history":{"get":{"tags":["Threats"],"summary":"Security events per kind over time (1h = per minute, 24h = per 15 minutes).","operationId":"threat_history","parameters":[{"name":"range","in":"query","description":"15m (1-second points, from memory), 1h, 6h, 24h, 7d (from PostgreSQL)","required":false,"schema":{"type":["string","null"]}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ThreatBucket"}}}}}}}},"/api/v1/threats/policy":{"get":{"tags":["Threats"],"summary":"Current threat policy.","operationId":"get_policy","responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Policy"}}}}}},"put":{"tags":["Threats"],"summary":"Change the auto-block policy. Rate limited.","operationId":"put_policy","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Policy"}}},"required":true},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Policy"}}}},"400":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiErrorBody"}}}}}}},"/api/v1/threats/summary":{"get":{"tags":["Threats"],"summary":"Live threat picture: rate, totals by kind and country, top sources.","operationId":"threat_summary","responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ThreatSummary"}}}}}}},"/api/v1/users/{id}/avatar":{"get":{"tags":["Account"],"summary":"Someone's profile picture: yours, or someone in one of your organizations.","operationId":"get_avatar","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"200":{"description":""},"404":{"description":""}}}},"/api/v1/waitlist":{"post":{"tags":["Site"],"summary":"Join the launch list (while the site is coming soon).","operationId":"join_waitlist","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Waitlist"}}},"required":true},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Ok"}}}}}}}},"components":{"schemas":{"AcceptInvite":{"type":"object","properties":{"accept_terms":{"type":"boolean"},"name":{"type":["string","null"],"description":"for a new account"},"password":{"type":["string","null"]}}},"Accepted":{"type":"object","required":["accepted","message"],"properties":{"accepted":{"type":"boolean"},"message":{"type":"string"}}},"AffectedServer":{"type":"object","required":["server_id","version"],"properties":{"server_id":{"type":"string"},"version":{"type":"string"}}},"Alert":{"type":"object","required":["id","rule_id","rule_name","metric","severity","server_id","started_at","threshold","silenced"],"properties":{"id":{"type":"integer","format":"int64"},"metric":{"$ref":"#/components/schemas/Metric"},"peak":{"type":["number","null"],"format":"float","description":"Worst value seen while firing."},"resolved_at":{"type":["string","null"],"format":"date-time"},"rule_id":{"type":"integer","format":"int64"},"rule_name":{"type":"string"},"server_id":{"type":"string"},"severity":{"$ref":"#/components/schemas/Severity"},"silenced":{"type":"boolean","description":"The server was in a maintenance window: recorded, but no incident or notification."},"started_at":{"type":"string","format":"date-time"},"threshold":{"type":"number","format":"double"}}},"Anomaly":{"type":"object","required":["id","ts","server_id","metric","value","expected","z"],"properties":{"expected":{"type":"number","format":"double"},"id":{"type":"integer","format":"int64"},"metric":{"type":"string"},"server_id":{"type":"string"},"ts":{"type":"string","format":"date-time"},"value":{"type":"number","format":"double"},"z":{"type":"number","format":"double","description":"standard deviations from normal (signed)"}}},"Answer":{"type":"object","required":["understood","headline","columns","rows","links","suggestions"],"properties":{"columns":{"type":"array","items":{"type":"string"}},"headline":{"type":"string","description":"a one-line answer"},"links":{"type":"array","items":{"type":["string","null"]},"description":"per row: an in-app link"},"rows":{"type":"array","items":{"type":"array","items":{"type":"string"}}},"suggestions":{"type":"array","items":{"type":"string"},"description":"try these instead (when nothing matched)"},"understood":{"type":"string","description":"how the question was understood"}}},"ApiErrorBody":{"type":"object","required":["error"],"properties":{"error":{"type":"string"}}},"Ask":{"type":"object","required":["q"],"properties":{"q":{"type":"string"}}},"Attacker":{"type":"object","required":["ip","country","events","score_window","kinds","targets","first_seen","last_seen","blocked"],"properties":{"blocked":{"type":"boolean"},"country":{"type":"string"},"events":{"type":"integer","format":"int64","minimum":0},"first_seen":{"type":"string","format":"date-time"},"ip":{"type":"string"},"kinds":{"type":"array","items":{"type":"string"}},"last_seen":{"type":"string","format":"date-time"},"score_window":{"type":"integer","format":"int32","minimum":0},"targets":{"type":"integer","minimum":0}}},"AuditEntry":{"type":"object","required":["id","ts","actor","action","target","detail","result","ip"],"properties":{"action":{"type":"string","description":"e.g. \"block_ip\", \"login\", \"incident.ack\""},"actor":{"type":"string","description":"email address, or \"anonymous\""},"detail":{"type":"string"},"id":{"type":"integer","format":"int64"},"ip":{"type":"string","description":"visitor address with the last part masked"},"result":{"type":"string","description":"\"ok\", \"denied\" or \"failed\""},"role":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/Role"}]},"target":{"type":"string"},"ts":{"type":"string","format":"date-time"}}},"BillingProfile":{"type":"object","description":"What appears on this organization's invoices.","properties":{"accent":{"type":"string","description":"accent color for invoices, #rrggbb"},"address":{"type":"string","description":"street, city, postcode, country: one line each"},"company":{"type":"string","description":"legal or trading name (defaults to the organization's name)"},"email":{"type":"string","description":"where invoices and receipts are sent (defaults to the owner)"},"notes":{"type":"string","description":"a note printed at the bottom of every invoice"},"po_number":{"type":"string","description":"purchase order or reference printed on every invoice"},"tax_id":{"type":"string","description":"VAT, GST, EIN …"}}},"BillingView":{"type":"object","required":["plan","plan_name","comped","servers_used","people","invoices","profile","org_name","has_logo","payments_enabled","can_manage","email_verified","pricing"],"properties":{"can_manage":{"type":"boolean","description":"you're an owner (billing changes are for owners)"},"comped":{"type":"boolean"},"email_verified":{"type":"boolean"},"has_logo":{"type":"boolean"},"invoices":{"type":"array","items":{"$ref":"#/components/schemas/InvoiceRow"}},"org_name":{"type":"string"},"payments_enabled":{"type":"boolean","description":"Stripe is configured (otherwise nobody can subscribe yet)"},"people":{"type":"integer","description":"people in the organization now","minimum":0},"plan":{"type":"string","description":"none | standard | unlimited"},"plan_name":{"type":"string"},"pricing":{"$ref":"#/components/schemas/Pricing"},"profile":{"$ref":"#/components/schemas/BillingProfile"},"server_limit":{"type":["integer","null"],"description":"servers paid for (None: no limit)","minimum":0},"servers_used":{"type":"integer","minimum":0},"subscription":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/Subscription"}]}}},"Block":{"type":"object","required":["ip","reason","source","created_at","dropped"],"properties":{"created_at":{"type":"string","format":"date-time"},"dropped":{"type":"integer","format":"int64","description":"Attempts dropped by agent firewalls since the block.","minimum":0},"expires_at":{"type":["string","null"],"format":"date-time"},"ip":{"type":"string"},"reason":{"type":"string"},"source":{"type":"string","description":"\"auto\" or \"manual\""}}},"BlockRequest":{"type":"object","required":["ip"],"properties":{"ip":{"type":"string"},"minutes":{"type":["integer","null"],"format":"int32","description":"Expire after this many minutes (default 60; 0 = never)","minimum":0},"reason":{"type":["string","null"]}}},"BudgetPoint":{"type":"object","required":["t","remaining_pct"],"properties":{"remaining_pct":{"type":"number","format":"double","description":"share of the window's error budget still left at this hour, %"},"t":{"type":"string","format":"date-time"}}},"CapacityRow":{"type":"object","required":["role","servers","cpu_p95_now","cpu_trend_per_week","cpu_p95_in_30d","cpu_p95_in_90d","mem_max_now","disk_max_now","action","recommendation"],"properties":{"action":{"type":"string","description":"add, ok, downsize, expand-disk"},"cpu_p95_in_30d":{"type":"number","format":"double"},"cpu_p95_in_90d":{"type":"number","format":"double"},"cpu_p95_now":{"type":"number","format":"double"},"cpu_trend_per_week":{"type":"number","format":"double","description":"percentage points per week"},"disk_full_days":{"type":["number","null"],"format":"double","description":"days until the worst server's disk reaches 90 %"},"disk_max_now":{"type":"number","format":"double"},"mem_max_now":{"type":"number","format":"double"},"recommendation":{"type":"string"},"role":{"type":"string"},"servers":{"type":"integer","minimum":0}}},"CapacityView":{"type":"object","required":["forecasts","roles","anomalies"],"properties":{"anomalies":{"type":"array","items":{"$ref":"#/components/schemas/Anomaly"}},"forecasts":{"type":"array","items":{"$ref":"#/components/schemas/Forecast"}},"roles":{"type":"array","items":{"$ref":"#/components/schemas/RoleCapacity"}}}},"CertHost":{"type":"object","required":["server_id","issuer","not_after","fingerprint"],"properties":{"fingerprint":{"type":"string"},"issuer":{"type":"string"},"not_after":{"type":"string","format":"date-time"},"server_id":{"type":"string"}}},"CertificatesView":{"type":"object","required":["domains","external"],"properties":{"domains":{"type":"array","items":{"$ref":"#/components/schemas/DomainView"}},"external":{"type":"array","items":{"$ref":"#/components/schemas/TlsCheck"},"description":"real TLS handshakes from this server to its own public domains"}}},"ChannelRequest":{"type":"object","required":["name","min_severity","events"],"properties":{"address":{"type":"string","description":"email: \"owners\" or addresses separated by commas; slack: the incoming-webhook URL;\npagerduty: the Events API v2 integration key; webhook: its HTTPS URL.\nWhen editing, leave empty to keep the current one."},"enabled":{"type":"boolean"},"events":{"type":"array","items":{"type":"string"}},"kind":{"type":["string","null"],"description":"email, slack, pagerduty or webhook (can't be changed later)"},"min_severity":{"$ref":"#/components/schemas/Severity"},"name":{"type":"string"}}},"ChannelSaved":{"type":"object","required":["channel"],"properties":{"channel":{"$ref":"#/components/schemas/ChannelView"},"signing_secret":{"type":["string","null"],"description":"webhooks only, shown once: verify `X-ServerIntel-Signature` with it"}}},"ChannelView":{"type":"object","required":["id","kind","name","target","min_severity","events","enabled","created_at","created_by","last_detail"],"properties":{"created_at":{"type":"string","format":"date-time"},"created_by":{"type":"string"},"enabled":{"type":"boolean"},"events":{"type":"array","items":{"type":"string"}},"id":{"type":"integer","format":"int64"},"kind":{"type":"string"},"last_at":{"type":["string","null"],"format":"date-time"},"last_detail":{"type":"string"},"last_status":{"type":["string","null"]},"min_severity":{"$ref":"#/components/schemas/Severity"},"name":{"type":"string"},"target":{"type":"string","description":"where it goes, with secrets masked (e.g. `hooks.slack.com/…/a1b2`)"}}},"CheckResultView":{"type":"object","required":["id","title","pass","detail"],"properties":{"detail":{"type":"string"},"id":{"type":"string"},"pass":{"type":"boolean"},"title":{"type":"string"}}},"CheckView":{"type":"object","required":["id","title","weight","remediation","passing","failing"],"properties":{"failing":{"type":"array","items":{"$ref":"#/components/schemas/FailingServer"}},"id":{"type":"string"},"passing":{"type":"integer","minimum":0},"remediation":{"type":"string"},"title":{"type":"string"},"weight":{"type":"integer","format":"int32","minimum":0}}},"CheckoutRequest":{"type":"object","required":["servers","interval"],"properties":{"interval":{"type":"string","description":"month | year"},"servers":{"type":"integer","format":"int64","description":"how many servers to pay for (1–1000)"}}},"ContainerSample":{"type":"object","required":["name","image","cpu","mem_mb","state"],"properties":{"cpu":{"type":"number","format":"float"},"image":{"type":"string"},"mem_mb":{"type":"number","format":"float"},"name":{"type":"string"},"state":{"type":"string","description":"running, restarting, exited"}}},"CreatedToken":{"type":"object","required":["token","secret"],"properties":{"secret":{"type":"string","description":"the full token, shown once"},"token":{"$ref":"#/components/schemas/EnrollToken"}}},"DayPoint":{"type":"object","required":["day","availability","downtime_min","outages","backfill"],"properties":{"availability":{"type":"number","format":"double"},"backfill":{"type":"boolean"},"day":{"type":"string"},"downtime_min":{"type":"integer","format":"int64"},"outages":{"type":"integer","format":"int64"}}},"Delivery":{"type":"object","required":["id","ts","channel","channel_kind","incident_id","event","status","summary","payload"],"properties":{"channel":{"type":"string"},"channel_id":{"type":["integer","null"],"format":"int64"},"channel_kind":{"type":"string"},"detail":{"type":"string","description":"e.g. `HTTP 200`, or why it failed"},"event":{"type":"string"},"id":{"type":"integer","format":"int64"},"incident_id":{"type":"integer","format":"int64","description":"0 for a test message"},"payload":{"description":"what was sent (secrets masked)"},"status":{"type":"string","description":"sending, sent, failed, or not_sent (demo servers)"},"summary":{"type":"string"},"ts":{"type":"string","format":"date-time"}}},"DeployRequest":{"type":"object","required":["version"],"properties":{"strategy":{"$ref":"#/components/schemas/Strategy"},"version":{"type":"string","description":"e.g. 4.13.0 (a version containing \"bad\" fails its health checks — try it)"}}},"Deployment":{"type":"object","required":["id","version","from_version","state","strategy","batches","current_batch","targets","message","created_at"],"properties":{"batches":{"type":"integer","minimum":0},"created_at":{"type":"string","format":"date-time"},"current_batch":{"type":"integer","minimum":0},"finished_at":{"type":["string","null"],"format":"date-time"},"from_version":{"type":"string"},"id":{"type":"integer","format":"int64"},"message":{"type":"string"},"state":{"type":"string","description":"running, paused, succeeded, failed, rolled_back, cancelled"},"strategy":{"$ref":"#/components/schemas/Strategy"},"targets":{"type":"array","items":{"$ref":"#/components/schemas/Target"}},"version":{"type":"string"}}},"DeploymentList":{"type":"object","required":["history"],"properties":{"current":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/Deployment"}]},"history":{"type":"array","items":{"$ref":"#/components/schemas/DeploymentRow"}}}},"DeploymentRow":{"type":"object","required":["id","version","from_version","state","strategy","targets","succeeded","failed","message","created_at"],"properties":{"created_at":{"type":"string","format":"date-time"},"failed":{"type":"integer","format":"int32"},"finished_at":{"type":["string","null"],"format":"date-time"},"from_version":{"type":"string"},"id":{"type":"integer","format":"int64"},"message":{"type":"string"},"state":{"type":"string"},"strategy":{"type":"object"},"succeeded":{"type":"integer","format":"int32"},"targets":{"type":"integer","format":"int32"},"version":{"type":"string"}}},"Dispatched":{"type":"object","required":["sent","message"],"properties":{"message":{"type":"string"},"sent":{"type":"integer","minimum":0}}},"DnsCheck":{"type":"object","required":["ts","domain","resolver","label","answers"],"properties":{"answers":{"type":"array","items":{"type":"string"}},"domain":{"type":"string"},"label":{"type":"string"},"ms":{"type":["number","null"],"format":"float","description":"None = no answer within 2 s"},"rcode":{"type":["integer","null"],"format":"int32","minimum":0},"resolver":{"type":"string"},"ts":{"type":"string","format":"date-time"}}},"DnsProbe":{"type":"object","description":"One resolver's answer time.","required":["resolver","label","primary"],"properties":{"label":{"type":"string","description":"what it is, e.g. `VPC resolver`"},"ms":{"type":["number","null"],"format":"float"},"primary":{"type":"boolean"},"resolver":{"type":"string","description":"address, e.g. `10.0.0.2` or `1.1.1.1`"}}},"DomainView":{"type":"object","required":["domain","status","days_left","issuer","not_after","hosts","distinct_certificates"],"properties":{"days_left":{"type":"integer","format":"int64","description":"days until the earliest expiry among the hosts serving it"},"distinct_certificates":{"type":"integer","minimum":0},"domain":{"type":"string"},"hosts":{"type":"array","items":{"$ref":"#/components/schemas/CertHost"}},"issuer":{"type":"string"},"not_after":{"type":"string","format":"date-time"},"status":{"type":"string","description":"ok, expiring (<30 d), critical (<7 d), expired, or mismatch (hosts serve different certificates)"}}},"EdgePoint":{"type":"object","required":["t","rps","baseline","flood_eps","under_attack"],"properties":{"baseline":{"type":"number","format":"double"},"flood_eps":{"type":"number","format":"double","description":"flood events reported by agents per second"},"rps":{"type":"number","format":"double","description":"internet-facing requests/s"},"t":{"type":"integer","format":"int64"},"under_attack":{"type":"boolean"}}},"EnrollToken":{"type":"object","required":["id","label","prefix","created_by","created_at","expires_at","max_uses","uses","revoked","servers"],"properties":{"created_at":{"type":"string","format":"date-time"},"created_by":{"type":"string"},"expires_at":{"type":"string","format":"date-time"},"id":{"type":"integer","format":"int64"},"label":{"type":"string"},"max_uses":{"type":"integer","format":"int32","minimum":0},"prefix":{"type":"string","description":"first characters, to recognise it"},"revoked":{"type":"boolean"},"role":{"type":["string","null"]},"servers":{"type":"array","items":{"type":"string"}},"uses":{"type":"integer","format":"int32","minimum":0}}},"EnrolledServer":{"type":"object","required":["id","role","region","token","status"],"properties":{"connected_since":{"type":["string","null"],"format":"date-time"},"id":{"type":"string"},"region":{"type":"string"},"role":{"type":"string"},"status":{"$ref":"#/components/schemas/Status"},"token":{"type":"string"}}},"EnrollmentView":{"type":"object","required":["agent_url","tokens","methods","enrolled","roles","regions","servers_used","plan"],"properties":{"agent_url":{"type":"string"},"enrolled":{"type":"array","items":{"$ref":"#/components/schemas/EnrolledServer"}},"methods":{"type":"array","items":{"$ref":"#/components/schemas/InstallMethod"}},"plan":{"type":"string"},"regions":{"type":"array","items":{"type":"string"}},"roles":{"type":"array","items":{"type":"string"}},"server_limit":{"type":["integer","null"],"description":"None: no limit","minimum":0},"servers_used":{"type":"integer","minimum":0},"tokens":{"type":"array","items":{"$ref":"#/components/schemas/EnrollToken"}}}},"Event":{"type":"object","required":["id","ts","kind","message","data"],"properties":{"data":{"type":"object"},"id":{"type":"integer","format":"int64"},"kind":{"type":"string","description":"alert_fired, alert_resolved, ip_blocked, ip_unblocked, deploy, restart, agent, demo_reset"},"message":{"type":"string"},"server_id":{"type":["string","null"]},"ts":{"type":"string","format":"date-time"}}},"Exposure":{"type":"object","required":["server_id","role","port","service"],"properties":{"port":{"type":"integer","format":"int32","minimum":0},"role":{"type":"string"},"run_id":{"type":["integer","null"],"format":"int64","description":"a self-healing run waiting for approval to close it"},"server_id":{"type":"string"},"service":{"type":"string"}}},"ExternalDns":{"type":"object","required":["domain","resolver","label","success_pct","spark"],"properties":{"avg_ms":{"type":["number","null"],"format":"float"},"domain":{"type":"string"},"label":{"type":"string"},"last":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/DnsCheck"}]},"resolver":{"type":"string"},"spark":{"type":"array","items":{"type":["number","null"],"format":"float"},"description":"the last hour, oldest first (ms, null = timeout)"},"success_pct":{"type":"number","format":"float"}}},"FailingServer":{"type":"object","required":["server_id","detail"],"properties":{"detail":{"type":"string"},"server_id":{"type":"string"}}},"FeedItem":{"type":"object","description":"One event as shown in the live feed.","required":["ts","server_id","src_ip","country","kind","severity","target_port","detail","dropped"],"properties":{"country":{"type":"string"},"detail":{"type":"string"},"dropped":{"type":"boolean"},"kind":{"type":"string"},"server_id":{"type":"string"},"severity":{"type":"integer","format":"int32","minimum":0},"src_ip":{"type":"string"},"target_port":{"type":"integer","format":"int32","minimum":0},"ts":{"type":"string","format":"date-time"}}},"FimEvent":{"type":"object","required":["id","server_id","role","ts","path","change","verdict","reason","review"],"properties":{"change":{"type":"string"},"detail":{"type":["string","null"]},"id":{"type":"integer","format":"int64"},"incident_id":{"type":["integer","null"],"format":"int64"},"mode":{"type":["string","null"]},"new_hash":{"type":["string","null"]},"old_hash":{"type":["string","null"]},"path":{"type":"string"},"process":{"type":["string","null"]},"reason":{"type":"string","description":"why it got that verdict"},"review":{"$ref":"#/components/schemas/Review"},"reviewed_by":{"type":["string","null"]},"role":{"type":"string"},"server_id":{"type":"string"},"ts":{"type":"string","format":"date-time"},"verdict":{"$ref":"#/components/schemas/Verdict"}}},"FimStats":{"type":"object","required":["servers_watched","files_watched","changes_24h","expected_24h","unreviewed_open","suspicious_open"],"properties":{"changes_24h":{"type":"integer","minimum":0},"expected_24h":{"type":"integer","minimum":0},"files_watched":{"type":"integer","format":"int64","minimum":0},"servers_watched":{"type":"integer","minimum":0},"suspicious_open":{"type":"integer","minimum":0},"unreviewed_open":{"type":"integer","minimum":0}}},"FimView":{"type":"object","required":["stats","events","critical_paths"],"properties":{"critical_paths":{"type":"array","items":{"type":"string"}},"events":{"type":"array","items":{"$ref":"#/components/schemas/FimEvent"}},"stats":{"$ref":"#/components/schemas/FimStats"}}},"Finding":{"type":"object","required":["id","severity","category","title","evidence","recommendation","impact_min_per_month","servers"],"properties":{"category":{"type":"string","description":"reliability, network, change, capacity, cost"},"evidence":{"type":"array","items":{"type":"string"}},"id":{"type":"string"},"impact_min_per_month":{"type":"number","format":"double","description":"downtime per month this finding accounts for, minutes (0 = not about downtime)"},"recommendation":{"type":"string"},"servers":{"type":"array","items":{"type":"string"}},"severity":{"type":"string","description":"critical, warning, info"},"title":{"type":"string"}}},"FleetEdgeView":{"type":"object","required":["attacks_detected","rps","baseline_rps","history"],"properties":{"attacks_detected":{"type":"integer","format":"int64","minimum":0},"baseline_rps":{"type":"number","format":"double"},"history":{"type":"array","items":{"$ref":"#/components/schemas/EdgePoint"}},"rps":{"type":"number","format":"double","description":"internet-facing requests/s now"},"under_attack_since":{"type":["string","null"],"format":"date-time"}}},"FleetSummary":{"type":"object","required":["servers","healthy","degraded","updating","down","roles","regions","versions","active_alerts","blocked_ips","threats_per_s"],"properties":{"active_alerts":{"type":"integer","minimum":0},"blocked_ips":{"type":"integer","minimum":0},"degraded":{"type":"integer","minimum":0},"down":{"type":"integer","minimum":0},"healthy":{"type":"integer","minimum":0},"regions":{"type":"object","additionalProperties":{"type":"integer","minimum":0},"propertyNames":{"type":"string"}},"roles":{"type":"object","additionalProperties":{"type":"integer","minimum":0},"propertyNames":{"type":"string"}},"servers":{"type":"integer","minimum":0},"threats_per_s":{"type":"number","format":"float"},"updating":{"type":"integer","minimum":0},"versions":{"type":"object","additionalProperties":{"type":"integer","minimum":0},"propertyNames":{"type":"string"}}}},"Forecast":{"type":"object","required":["server_id","role","resource","current_pct","growth_per_hour","full_at","hours_left","r2"],"properties":{"current_pct":{"type":"number","format":"double"},"full_at":{"type":"string","format":"date-time"},"growth_per_hour":{"type":"number","format":"double","description":"percentage points per hour"},"hours_left":{"type":"number","format":"double"},"r2":{"type":"number","format":"double"},"resource":{"type":"string","description":"disk or memory"},"role":{"type":"string"},"server_id":{"type":"string"}}},"ForgotRequest":{"type":"object","required":["email"],"properties":{"email":{"type":"string"}}},"GroupAvail":{"type":"object","required":["name","servers","availability","downtime_min","outages","share_pct"],"properties":{"availability":{"type":"number","format":"double"},"downtime_min":{"type":"integer","format":"int64"},"mttr_min":{"type":["number","null"],"format":"double"},"name":{"type":"string"},"outages":{"type":"integer","format":"int64"},"servers":{"type":"integer","minimum":0},"share_pct":{"type":"number","format":"double","description":"share of the fleet's downtime"}}},"HardenRequest":{"type":"object","required":["check"],"properties":{"check":{"type":"string"}}},"HealStats":{"type":"object","required":["runs_24h","healed_24h","escalated_24h","open","awaiting_approval","pages_prevented_24h"],"properties":{"awaiting_approval":{"type":"integer","minimum":0},"escalated_24h":{"type":"integer","minimum":0},"healed_24h":{"type":"integer","minimum":0},"median_heal_secs":{"type":["integer","null"],"format":"int64"},"open":{"type":"integer","minimum":0},"pages_prevented_24h":{"type":"integer","description":"pages that didn't happen because the problem was fixed first","minimum":0},"runs_24h":{"type":"integer","minimum":0},"success_rate":{"type":["number","null"],"format":"double","description":"share of closed runs that healed without a person"}}},"HealView":{"type":"object","required":["paused","stats","runbooks","runs"],"properties":{"paused":{"type":"boolean"},"runbooks":{"type":"array","items":{"$ref":"#/components/schemas/RunbookView"}},"runs":{"type":"array","items":{"$ref":"#/components/schemas/Run"}},"stats":{"$ref":"#/components/schemas/HealStats"}}},"Hypothesis":{"type":"object","required":["cause","score","why"],"properties":{"cause":{"type":"string"},"score":{"type":"integer","format":"int32"},"why":{"type":"array","items":{"type":"string"}}}},"Incident":{"type":"object","required":["id","title","severity","state","opened_at","escalated","servers","rules","alert_ids","open_alerts","timeline"],"properties":{"acknowledged_at":{"type":["string","null"],"format":"date-time"},"acknowledged_by":{"type":["string","null"]},"alert_ids":{"type":"array","items":{"type":"integer","format":"int64"}},"escalated":{"type":"boolean"},"id":{"type":"integer","format":"int64"},"key":{"type":["string","null"],"description":"set for incidents raised by a finding rather than an alert (e.g. `cert:shop.example.com`)"},"open_alerts":{"type":"array","items":{"type":"integer","format":"int64"}},"opened_at":{"type":"string","format":"date-time"},"resolved_at":{"type":["string","null"],"format":"date-time"},"resolved_by":{"type":["string","null"]},"rules":{"type":"array","items":{"type":"string"}},"servers":{"type":"array","items":{"type":"string"}},"severity":{"$ref":"#/components/schemas/Severity"},"state":{"$ref":"#/components/schemas/IncidentState"},"timeline":{"type":"array","items":{"$ref":"#/components/schemas/TimelineEntry"}},"title":{"type":"string"}}},"IncidentList":{"type":"object","required":["stats","incidents"],"properties":{"incidents":{"type":"array","items":{"$ref":"#/components/schemas/IncidentSummary"}},"stats":{"$ref":"#/components/schemas/IncidentStats"}}},"IncidentState":{"type":"string","enum":["triggered","acknowledged","resolved"]},"IncidentStats":{"type":"object","required":["open","triggered","acknowledged","resolved_7d"],"properties":{"acknowledged":{"type":"integer","minimum":0},"mtta_secs":{"type":["number","null"],"format":"double","description":"mean time to acknowledge (seconds) over the last 7 days"},"mttr_secs":{"type":["number","null"],"format":"double","description":"mean time to resolve (seconds) over the last 7 days"},"open":{"type":"integer","minimum":0},"resolved_7d":{"type":"integer","minimum":0},"triggered":{"type":"integer","minimum":0}}},"IncidentSummary":{"type":"object","required":["id","title","severity","state","opened_at","escalated","servers","alerts","open_alerts"],"properties":{"acknowledged_by":{"type":["string","null"]},"alerts":{"type":"integer","minimum":0},"escalated":{"type":"boolean"},"id":{"type":"integer","format":"int64"},"open_alerts":{"type":"integer","minimum":0},"opened_at":{"type":"string","format":"date-time"},"resolved_at":{"type":["string","null"],"format":"date-time"},"servers":{"type":"integer","minimum":0},"severity":{"$ref":"#/components/schemas/Severity"},"state":{"$ref":"#/components/schemas/IncidentState"},"title":{"type":"string"}}},"Insight":{"type":"object","required":["incident_id","incident_title","title","confidence","summary","next_steps","evidence","hypotheses","generated_at"],"properties":{"confidence":{"type":"string","description":"low, medium, high"},"evidence":{"type":"array","items":{"type":"string"},"description":"what was looked at"},"generated_at":{"type":"string","format":"date-time"},"hypotheses":{"type":"array","items":{"$ref":"#/components/schemas/Hypothesis"},"description":"every cause considered, best first"},"incident_id":{"type":"integer","format":"int64"},"incident_title":{"type":"string"},"next_steps":{"type":"array","items":{"type":"string"}},"server_id":{"type":["string","null"]},"summary":{"type":"string"},"title":{"type":"string"}}},"InsightsView":{"type":"object","required":["days","from","to","servers","availability","downtime_min","outages","daily","by_role","by_region","heatmap","weakest","findings","capacity"],"properties":{"availability":{"type":"number","format":"double"},"backfill_until":{"type":["string","null"],"format":"date-time","description":"data before this time is simulated backfill (demo fleet)"},"by_region":{"type":"array","items":{"$ref":"#/components/schemas/GroupAvail"}},"by_role":{"type":"array","items":{"$ref":"#/components/schemas/GroupAvail"}},"capacity":{"type":"array","items":{"$ref":"#/components/schemas/CapacityRow"}},"daily":{"type":"array","items":{"$ref":"#/components/schemas/DayPoint"}},"days":{"type":"integer","format":"int64"},"downtime_min":{"type":"integer","format":"int64"},"findings":{"type":"array","items":{"$ref":"#/components/schemas/Finding"}},"from":{"type":"string","format":"date-time"},"heatmap":{"type":"array","items":{"type":"array","items":{"type":"integer","format":"int64"}},"description":"[weekday 0=Mon][hour UTC] downtime minutes"},"mtbf_hours":{"type":["number","null"],"format":"double"},"mttr_min":{"type":["number","null"],"format":"double"},"outages":{"type":"integer","format":"int64"},"servers":{"type":"integer","minimum":0},"to":{"type":"string","format":"date-time"},"weakest":{"type":"array","items":{"$ref":"#/components/schemas/WeakServer"}}}},"InstallMethod":{"type":"object","required":["id","title","description","command"],"properties":{"command":{"type":"string","description":"with `{TOKEN}` where the token goes"},"description":{"type":"string"},"id":{"type":"string"},"title":{"type":"string"}}},"IntervalChange":{"type":"object","required":["interval"],"properties":{"interval":{"type":"string","description":"month | year"}}},"InventoryView":{"type":"object","required":["server_id","packages","checks","sites"],"properties":{"checks":{"type":"array","items":{"$ref":"#/components/schemas/CheckResultView"}},"packages":{"type":"array","items":{"$ref":"#/components/schemas/PackageView"}},"received_at":{"type":["string","null"],"format":"date-time"},"server_id":{"type":"string"},"sites":{"type":"array","items":{"$ref":"#/components/schemas/SiteView"}}}},"Invite":{"type":"object","required":["id","org_id","email","role","perms","created_at","expires_at"],"properties":{"accepted_at":{"type":["string","null"],"format":"date-time"},"created_at":{"type":"string","format":"date-time"},"email":{"type":"string"},"expires_at":{"type":"string","format":"date-time"},"id":{"type":"integer","format":"int64"},"invited_by":{"type":["integer","null"],"format":"int64"},"org_id":{"type":"integer","format":"int64"},"perms":{"type":"array","items":{"$ref":"#/components/schemas/Perm"}},"role":{"$ref":"#/components/schemas/Role"}}},"InviteInfo":{"type":"object","required":["org_name","email","role","perms","expires_at","account_exists"],"properties":{"account_exists":{"type":"boolean","description":"an account with this email exists (sign in to accept)"},"email":{"type":"string"},"expires_at":{"type":"string","format":"date-time"},"inviter":{"type":["string","null"]},"org_name":{"type":"string"},"perms":{"type":"array","items":{"$ref":"#/components/schemas/Perm"},"description":"what they'll be able to change; empty = read-only"},"role":{"$ref":"#/components/schemas/Role"}}},"InviteRequest":{"type":"object","required":["email"],"properties":{"email":{"type":"string"},"perms":{"type":"array","items":{"$ref":"#/components/schemas/Perm"},"description":"what they may change; empty = read-only"}}},"InvoiceRow":{"type":"object","required":["id","org_id","number","status","currency","total_cents","paid_cents","issued_at","summary"],"properties":{"currency":{"type":"string"},"id":{"type":"integer","format":"int64"},"issued_at":{"type":"string","format":"date-time"},"number":{"type":"string"},"org_id":{"type":"integer","format":"int64"},"paid_at":{"type":["string","null"],"format":"date-time"},"paid_cents":{"type":"integer","format":"int32"},"period_end":{"type":["string","null"],"format":"date-time"},"period_start":{"type":["string","null"],"format":"date-time"},"status":{"type":"string"},"summary":{"type":"string","description":"e.g. \"Team plan (yearly)\""},"total_cents":{"type":"integer","format":"int32"}}},"LogPage":{"type":"object","required":["items"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/LogRow"}},"next_cursor":{"type":["integer","null"],"format":"int64","description":"pass as `before` to get the next (older) page"}}},"LogRow":{"type":"object","required":["id","ts","server_id","level","service","message","fields"],"properties":{"fields":{"type":"object"},"id":{"type":"integer","format":"int64"},"level":{"type":"string"},"message":{"type":"string"},"server_id":{"type":"string"},"service":{"type":"string"},"ts":{"type":"string","format":"date-time"}}},"LoginRequest":{"type":"object","required":["email","password"],"properties":{"email":{"type":"string"},"password":{"type":"string"}}},"MaintenanceWindow":{"type":"object","required":["id","name","scope","starts_at","ends_at","reason","created_by","created_at"],"properties":{"created_at":{"type":"string","format":"date-time"},"created_by":{"type":"string"},"ends_at":{"type":"string","format":"date-time"},"id":{"type":"integer","format":"int64"},"name":{"type":"string"},"reason":{"type":"string"},"scope":{"$ref":"#/components/schemas/Scope"},"starts_at":{"type":"string","format":"date-time"}}},"Member":{"type":"object","required":["user_id","name","email","role","perms","joined_at","you","online"],"properties":{"avatar_url":{"type":["string","null"]},"email":{"type":"string"},"joined_at":{"type":"string","format":"date-time"},"last_login_at":{"type":["string","null"],"format":"date-time"},"last_seen":{"type":["string","null"],"format":"date-time","description":"when they last had ServerIntel open (since the last restart), else their last sign-in"},"name":{"type":"string"},"online":{"type":"boolean","description":"has ServerIntel open right now"},"perms":{"type":"array","items":{"$ref":"#/components/schemas/Perm"},"description":"what they may change (owners: everything)"},"role":{"$ref":"#/components/schemas/Role"},"user_id":{"type":"integer","format":"int64"},"you":{"type":"boolean"}}},"MemberChange":{"type":"object","properties":{"perms":{"type":["array","null"],"items":{"$ref":"#/components/schemas/Perm"},"description":"what a member may change; empty = read-only"},"role":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/Role","description":"make them an owner, or a member again"}]}}},"Metric":{"type":"string","enum":["cpu","memory","disk","response_ms","error_rate","down","services_down","packet_loss","dns_ms"]},"MetricFrame":{"type":"object","description":"One telemetry sample (agents send one per second).","required":["ts","cpu","load1","mem_used_mb","disk_used_gb","net_rx_kbps","net_tx_kbps","open_conns","req_rate","err_rate","procs","containers"],"properties":{"containers":{"type":"array","items":{"$ref":"#/components/schemas/ContainerSample"}},"cpu":{"type":"number","format":"float","description":"CPU busy, 0-100."},"disk_used_gb":{"type":"number","format":"float"},"dns":{"type":["array","null"],"items":{"$ref":"#/components/schemas/DnsProbe"},"description":"Response time of each configured resolver. Sent every 10 s."},"err_rate":{"type":"number","format":"float","description":"Share of requests that failed (0-1)."},"load1":{"type":"number","format":"float"},"mem_used_mb":{"type":"number","format":"float"},"net":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/NetSample","description":"Packet loss, latency, jitter and DNS time (newer agents)."}]},"net_rx_kbps":{"type":"number","format":"float"},"net_tx_kbps":{"type":"number","format":"float"},"open_conns":{"type":"integer","format":"int32","minimum":0},"ports":{"type":["array","null"],"items":{"$ref":"#/components/schemas/PortSample"},"description":"Listening ports and how fast they accept a connection. Sent every 10 s."},"procs":{"type":"array","items":{"$ref":"#/components/schemas/ProcSample"}},"req_rate":{"type":"number","format":"float","description":"Requests per second served by the host's web service."},"response_ms":{"type":["number","null"],"format":"float","description":"Response time of the host's own health endpoint, in ms. `None` = no answer."},"services":{"type":"array","items":{"$ref":"#/components/schemas/ServiceSample"},"description":"Every monitored service and its health (newer agents)."},"ts":{"type":"string","format":"date-time"}}},"MetricsResponse":{"type":"object","required":["server_id","range","resolution_secs","points","rollups"],"properties":{"points":{"type":"array","items":{"$ref":"#/components/schemas/Point"},"description":"15m only"},"range":{"type":"string"},"resolution_secs":{"type":"integer","format":"int64","description":"seconds per point"},"rollups":{"type":"array","items":{"$ref":"#/components/schemas/Rollup"},"description":"longer ranges"},"server_id":{"type":"string"}}},"Mode":{"type":"string","enum":["auto","approve","off"]},"NetNow":{"type":"object","required":["servers","loss_avg","loss_max","lossy","rtt_avg","jitter_avg","dns_timeouts","drained"],"properties":{"dns_avg":{"type":["number","null"],"format":"float"},"dns_p95":{"type":["number","null"],"format":"float"},"dns_timeouts":{"type":"integer","minimum":0},"drained":{"type":"integer","minimum":0},"jitter_avg":{"type":"number","format":"float"},"loss_avg":{"type":"number","format":"float"},"loss_max":{"type":"number","format":"float"},"lossy":{"type":"integer","description":"servers losing more than 1 %","minimum":0},"rtt_avg":{"type":"number","format":"float"},"servers":{"type":"integer","minimum":0}}},"NetPoint":{"type":"object","required":["t","loss_avg","loss_max","rtt_avg"],"properties":{"dns_avg":{"type":["number","null"],"format":"float"},"dns_p95":{"type":["number","null"],"format":"float"},"loss_avg":{"type":"number","format":"float"},"loss_max":{"type":"number","format":"float"},"rtt_avg":{"type":"number","format":"float"},"t":{"type":"integer","format":"int64"}}},"NetSample":{"type":"object","description":"Network quality as seen from the host.","required":["loss_pct","rtt_ms","jitter_ms"],"properties":{"dns_ms":{"type":["number","null"],"format":"float","description":"time for the primary resolver to answer, ms. `None` = timed out."},"jitter_ms":{"type":"number","format":"float"},"loss_pct":{"type":"number","format":"float","description":"packets lost, 0-100 %"},"rtt_ms":{"type":"number","format":"float","description":"round trip to the gateway / upstream, ms"}}},"NetworkView":{"type":"object","required":["now","history","regions","resolvers","worst_loss","slowest_dns","external"],"properties":{"external":{"type":"array","items":{"$ref":"#/components/schemas/ExternalDns"}},"history":{"type":"array","items":{"$ref":"#/components/schemas/NetPoint"}},"now":{"$ref":"#/components/schemas/NetNow"},"regions":{"type":"array","items":{"$ref":"#/components/schemas/RegionNet"}},"resolvers":{"type":"array","items":{"$ref":"#/components/schemas/ResolverNet"}},"slowest_dns":{"type":"array","items":{"$ref":"#/components/schemas/ServerNet"}},"worst_loss":{"type":"array","items":{"$ref":"#/components/schemas/ServerNet"}}}},"NewToken":{"type":"object","required":["label"],"properties":{"expires_hours":{"type":["integer","null"],"format":"int64","description":"1-8760 hours (default 7 days)"},"label":{"type":"string"},"max_uses":{"type":["integer","null"],"format":"int32","description":"servers that may join with it, 1-1000 (default 10)","minimum":0},"role":{"type":["string","null"]}}},"NoteRequest":{"type":"object","required":["text"],"properties":{"text":{"type":"string"}}},"NotificationOverview":{"type":"object","required":["channels","deliveries","email_ready"],"properties":{"channels":{"type":"array","items":{"$ref":"#/components/schemas/ChannelView"}},"deliveries":{"type":"array","items":{"$ref":"#/components/schemas/Delivery"}},"email_ready":{"type":"boolean","description":"can email be sent from this ServerIntel"}}},"Ok":{"type":"object","required":["ok","message"],"properties":{"message":{"type":"string"},"ok":{"type":"boolean"}}},"OrgRename":{"type":"object","required":["name"],"properties":{"name":{"type":"string"}}},"OrgSummary":{"type":"object","required":["id","name","role","plan"],"properties":{"id":{"type":"integer","format":"int64"},"name":{"type":"string"},"plan":{"type":"string"},"role":{"$ref":"#/components/schemas/Role"}}},"PackageView":{"type":"object","required":["name","version","vulnerabilities"],"properties":{"name":{"type":"string"},"version":{"type":"string"},"vulnerabilities":{"type":"array","items":{"type":"string"}}}},"PasswordChange":{"type":"object","required":["current","new"],"properties":{"current":{"type":"string"},"new":{"type":"string"}}},"PatchRequest":{"type":"object","required":["cve"],"properties":{"cve":{"type":"string","description":"a CVE id from the posture report"}}},"Percentiles":{"type":"object","required":["count","avg_ms","p50_ms","p95_ms","p99_ms"],"properties":{"avg_ms":{"type":"number","format":"double"},"count":{"type":"integer","format":"int64","minimum":0},"p50_ms":{"type":"number","format":"double"},"p95_ms":{"type":"number","format":"double"},"p99_ms":{"type":"number","format":"double"}}},"Perm":{"type":"string","description":"One thing an owner can allow a member to change. Everyone can see everything.","enum":["fix","firewall","servers","alerts","team","billing"]},"PermInfo":{"type":"object","required":["id","label","help"],"properties":{"help":{"type":"string"},"id":{"$ref":"#/components/schemas/Perm"},"label":{"type":"string"}}},"PlannedAction":{"type":"object","required":["action","target","label"],"properties":{"action":{"type":"string"},"label":{"type":"string"},"target":{"type":"string"}}},"Point":{"type":"object","description":"One second of a server's life, compact (it's kept 900× per server).","required":["t","cpu","mem","disk","rx","tx","req","err","rt","loss","rtt","jitter","dns"],"properties":{"cpu":{"type":"number","format":"float"},"disk":{"type":"number","format":"float"},"dns":{"type":"number","format":"float","description":"primary resolver, ms; -1 = timed out, -2 = not reported"},"err":{"type":"number","format":"float"},"jitter":{"type":"number","format":"float"},"loss":{"type":"number","format":"float","description":"packet loss %"},"mem":{"type":"number","format":"float"},"req":{"type":"number","format":"float"},"rt":{"type":"number","format":"float","description":"response time in ms, -1 = no answer"},"rtt":{"type":"number","format":"float","description":"round trip, ms"},"rx":{"type":"number","format":"float"},"t":{"type":"integer","format":"int64","description":"unix seconds"},"tx":{"type":"number","format":"float"}}},"Policy":{"type":"object","required":["paused","modes"],"properties":{"modes":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/Mode"},"propertyNames":{"type":"string"}},"paused":{"type":"boolean"}}},"PolicyChange":{"type":"object","properties":{"modes":{"type":["object","null"],"description":"runbook id -> mode","additionalProperties":{"$ref":"#/components/schemas/Mode"},"propertyNames":{"type":"string"}},"paused":{"type":["boolean","null"]}}},"PortSample":{"type":"object","description":"A listening (or expected) port.","required":["port","service","state","exposure","expected"],"properties":{"connect_ms":{"type":["number","null"],"format":"float","description":"time to accept a TCP connection, ms"},"expected":{"type":"boolean","description":"part of this role's normal footprint"},"exposure":{"type":"string","description":"public, private, localhost"},"port":{"type":"integer","format":"int32","minimum":0},"service":{"type":"string"},"state":{"type":"string","description":"open, closed"}}},"PortSummary":{"type":"object","required":["port","service","servers","open","closed","public_on"],"properties":{"availability_pct":{"type":["number","null"],"format":"float"},"closed":{"type":"integer","minimum":0},"connect_ms_avg":{"type":["number","null"],"format":"float"},"open":{"type":"integer","minimum":0},"port":{"type":"integer","format":"int32","minimum":0},"public_on":{"type":"integer","minimum":0},"servers":{"type":"integer","minimum":0},"service":{"type":"string"}}},"PortView":{"type":"object","required":["port","service","state","exposure","expected"],"properties":{"availability_pct":{"type":["number","null"],"format":"float","description":"share of checks the port was open and answering since the monitor started"},"connect_ms":{"type":["number","null"],"format":"float"},"expected":{"type":"boolean"},"exposure":{"type":"string"},"port":{"type":"integer","format":"int32","minimum":0},"service":{"type":"string"},"state":{"type":"string"}}},"PortsView":{"type":"object","required":["servers_scanned","listening","closed_expected","exposures","by_port","servers"],"properties":{"by_port":{"type":"array","items":{"$ref":"#/components/schemas/PortSummary"}},"closed_expected":{"type":"integer","minimum":0},"exposures":{"type":"array","items":{"$ref":"#/components/schemas/Exposure"}},"fleet_availability_pct":{"type":["number","null"],"format":"float"},"listening":{"type":"integer","minimum":0},"servers":{"type":"array","items":{"$ref":"#/components/schemas/ServerPorts"}},"servers_scanned":{"type":"integer","minimum":0}}},"PostureView":{"type":"object","required":["compliance_score","servers_scanned","vulnerabilities","checks","servers","security_updates","servers_with_updates_checked"],"properties":{"checks":{"type":"array","items":{"$ref":"#/components/schemas/CheckView"}},"compliance_score":{"type":"number","format":"double","description":"weighted share of passing checks across the fleet, 0-100"},"last_scan":{"type":["string","null"],"format":"date-time"},"security_updates":{"type":"array","items":{"$ref":"#/components/schemas/UpdateView"},"description":"security updates waiting, by package (from apt or dnf on each server)"},"servers":{"type":"array","items":{"$ref":"#/components/schemas/ServerScore"},"description":"worst first"},"servers_scanned":{"type":"integer","minimum":0},"servers_with_updates_checked":{"type":"integer","description":"servers whose package manager was checked","minimum":0},"vulnerabilities":{"type":"array","items":{"$ref":"#/components/schemas/VulnView"}}}},"PresenceRow":{"type":"object","required":["user_id","name","online","you"],"properties":{"avatar_url":{"type":["string","null"]},"last_seen":{"type":["string","null"],"format":"date-time"},"name":{"type":"string"},"online":{"type":"boolean"},"user_id":{"type":"integer","format":"int64"},"you":{"type":"boolean"}}},"Pricing":{"type":"object","description":"The price list, for the pricing page and Billing.","required":["first_server_cents","extra_server_cents","included_users","extra_user_cents","first_server_yearly_cents","extra_server_yearly_cents","extra_user_yearly_cents","yearly_discount_pct","max_servers"],"properties":{"extra_server_cents":{"type":"integer","format":"int64"},"extra_server_yearly_cents":{"type":"integer","format":"int64"},"extra_user_cents":{"type":"integer","format":"int64"},"extra_user_yearly_cents":{"type":"integer","format":"int64"},"first_server_cents":{"type":"integer","format":"int64"},"first_server_yearly_cents":{"type":"integer","format":"int64"},"included_users":{"type":"integer","format":"int64"},"max_servers":{"type":"integer","format":"int64"},"yearly_discount_pct":{"type":"integer","format":"int64"}}},"ProcSample":{"type":"object","required":["name","pid","cpu","mem_mb"],"properties":{"cpu":{"type":"number","format":"float"},"mem_mb":{"type":"number","format":"float"},"name":{"type":"string"},"pid":{"type":"integer","format":"int32","minimum":0}}},"Profile":{"type":"object","required":["id","name","email","email_verified","is_master","role","role_label","perms","org","orgs","viewing_as","timezone","member_since","permissions","signed_in_at","session_expires_at","recent_activity"],"properties":{"avatar_url":{"type":["string","null"],"description":"your profile picture, if you've added one"},"email":{"type":"string"},"email_verified":{"type":"boolean"},"id":{"type":"integer","format":"int64"},"is_master":{"type":"boolean"},"member_since":{"type":"string","format":"date-time"},"name":{"type":"string"},"org":{"$ref":"#/components/schemas/OrgSummary"},"orgs":{"type":"array","items":{"$ref":"#/components/schemas/OrgSummary"},"description":"every organization you can switch to"},"permissions":{"type":"array","items":{"type":"string"}},"perms":{"type":"array","items":{"$ref":"#/components/schemas/Perm"},"description":"what you may change here (empty: read-only)"},"previous_sign_in":{"type":["string","null"],"format":"date-time","description":"the sign-in before this one"},"recent_activity":{"type":"array","items":{"$ref":"#/components/schemas/AuditEntry"},"description":"your latest actions in this organization"},"role":{"$ref":"#/components/schemas/Role","description":"your role in the current organization"},"role_label":{"type":"string"},"session_expires_at":{"type":"string","format":"date-time"},"signed_in_at":{"type":"string","format":"date-time"},"timezone":{"type":"string"},"viewing_as":{"type":"boolean","description":"a master admin looking at someone else's organization (read-only)"}}},"ProfileUpdate":{"type":"object","properties":{"name":{"type":["string","null"]},"timezone":{"type":["string","null"]}}},"PublicSite":{"type":"object","required":["mode","message","signups_open","setup_needed"],"properties":{"message":{"type":"string"},"mode":{"$ref":"#/components/schemas/Mode"},"setup_needed":{"type":"boolean","description":"a brand-new install with no accounts: the first sign-up (the master admin's address) is open"},"signups_open":{"type":"boolean"},"until":{"type":["string","null"],"format":"date-time"}}},"Redirect":{"type":"object","required":["url"],"properties":{"url":{"type":"string","description":"open this Stripe page"}}},"RegionNet":{"type":"object","required":["region","servers","loss_avg","loss_max","lossy","rtt_avg","jitter_avg","degraded"],"properties":{"degraded":{"type":"boolean","description":"most of the region losing packets at once"},"dns_avg":{"type":["number","null"],"format":"float"},"jitter_avg":{"type":"number","format":"float"},"loss_avg":{"type":"number","format":"float"},"loss_max":{"type":"number","format":"float"},"lossy":{"type":"integer","minimum":0},"region":{"type":"string"},"rtt_avg":{"type":"number","format":"float"},"servers":{"type":"integer","minimum":0}}},"Removed":{"type":"object","required":["removed"],"properties":{"removed":{"type":"string"}}},"RenewRequest":{"type":"object","required":["domain"],"properties":{"domain":{"type":"string"}}},"Report":{"type":"object","required":["from","to","monitored_hours","roles","servers","slos","incidents","incidents_opened","alerts_by_rule","threat_events","threat_events_dropped","ips_blocked_now","compliance_score","open_vulnerabilities","certificates_expiring_30d"],"properties":{"alerts_by_rule":{"type":"array","items":{"$ref":"#/components/schemas/RuleCount"}},"certificates_expiring_30d":{"type":"integer","minimum":0},"compliance_score":{"type":"number","format":"double"},"fleet_availability":{"type":["number","null"],"format":"double"},"from":{"type":"string","format":"date-time"},"incidents":{"$ref":"#/components/schemas/IncidentStats"},"incidents_opened":{"type":"integer","minimum":0},"ips_blocked_now":{"type":"integer","minimum":0},"monitored_hours":{"type":"number","format":"double"},"open_vulnerabilities":{"type":"integer","minimum":0},"roles":{"type":"array","items":{"$ref":"#/components/schemas/RoleAvailability"}},"servers":{"type":"array","items":{"$ref":"#/components/schemas/ServerAvailability"},"description":"least available first"},"slos":{"type":"array","items":{"$ref":"#/components/schemas/SloStatus"}},"threat_events":{"type":"integer","format":"int64"},"threat_events_dropped":{"type":"integer","format":"int64"},"to":{"type":"string","format":"date-time"}}},"ResetRequest":{"type":"object","required":["token","password"],"properties":{"password":{"type":"string"},"token":{"type":"string"}}},"ResolverNet":{"type":"object","required":["label","resolver","servers","primary_for","timeouts"],"properties":{"avg_ms":{"type":["number","null"],"format":"float"},"label":{"type":"string"},"p95_ms":{"type":["number","null"],"format":"float"},"primary_for":{"type":"integer","minimum":0},"resolver":{"type":"string"},"servers":{"type":"integer","minimum":0},"timeouts":{"type":"integer","minimum":0}}},"RestartRequest":{"type":"object","required":["service"],"properties":{"service":{"type":"string"}}},"Review":{"type":"string","enum":["open","accepted","restoring","restored"]},"Role":{"type":"string","description":"Someone's place in an organization: an owner can do everything; a member\ncan see everything and change only what an owner allowed (`Perms`).","enum":["member","owner"]},"RoleAvailability":{"type":"object","required":["role","servers","availability"],"properties":{"availability":{"type":"number","format":"double"},"role":{"type":"string"},"servers":{"type":"integer","format":"int64"}}},"RoleCapacity":{"type":"object","required":["role","servers","cpu_avg","cpu_p95","mem_avg","disk_avg","headroom_pct","right_size"],"properties":{"cpu_avg":{"type":"number","format":"double"},"cpu_p95":{"type":"number","format":"double"},"disk_avg":{"type":"number","format":"double"},"headroom_pct":{"type":"number","format":"double","description":"CPU headroom against the p95 of the last 15 minutes"},"mem_avg":{"type":"number","format":"double"},"right_size":{"type":"integer","format":"int64","description":"servers you could remove and still stay under 70 % CPU at p95 (negative: servers to add)"},"role":{"type":"string"},"servers":{"type":"integer","minimum":0}}},"Rollup":{"type":"object","required":["server_id","minute","cpu_avg","cpu_max","mem_avg","disk_avg","rx_avg","tx_avg","req_avg","err_avg","up_secs","samples","svc_down_secs"],"properties":{"cpu_avg":{"type":"number","format":"float"},"cpu_max":{"type":"number","format":"float"},"disk_avg":{"type":"number","format":"float"},"dns_avg":{"type":["number","null"],"format":"float"},"err_avg":{"type":"number","format":"float"},"loss_avg":{"type":["number","null"],"format":"float"},"mem_avg":{"type":"number","format":"float"},"minute":{"type":"string","format":"date-time"},"req_avg":{"type":"number","format":"float"},"rt_avg":{"type":["number","null"],"format":"float"},"rt_p95":{"type":["number","null"],"format":"float"},"rtt_avg":{"type":["number","null"],"format":"float"},"rx_avg":{"type":"number","format":"float"},"samples":{"type":"integer","format":"int32"},"server_id":{"type":"string"},"svc_down_secs":{"type":"integer","format":"int32","description":"seconds a service on the host was failed"},"tx_avg":{"type":"number","format":"float"},"up_secs":{"type":"integer","format":"int32"}}},"Rule":{"type":"object","description":"\"Fire when `metric` is above `threshold` for `for_secs` seconds.\"","required":["id","name","metric","threshold","for_secs","severity","enabled"],"properties":{"enabled":{"type":"boolean"},"for_secs":{"type":"integer","format":"int32","minimum":0},"id":{"type":"integer","format":"int64"},"metric":{"$ref":"#/components/schemas/Metric"},"name":{"type":"string"},"role":{"type":["string","null"],"description":"Only servers with this role (all servers when empty)."},"severity":{"$ref":"#/components/schemas/Severity"},"threshold":{"type":"number","format":"double","description":"Ignored for `down`. Percent for cpu/memory/disk, ms for response_ms, 0-1 for error_rate."}}},"RuleCount":{"type":"object","required":["rule","count"],"properties":{"count":{"type":"integer","format":"int64"},"rule":{"type":"string"}}},"RuleInput":{"type":"object","required":["name","metric","threshold","for_secs","severity"],"properties":{"enabled":{"type":"boolean"},"for_secs":{"type":"integer","format":"int32","minimum":0},"metric":{"$ref":"#/components/schemas/Metric"},"name":{"type":"string"},"role":{"type":["string","null"]},"severity":{"$ref":"#/components/schemas/Severity"},"threshold":{"type":"number","format":"double"}}},"Run":{"type":"object","required":["id","runbook","title","server_id","role","region","target","state","opened_at","summary","steps","plan","actions_taken","attempts","prevented_page"],"properties":{"actions_taken":{"type":"integer","format":"int32","minimum":0},"approved_by":{"type":["string","null"]},"attempts":{"type":"integer","format":"int32","minimum":0},"closed_at":{"type":["string","null"],"format":"date-time"},"good_secs":{"type":"integer","format":"int32","minimum":0},"id":{"type":"integer","format":"int64"},"incident_id":{"type":["integer","null"],"format":"int64"},"opened_at":{"type":"string","format":"date-time"},"pending_cmd":{"type":["integer","null"],"format":"int64","minimum":0},"plan":{"type":"array","items":{"$ref":"#/components/schemas/PlannedAction"}},"prevented_page":{"type":"boolean","description":"an alert would have paged someone if this hadn't worked"},"region":{"type":"string"},"role":{"type":"string"},"runbook":{"type":"string"},"server_id":{"type":"string","description":"a server id, or `region:<name>` for region-wide problems"},"settled":{"type":"boolean"},"state":{"$ref":"#/components/schemas/RunState"},"steps":{"type":"array","items":{"$ref":"#/components/schemas/Step"}},"summary":{"type":"string"},"target":{"type":"string","description":"what the run is about beyond the server (a service, a port)"},"title":{"type":"string"},"verify_until":{"type":["string","null"],"format":"date-time"}}},"RunState":{"type":"string","enum":["running","awaiting_approval","watching","healed","escalated","resolved","dismissed"]},"RunbookView":{"type":"object","required":["id","title","trigger","action","mode","runs_24h","healed_24h","escalated_24h"],"properties":{"action":{"type":"string"},"escalated_24h":{"type":"integer","minimum":0},"healed_24h":{"type":"integer","minimum":0},"id":{"type":"string"},"mode":{"$ref":"#/components/schemas/Mode"},"runs_24h":{"type":"integer","minimum":0},"title":{"type":"string"},"trigger":{"type":"string"}}},"Scope":{"oneOf":[{"type":"object","required":["kind"],"properties":{"kind":{"type":"string","enum":["all"]}}},{"type":"object","required":["role","kind"],"properties":{"kind":{"type":"string","enum":["role"]},"role":{"type":"string"}}},{"type":"object","required":["servers","kind"],"properties":{"kind":{"type":"string","enum":["servers"]},"servers":{"type":"array","items":{"type":"string"}}}}]},"ServerAvailability":{"type":"object","required":["server_id","role","availability","downtime_secs"],"properties":{"availability":{"type":"number","format":"double"},"avg_response_ms":{"type":["number","null"],"format":"double"},"downtime_secs":{"type":"integer","format":"int64"},"role":{"type":"string"},"server_id":{"type":"string"}}},"ServerDetail":{"type":"object","required":["summary","info","active_alerts","ports","dns","heal_runs"],"properties":{"active_alerts":{"type":"array","items":{"$ref":"#/components/schemas/Alert"}},"dns":{"type":"array","items":{"$ref":"#/components/schemas/DnsProbe"}},"heal_runs":{"type":"array","items":{"$ref":"#/components/schemas/Run"},"description":"recent self-healing runs on this server"},"info":{"$ref":"#/components/schemas/ServerInfo"},"latest":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/MetricFrame"}]},"ports":{"type":"array","items":{"$ref":"#/components/schemas/PortView"}},"summary":{"$ref":"#/components/schemas/ServerSummary"}}},"ServerInfo":{"type":"object","description":"Static facts an agent reports once, when it connects.","required":["id","hostname","role","region","os","kernel","cpu_cores","mem_total_mb","disk_total_gb","public_ip","app_version","services","containers","simulated"],"properties":{"actions":{"type":"array","items":{"type":"string"},"description":"What this agent may change on its server (empty: monitoring only). Set on the\nserver itself (`SERVERINTEL_ACTIONS`), never by ServerIntel."},"app_version":{"type":"string","description":"Version of the application package currently installed."},"containers":{"type":"array","items":{"type":"string"}},"cpu_cores":{"type":"integer","format":"int32","minimum":0},"disk_total_gb":{"type":"integer","format":"int64","minimum":0},"hostname":{"type":"string"},"id":{"type":"string","description":"Stable id, e.g. `web-use1-07`."},"kernel":{"type":"string"},"mem_total_mb":{"type":"integer","format":"int64","minimum":0},"os":{"type":"string"},"public_ip":{"type":"string"},"region":{"type":"string","description":"us-east-1, eu-west-1, ..."},"role":{"type":"string","description":"web, api, db, cache, worker, edge, search, queue"},"services":{"type":"array","items":{"type":"string"}},"simulated":{"type":"boolean","description":"true for the built-in simulated fleet."}}},"ServerNet":{"type":"object","required":["server_id","role","region","loss","rtt","jitter","drained"],"properties":{"dns_ms":{"type":["number","null"],"format":"float"},"drained":{"type":"boolean"},"jitter":{"type":"number","format":"float"},"loss":{"type":"number","format":"float"},"region":{"type":"string"},"role":{"type":"string"},"rtt":{"type":"number","format":"float"},"server_id":{"type":"string"}}},"ServerPorts":{"type":"object","required":["server_id","role","region","status","ports"],"properties":{"ports":{"type":"array","items":{"$ref":"#/components/schemas/PortView"}},"region":{"type":"string"},"role":{"type":"string"},"server_id":{"type":"string"},"status":{"$ref":"#/components/schemas/Status"}}},"ServerScore":{"type":"object","required":["server_id","role","score","failing_checks","security_updates","vulnerabilities","critical_vulnerabilities"],"properties":{"critical_vulnerabilities":{"type":"integer","minimum":0},"failing_checks":{"type":"integer","minimum":0},"role":{"type":"string"},"score":{"type":"number","format":"double"},"security_updates":{"type":"integer","description":"security updates the package manager has waiting","minimum":0},"server_id":{"type":"string"},"vulnerabilities":{"type":"integer","minimum":0}}},"ServerSummary":{"type":"object","required":["id","hostname","role","region","os","cpu_cores","mem_total_mb","disk_total_gb","app_version","simulated","status","status_since","threats_seen","threats_dropped","cpu_spark","services_failed","drained","actions"],"properties":{"actions":{"type":"array","items":{"type":"string"},"description":"what the agent may change on this server (empty: monitor-only); set on the server with SERVERINTEL_ACTIONS"},"app_version":{"type":"string"},"connected_since":{"type":["string","null"],"format":"date-time"},"cpu":{"type":["number","null"],"format":"float"},"cpu_cores":{"type":"integer","format":"int32","minimum":0},"cpu_spark":{"type":"array","items":{"type":"number","format":"float"},"description":"CPU for the last 60 seconds (sparkline)"},"disk_pct":{"type":["number","null"],"format":"float"},"disk_total_gb":{"type":"integer","format":"int64","minimum":0},"dns_ms":{"type":["number","null"],"format":"float"},"drained":{"type":"boolean","description":"taken out of the load balancer by self-healing"},"enrolled":{"type":["string","null"],"description":"joined through this enrollment token"},"err_rate":{"type":["number","null"],"format":"float"},"hostname":{"type":"string"},"id":{"type":"string"},"last_seen":{"type":["string","null"],"format":"date-time"},"loss_pct":{"type":["number","null"],"format":"float"},"mem_pct":{"type":["number","null"],"format":"float"},"mem_total_mb":{"type":"integer","format":"int64","minimum":0},"os":{"type":"string"},"region":{"type":"string"},"req_rate":{"type":["number","null"],"format":"float"},"response_ms":{"type":["number","null"],"format":"float"},"role":{"type":"string"},"rx_kbps":{"type":["number","null"],"format":"float"},"services_failed":{"type":"integer","minimum":0},"simulated":{"type":"boolean"},"status":{"$ref":"#/components/schemas/Status"},"status_since":{"type":"string","format":"date-time"},"threats_dropped":{"type":"integer","format":"int64","minimum":0},"threats_seen":{"type":"integer","format":"int64","minimum":0},"tx_kbps":{"type":["number","null"],"format":"float"}}},"ServersChange":{"type":"object","required":["servers"],"properties":{"servers":{"type":"integer","format":"int64","description":"the new number of servers to pay for"}}},"ServiceGroup":{"type":"object","required":["name","instances","running","degraded","failed","restarting","restarts","cpu_avg","mem_mb_avg","unhealthy"],"properties":{"cpu_avg":{"type":"number","format":"float"},"degraded":{"type":"integer","minimum":0},"failed":{"type":"integer","minimum":0},"health_ms_avg":{"type":["number","null"],"format":"float"},"health_ms_p95":{"type":["number","null"],"format":"float"},"instances":{"type":"integer","minimum":0},"mem_mb_avg":{"type":"number","format":"float"},"name":{"type":"string"},"port":{"type":["integer","null"],"format":"int32","minimum":0},"restarting":{"type":"integer","minimum":0},"restarts":{"type":"integer","format":"int32","minimum":0},"running":{"type":"integer","minimum":0},"unhealthy":{"type":"array","items":{"$ref":"#/components/schemas/ServiceInstance"},"description":"instances that aren't running normally"}}},"ServiceInstance":{"type":"object","required":["server_id","role","state","cpu","mem_mb","restarts","uptime_secs"],"properties":{"cpu":{"type":"number","format":"float"},"health_ms":{"type":["number","null"],"format":"float"},"mem_mb":{"type":"number","format":"float"},"restarts":{"type":"integer","format":"int32","minimum":0},"role":{"type":"string"},"server_id":{"type":"string"},"state":{"type":"string"},"uptime_secs":{"type":"integer","format":"int64","minimum":0}}},"ServiceSample":{"type":"object","description":"One service (systemd unit or container) on the host.","required":["name","state","cpu","mem_mb","restarts","uptime_secs"],"properties":{"cpu":{"type":"number","format":"float"},"health_ms":{"type":["number","null"],"format":"float","description":"response time of the service's own health probe, in ms. `None` = no answer."},"mem_mb":{"type":"number","format":"float"},"name":{"type":"string"},"port":{"type":["integer","null"],"format":"int32","minimum":0},"restarts":{"type":"integer","format":"int32","description":"restarts since the agent started","minimum":0},"state":{"type":"string","description":"running, degraded, failed, restarting, stopped"},"uptime_secs":{"type":"integer","format":"int64","minimum":0}}},"ServicesView":{"type":"object","required":["services","total","failed","degraded","restarts"],"properties":{"degraded":{"type":"integer","minimum":0},"failed":{"type":"integer","minimum":0},"restarts":{"type":"integer","format":"int32","minimum":0},"services":{"type":"array","items":{"$ref":"#/components/schemas/ServiceGroup"}},"total":{"type":"integer","minimum":0}}},"SessionState":{"type":"object","required":["signed_in","site"],"properties":{"profile":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/Profile"}]},"signed_in":{"type":"boolean"},"site":{"$ref":"#/components/schemas/PublicSite"}}},"Severity":{"type":"string","enum":["info","warning","critical"]},"SignupRequest":{"type":"object","required":["name","email","password"],"properties":{"accept_terms":{"type":"boolean","description":"accepted the terms of service and privacy policy"},"company":{"type":"string","description":"company or team name (optional)"},"email":{"type":"string"},"name":{"type":"string"},"password":{"type":"string"},"website":{"type":"string","description":"honeypot: a field people can't see; bots fill it in"}}},"SiteView":{"type":"object","required":["domain","issuer","not_after","days_left","status"],"properties":{"days_left":{"type":"integer","format":"int64"},"domain":{"type":"string"},"issuer":{"type":"string"},"not_after":{"type":"string","format":"date-time"},"status":{"type":"string"}}},"SloStatus":{"type":"object","required":["id","name","role","kind","description","target","window_days","budget_total","budget_spent","status","unit","history"],"properties":{"budget_remaining_pct":{"type":["number","null"],"format":"double"},"budget_spent":{"type":"number","format":"double"},"budget_total":{"type":"number","format":"double"},"burn_rate_1h":{"type":["number","null"],"format":"double"},"burn_rate_24h":{"type":["number","null"],"format":"double"},"burn_rate_6h":{"type":["number","null"],"format":"double"},"description":{"type":"string"},"history":{"type":"array","items":{"$ref":"#/components/schemas/BudgetPoint"}},"id":{"type":"string"},"kind":{"type":"string"},"name":{"type":"string"},"role":{"type":"string"},"sli":{"type":["number","null"],"format":"double","description":"measured SLI over the window, %"},"status":{"type":"string","description":"healthy, slow_burn, fast_burn, exhausted, no_data"},"target":{"type":"number","format":"double"},"unit":{"type":"string","description":"\"events\" in the budget's unit: seconds, minutes or requests"},"window_days":{"type":"integer","format":"int64"}}},"Status":{"type":"string","enum":["healthy","degraded","updating","down"]},"Step":{"type":"object","required":["ts","kind","text"],"properties":{"kind":{"type":"string","description":"detect, diagnose, plan, act, verify, wait, result"},"ok":{"type":["boolean","null"]},"text":{"type":"string"},"ts":{"type":"string","format":"date-time"}}},"Strategy":{"type":"object","properties":{"auto_rollback":{"type":"boolean"},"bake_secs":{"type":"integer","format":"int32","description":"Seconds to watch each batch before moving on.","minimum":0},"batch_percent":{"type":"integer","format":"int32","description":"Size of each following batch, in percent of the targets.","minimum":0},"canary":{"type":"integer","description":"Servers updated first, on their own.","minimum":0},"max_failures":{"type":"integer","format":"int32","description":"Stop when more servers than this fail.","minimum":0},"role":{"type":["string","null"],"description":"Only servers with this role (all when empty)."}}},"Subscription":{"type":"object","required":["plan","interval","status","amount_cents","servers","seats","cancel_at_period_end","started_at"],"properties":{"amount_cents":{"type":"integer","format":"int32","description":"per interval, before tax"},"cancel_at_period_end":{"type":"boolean"},"canceled_at":{"type":["string","null"],"format":"date-time"},"current_period_end":{"type":["string","null"],"format":"date-time"},"current_period_start":{"type":["string","null"],"format":"date-time"},"interval":{"type":"string","description":"month | year"},"plan":{"type":"string"},"seats":{"type":"integer","format":"int32","description":"people billed for (the first three are included)"},"servers":{"type":"integer","format":"int32","description":"servers paid for"},"started_at":{"type":"string","format":"date-time"},"status":{"type":"string","description":"trialing | active | past_due | canceled | incomplete | unpaid"}}},"SupportAccess":{"type":"object","required":["hours"],"properties":{"hours":{"type":"integer","format":"int64","description":"hours of read-only access for ServerIntel support (0 ends it now; at most 168)"}}},"SwitchOrg":{"type":"object","required":["org_id"],"properties":{"org_id":{"type":"integer","format":"int64"}}},"SystemStats":{"type":"object","required":["version","uptime_secs","memory_rss_mb","agents_connected","dashboards_connected","telemetry_per_s","frames_in","bytes_in","logs_in","security_events_in","frames_shed","ingest_queue_depth","ingest_queue_capacity","bad_messages","agent_connects","agent_disconnects","agents_rejected","dashboard_messages_out","dashboard_resyncs","dashboard_messages_skipped","db_connected","db_rows_written","db_errors","db_queue_dropped","commands_sent","ingest_latency","tick_build","db_batch_write"],"properties":{"agent_connects":{"type":"integer","format":"int64","minimum":0},"agent_disconnects":{"type":"integer","format":"int64","minimum":0},"agents_connected":{"type":"integer","minimum":0},"agents_rejected":{"type":"integer","format":"int64","minimum":0},"bad_messages":{"type":"integer","format":"int64","minimum":0},"bytes_in":{"type":"integer","format":"int64","minimum":0},"commands_sent":{"type":"integer","format":"int64","minimum":0},"dashboard_messages_out":{"type":"integer","format":"int64","minimum":0},"dashboard_messages_skipped":{"type":"integer","format":"int64","minimum":0},"dashboard_resyncs":{"type":"integer","format":"int64","minimum":0},"dashboards_connected":{"type":"integer","format":"int64","minimum":0},"db_batch_write":{"$ref":"#/components/schemas/Percentiles"},"db_connected":{"type":"boolean"},"db_errors":{"type":"integer","format":"int64","minimum":0},"db_queue_dropped":{"type":"integer","format":"int64","minimum":0},"db_rows_written":{"type":"integer","format":"int64","minimum":0},"frames_in":{"type":"integer","format":"int64","minimum":0},"frames_shed":{"type":"integer","format":"int64","description":"Frames dropped because the processing queue was full.","minimum":0},"ingest_latency":{"$ref":"#/components/schemas/Percentiles","description":"Agent timestamp → applied to live state."},"ingest_queue_capacity":{"type":"integer","minimum":0},"ingest_queue_depth":{"type":"integer","minimum":0},"logs_in":{"type":"integer","format":"int64","minimum":0},"memory_rss_mb":{"type":"number","format":"double"},"security_events_in":{"type":"integer","format":"int64","minimum":0},"telemetry_per_s":{"type":"number","format":"double"},"tick_build":{"$ref":"#/components/schemas/Percentiles","description":"Building and broadcasting one live update."},"uptime_secs":{"type":"integer","format":"int64","minimum":0},"version":{"type":"string"}}},"Target":{"type":"object","required":["server_id","state","batch","message"],"properties":{"batch":{"type":"integer","minimum":0},"message":{"type":"string"},"server_id":{"type":"string"},"state":{"type":"string","description":"pending, installing, updated, failed, rolled_back, skipped"}}},"TeamView":{"type":"object","required":["org_id","org_name","members","invites","your_role","your_perms","all_perms","included_users","extra_user_cents","interval","can_grow","comped"],"properties":{"all_perms":{"type":"array","items":{"$ref":"#/components/schemas/PermInfo"},"description":"every permission an owner can give"},"can_grow":{"type":"boolean","description":"the organization is paying (or comped), so people can be invited"},"comped":{"type":"boolean"},"extra_user_cents":{"type":"integer","format":"int64","description":"what one more person costs per billing period, in cents (0 when comped)"},"included_users":{"type":"integer","format":"int64","description":"people included in the price; each one after costs extra"},"interval":{"type":"string","description":"month | year"},"invites":{"type":"array","items":{"$ref":"#/components/schemas/Invite"}},"members":{"type":"array","items":{"$ref":"#/components/schemas/Member"}},"org_id":{"type":"integer","format":"int64"},"org_name":{"type":"string"},"support_until":{"type":["string","null"],"format":"date-time","description":"ServerIntel support may look (read-only) until then"},"your_perms":{"type":"array","items":{"$ref":"#/components/schemas/Perm"}},"your_role":{"$ref":"#/components/schemas/Role"}}},"TestResult":{"type":"object","required":["ok","detail"],"properties":{"detail":{"type":"string","description":"what happened (e.g. `HTTP 200`, or why it failed)"},"ok":{"type":"boolean"}}},"ThreatBucket":{"type":"object","required":["minute","kind","events","dropped"],"properties":{"dropped":{"type":"integer","format":"int64"},"events":{"type":"integer","format":"int64"},"kind":{"type":"string"},"minute":{"type":"string","format":"date-time"}}},"ThreatSummary":{"type":"object","required":["events_per_s","totals","blocked","top_attackers","policy"],"properties":{"blocked":{"type":"integer","minimum":0},"events_per_s":{"type":"number","format":"float"},"policy":{"$ref":"#/components/schemas/Policy"},"top_attackers":{"type":"array","items":{"$ref":"#/components/schemas/Attacker"}},"totals":{"$ref":"#/components/schemas/ThreatTotals"}}},"ThreatTotals":{"type":"object","required":["events","dropped","blocks_auto","blocks_manual","by_kind","by_country"],"properties":{"blocks_auto":{"type":"integer","format":"int64","minimum":0},"blocks_manual":{"type":"integer","format":"int64","minimum":0},"by_country":{"type":"object","additionalProperties":{"type":"integer","format":"int64","minimum":0},"propertyNames":{"type":"string"}},"by_kind":{"type":"object","additionalProperties":{"type":"integer","format":"int64","minimum":0},"propertyNames":{"type":"string"}},"dropped":{"type":"integer","format":"int64","minimum":0},"events":{"type":"integer","format":"int64","minimum":0}}},"TimelineEntry":{"type":"object","required":["ts","kind","actor","text"],"properties":{"actor":{"type":"string","description":"username, or \"serverintel\" for automatic steps"},"kind":{"type":"string","description":"opened, alert, alert_resolved, acknowledged, escalated, note, resolved, notified"},"text":{"type":"string"},"ts":{"type":"string","format":"date-time"}}},"TlsCheck":{"type":"object","required":["domain","checked_at","ok","san"],"properties":{"checked_at":{"type":"string","format":"date-time"},"cipher":{"type":["string","null"]},"days_left":{"type":["integer","null"],"format":"int64"},"domain":{"type":"string"},"error":{"type":["string","null"]},"handshake_ms":{"type":["number","null"],"format":"double"},"issuer":{"type":["string","null"]},"not_after":{"type":["string","null"],"format":"date-time"},"not_before":{"type":["string","null"],"format":"date-time"},"ok":{"type":"boolean"},"protocol":{"type":["string","null"]},"san":{"type":"array","items":{"type":"string"}},"subject":{"type":["string","null"]}}},"TokenRequest":{"type":"object","required":["token"],"properties":{"token":{"type":"string"}}},"UpdateRequest":{"type":"object","required":["package"],"properties":{"package":{"type":"string","description":"the distribution's package name, e.g. `openssl`"}}},"UpdateServer":{"type":"object","required":["server_id","installed","candidate"],"properties":{"candidate":{"type":"string"},"installed":{"type":"string"},"server_id":{"type":"string"}}},"UpdateView":{"type":"object","description":"A package with a security update waiting, and the servers it's waiting on.","required":["package","servers"],"properties":{"package":{"type":"string"},"servers":{"type":"array","items":{"$ref":"#/components/schemas/UpdateServer"}}}},"UptimeBucket":{"type":"object","required":["start","up_pct"],"properties":{"start":{"type":"string","format":"date-time"},"up_pct":{"type":"number","format":"double"}}},"UptimeResponse":{"type":"object","required":["server_id","incidents","history","buckets"],"properties":{"buckets":{"type":"array","items":{"$ref":"#/components/schemas/UptimeBucket"},"description":"The same buckets as availability: up seconds over the seconds the server\nwas expected to report in that bucket (so a half-finished bucket isn't \"50 % down\")"},"history":{"type":"array","items":{"$ref":"#/components/schemas/Rollup"},"description":"15-minute buckets for the last 24 hours (response time avg / p95, up seconds)"},"incidents":{"type":"array","items":{"$ref":"#/components/schemas/Alert"},"description":"\"Host down\" incidents, newest first"},"server_id":{"type":"string"},"uptime_24h":{"type":["number","null"],"format":"double"},"uptime_7d":{"type":["number","null"],"format":"double"}}},"Verdict":{"type":"string","enum":["expected","unreviewed","suspicious"]},"VulnView":{"type":"object","required":["id","name","package","cvss","severity","fixed","summary","url","affected"],"properties":{"affected":{"type":"array","items":{"$ref":"#/components/schemas/AffectedServer"}},"cvss":{"type":"number","format":"float"},"fixed":{"type":"string"},"id":{"type":"string"},"name":{"type":"string"},"package":{"type":"string"},"severity":{"type":"string"},"summary":{"type":"string"},"url":{"type":"string"}}},"Waitlist":{"type":"object","required":["email"],"properties":{"email":{"type":"string"},"website":{"type":"string","description":"honeypot"}}},"WeakServer":{"type":"object","required":["server_id","role","region","availability","downtime_min","outages","pattern"],"properties":{"availability":{"type":"number","format":"double"},"downtime_min":{"type":"integer","format":"int64"},"mttr_min":{"type":["number","null"],"format":"double"},"outages":{"type":"integer","format":"int64"},"pattern":{"type":"string"},"region":{"type":"string"},"role":{"type":"string"},"server_id":{"type":"string"}}},"WindowRequest":{"type":"object","required":["name","scope","starts_at","minutes"],"properties":{"minutes":{"type":"integer","format":"int64","description":"length in minutes (5 - 1440)"},"name":{"type":"string"},"reason":{"type":["string","null"]},"scope":{"$ref":"#/components/schemas/Scope"},"starts_at":{"type":"string","format":"date-time"}}},"WindowView":{"allOf":[{"$ref":"#/components/schemas/MaintenanceWindow"},{"type":"object","required":["status","servers"],"properties":{"servers":{"type":"integer","description":"servers covered right now","minimum":0},"status":{"type":"string","description":"\"scheduled\", \"active\" or \"finished\""}}}]}}},"tags":[{"name":"Account","description":"Sign-up, sign-in, your profile, your team and the audit log"},{"name":"Billing","description":"Plans, subscription, invoice details and PDF invoices"},{"name":"Site","description":"The site's status and the launch list"},{"name":"Servers","description":"The fleet, live numbers and history"},{"name":"Incidents","description":"Incidents, maintenance windows and notifications"},{"name":"Reliability","description":"SLOs and error budgets, self-healing, uptime insights, capacity forecasts, anomalies, reports"},{"name":"Security","description":"Vulnerabilities, hardening, certificates and edge protection"},{"name":"Network","description":"Packet loss, latency, DNS and port availability"},{"name":"Actions","description":"Change things on servers"},{"name":"Logs","description":"Structured log search"},{"name":"Threats","description":"Security events, scoring and fleet-wide IP blocks"},{"name":"Alerts","description":"Threshold rules and alerts"},{"name":"Deployments","description":"Rolling updates with canary and auto-rollback"},{"name":"System","description":"How ServerIntel is processing your fleet"}]}