{"openapi":"3.1.0","info":{"title":"AlexWeb API","version":"1.3.0","description":"Manage AlexWeb API data, applications, events, and installation file downloads, with a custom Home Assistant integration for resources and live updates."},"servers":[{"url":"https://api.alexxweb.com","description":"Public API"}],"tags":[{"name":"Base API"},{"name":"Health & Status"},{"name":"Echo"},{"name":"Developer Accounts"},{"name":"API Keys"},{"name":"OAuth"},{"name":"Applications"},{"name":"Resources"},{"name":"Installations"},{"name":"Events"},{"name":"Webhooks"},{"name":"Schedules"},{"name":"Usage"},{"name":"Home Assistant"}],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"paths":{"/health":{"get":{"operationId":"getHealth","summary":"Check API health","tags":["Base API"],"security":[],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Health"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"400":{"description":"Invalid input","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"401":{"description":"Missing or invalid credentials","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."},"WWW-Authenticate":{"schema":{"type":"string"},"description":"Bearer authentication challenge."}}},"403":{"description":"Required scope not granted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"410":{"description":"Event cursor is no longer available","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"412":{"description":"Resource version does not match","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"413":{"description":"Request body is too large","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"415":{"description":"Wrong content type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"429":{"description":"Rate limit reached","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."},"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry."}}},"500":{"description":"Internal server error","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}}}}},"/api/v1/health":{"get":{"operationId":"getReadiness","summary":"Check API storage readiness","tags":["Health & Status"],"description":"Readiness includes a lightweight storage read. Returns 503 when storage is unavailable. No private infrastructure details are exposed.","security":[],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Readiness"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"400":{"description":"Invalid input","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"401":{"description":"Missing or invalid credentials","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."},"WWW-Authenticate":{"schema":{"type":"string"},"description":"Bearer authentication challenge."}}},"403":{"description":"Required scope not granted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"410":{"description":"Event cursor is no longer available","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"412":{"description":"Resource version does not match","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"413":{"description":"Request body is too large","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"415":{"description":"Wrong content type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"429":{"description":"Rate limit reached","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."},"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry."}}},"500":{"description":"Internal server error","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"503":{"description":"Storage unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Readiness"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}}}}},"/api/v1/status":{"get":{"operationId":"getServiceStatus","summary":"Read service status and uptime","tags":["Health & Status"],"description":"Public point-in-time readiness, process uptime, version, and storage-check latency. Does not test external webhook receivers or connected apps.","security":[],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceStatus"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"400":{"description":"Invalid input","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"401":{"description":"Missing or invalid credentials","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."},"WWW-Authenticate":{"schema":{"type":"string"},"description":"Bearer authentication challenge."}}},"403":{"description":"Required scope not granted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"410":{"description":"Event cursor is no longer available","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"412":{"description":"Resource version does not match","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"413":{"description":"Request body is too large","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"415":{"description":"Wrong content type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"429":{"description":"Rate limit reached","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."},"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry."}}},"500":{"description":"Internal server error","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"503":{"description":"Service degraded","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceStatus"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}}}}},"/api/v1":{"get":{"operationId":"getApiInfo","summary":"Get API name and version","tags":["Base API"],"security":[],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiInfo"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"400":{"description":"Invalid input","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"401":{"description":"Missing or invalid credentials","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."},"WWW-Authenticate":{"schema":{"type":"string"},"description":"Bearer authentication challenge."}}},"403":{"description":"Required scope not granted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"410":{"description":"Event cursor is no longer available","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"412":{"description":"Resource version does not match","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"413":{"description":"Request body is too large","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"415":{"description":"Wrong content type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"429":{"description":"Rate limit reached","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."},"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry."}}},"500":{"description":"Internal server error","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}}}}},"/api/v1/capabilities":{"get":{"operationId":"getCapabilities","summary":"Discover API features","tags":["Base API"],"security":[],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Capabilities"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"400":{"description":"Invalid input","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"401":{"description":"Missing or invalid credentials","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."},"WWW-Authenticate":{"schema":{"type":"string"},"description":"Bearer authentication challenge."}}},"403":{"description":"Required scope not granted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"410":{"description":"Event cursor is no longer available","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"412":{"description":"Resource version does not match","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"413":{"description":"Request body is too large","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"415":{"description":"Wrong content type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"429":{"description":"Rate limit reached","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."},"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry."}}},"500":{"description":"Internal server error","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}}}}},"/openapi.json":{"get":{"operationId":"getOpenApi","summary":"Get the OpenAPI specification","tags":["Base API"],"security":[],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"400":{"description":"Invalid input","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"401":{"description":"Missing or invalid credentials","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."},"WWW-Authenticate":{"schema":{"type":"string"},"description":"Bearer authentication challenge."}}},"403":{"description":"Required scope not granted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"410":{"description":"Event cursor is no longer available","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"412":{"description":"Resource version does not match","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"413":{"description":"Request body is too large","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"415":{"description":"Wrong content type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"429":{"description":"Rate limit reached","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."},"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry."}}},"500":{"description":"Internal server error","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}}}}},"/api/v1/echo":{"post":{"operationId":"echoMessage","summary":"Send back a message","tags":["Echo"],"description":"Public JSON example. Send only message, 1–1000 JavaScript code units. Maximum body size is 16 KiB.","security":[],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Echo"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"400":{"description":"Invalid input","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"401":{"description":"Missing or invalid credentials","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."},"WWW-Authenticate":{"schema":{"type":"string"},"description":"Bearer authentication challenge."}}},"403":{"description":"Required scope not granted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"410":{"description":"Event cursor is no longer available","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"412":{"description":"Resource version does not match","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"413":{"description":"Request body is too large","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"415":{"description":"Wrong content type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"429":{"description":"Rate limit reached","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."},"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry."}}},"500":{"description":"Internal server error","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Echo"}}}}}},"/api/v1/developer/signup":{"post":{"operationId":"createDeveloperAccount","summary":"Create a developer account","tags":["Developer Accounts"],"description":"Creates an isolated account and a 12-hour browser session. No API key is returned; create a dedicated key in the console after signup. No email or password recovery flow. Signup is limited to five attempts per IP per hour and may close at capacity.","security":[],"responses":{"201":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperSession"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."},"Set-Cookie":{"schema":{"type":"string"},"description":"Hosted developer session cookie: __Host-aw_developer_session; Path=/; Secure; HttpOnly; SameSite=Strict. Logout expires the cookie."}}},"400":{"description":"Invalid input","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"401":{"description":"Missing or invalid credentials","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."},"WWW-Authenticate":{"schema":{"type":"string"},"description":"Bearer authentication challenge."}}},"403":{"description":"Required scope not granted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"410":{"description":"Event cursor is no longer available","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"412":{"description":"Resource version does not match","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"413":{"description":"Request body is too large","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"415":{"description":"Wrong content type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"429":{"description":"Rate limit reached","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."},"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry."}}},"500":{"description":"Internal server error","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"503":{"description":"Registration unavailable or authentication busy; retry later","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}}},"parameters":[{"name":"Origin","in":"header","required":true,"schema":{"type":"string","const":"https://api.alexxweb.com"},"description":"The exact API origin. These routes are designed for the same-origin developer console."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperSignup"}}}}}},"/api/v1/developer/login":{"post":{"operationId":"loginDeveloperAccount","summary":"Sign in to the developer console","tags":["Developer Accounts"],"description":"Starts a 12-hour absolute browser session. Requires the exact API Origin. At most ten sign-in attempts per IP per minute. The hosted service sets a Secure, HttpOnly, SameSite=Strict cookie.","security":[],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperSession"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."},"Set-Cookie":{"schema":{"type":"string"},"description":"Hosted developer session cookie: __Host-aw_developer_session; Path=/; Secure; HttpOnly; SameSite=Strict. Logout expires the cookie."}}},"400":{"description":"Invalid input","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"401":{"description":"Missing or invalid credentials","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."},"WWW-Authenticate":{"schema":{"type":"string"},"description":"Bearer authentication challenge."}}},"403":{"description":"Required scope not granted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"410":{"description":"Event cursor is no longer available","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"412":{"description":"Resource version does not match","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"413":{"description":"Request body is too large","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"415":{"description":"Wrong content type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"429":{"description":"Rate limit reached","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."},"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry."}}},"500":{"description":"Internal server error","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"503":{"description":"Authentication busy; retry later","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}}},"parameters":[{"name":"Origin","in":"header","required":true,"schema":{"type":"string","const":"https://api.alexxweb.com"},"description":"The exact API origin. These routes are designed for the same-origin developer console."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperLogin"}}}}}},"/api/v1/developer/session":{"get":{"operationId":"getDeveloperSession","summary":"Read the current browser session","tags":["Developer Accounts"],"description":"Requires the developer session cookie. Returns account metadata, CSRF token, expiry, and account allowances. A missing or expired session returns 401. API keys are not accepted for this account-settings route.","security":[{"DeveloperSessionCookie":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperSession"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"400":{"description":"Invalid input","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"401":{"description":"Missing or invalid credentials","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."},"WWW-Authenticate":{"schema":{"type":"string"},"description":"Bearer authentication challenge."}}},"403":{"description":"Required scope not granted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"410":{"description":"Event cursor is no longer available","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"412":{"description":"Resource version does not match","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"413":{"description":"Request body is too large","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"415":{"description":"Wrong content type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"429":{"description":"Rate limit reached","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."},"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry."}}},"500":{"description":"Internal server error","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}}}}},"/api/v1/developer/logout":{"post":{"operationId":"logoutDeveloperAccount","summary":"Sign out of the current browser session","tags":["Developer Accounts"],"description":"Ends the current browser session and clears its cookie. Does not revoke API keys or other browser sessions.","security":[{"DeveloperSessionCookie":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"loggedOut":{"type":"boolean","const":true}},"required":["loggedOut"],"additionalProperties":false}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."},"Set-Cookie":{"schema":{"type":"string"},"description":"Hosted developer session cookie: __Host-aw_developer_session; Path=/; Secure; HttpOnly; SameSite=Strict. Logout expires the cookie."}}},"400":{"description":"Invalid input","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"401":{"description":"Missing or invalid credentials","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."},"WWW-Authenticate":{"schema":{"type":"string"},"description":"Bearer authentication challenge."}}},"403":{"description":"Required scope not granted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"410":{"description":"Event cursor is no longer available","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"412":{"description":"Resource version does not match","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"413":{"description":"Request body is too large","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"415":{"description":"Wrong content type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"429":{"description":"Rate limit reached","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."},"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry."}}},"500":{"description":"Internal server error","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}}},"parameters":[{"name":"Origin","in":"header","required":true,"schema":{"type":"string","const":"https://api.alexxweb.com"},"description":"The exact API origin. These routes are designed for the same-origin developer console."},{"name":"X-CSRF-Token","in":"header","required":true,"schema":{"type":"string"},"description":"The csrfToken returned for the current browser session."}]}},"/api/v1/developer/password":{"post":{"operationId":"changeDeveloperPassword","summary":"Change the developer account password","tags":["Developer Accounts"],"description":"Checks the current password, changes it, and revokes the account's other browser sessions. The current browser session remains active. API keys and OAuth client secrets are managed separately.","security":[{"DeveloperSessionCookie":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperSession"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"400":{"description":"Invalid input","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"401":{"description":"Missing or invalid credentials","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."},"WWW-Authenticate":{"schema":{"type":"string"},"description":"Bearer authentication challenge."}}},"403":{"description":"Required scope not granted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"410":{"description":"Event cursor is no longer available","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"412":{"description":"Resource version does not match","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"413":{"description":"Request body is too large","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"415":{"description":"Wrong content type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"429":{"description":"Rate limit reached","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."},"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry."}}},"500":{"description":"Internal server error","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"503":{"description":"Authentication busy; retry later","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}}},"parameters":[{"name":"Origin","in":"header","required":true,"schema":{"type":"string","const":"https://api.alexxweb.com"},"description":"The exact API origin. These routes are designed for the same-origin developer console."},{"name":"X-CSRF-Token","in":"header","required":true,"schema":{"type":"string"},"description":"The csrfToken returned for the current browser session."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperPasswordChange"}}}}}},"/api/v1/auth/me":{"get":{"operationId":"getIdentity","summary":"Check the current credential","tags":["API Keys"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Identity"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"400":{"description":"Invalid input","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"401":{"description":"Missing or invalid credentials","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."},"WWW-Authenticate":{"schema":{"type":"string"},"description":"Bearer authentication challenge."}}},"403":{"description":"Required scope not granted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"410":{"description":"Event cursor is no longer available","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"412":{"description":"Resource version does not match","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"413":{"description":"Request body is too large","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"415":{"description":"Wrong content type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"429":{"description":"Rate limit reached","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."},"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry."}}},"500":{"description":"Internal server error","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}}}}},"/api/v1/keys":{"get":{"operationId":"listApiKeys","summary":"List API keys","tags":["API Keys"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/ApiKey"}},"pagination":{"$ref":"#/components/schemas/Pagination"}},"required":["data","pagination"],"additionalProperties":false}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"400":{"description":"Invalid input","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"401":{"description":"Missing or invalid credentials","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."},"WWW-Authenticate":{"schema":{"type":"string"},"description":"Bearer authentication challenge."}}},"403":{"description":"Required scope not granted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"410":{"description":"Event cursor is no longer available","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"412":{"description":"Resource version does not match","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"413":{"description":"Request body is too large","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"415":{"description":"Wrong content type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"429":{"description":"Rate limit reached","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."},"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry."}}},"500":{"description":"Internal server error","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}}},"x-required-scopes":["keys:manage"],"parameters":[{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":25}},{"name":"offset","in":"query","schema":{"type":"integer","minimum":0,"maximum":1000000,"default":0}}]},"post":{"operationId":"createApiKey","summary":"Create an API key","tags":["API Keys"],"description":"A key cannot grant scopes the current credential lacks. Save the key value from this response; it is not returned again.","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"responses":{"201":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKeyCreated"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"400":{"description":"Invalid input","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"401":{"description":"Missing or invalid credentials","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."},"WWW-Authenticate":{"schema":{"type":"string"},"description":"Bearer authentication challenge."}}},"403":{"description":"Required scope not granted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"410":{"description":"Event cursor is no longer available","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"412":{"description":"Resource version does not match","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"413":{"description":"Request body is too large","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"415":{"description":"Wrong content type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"429":{"description":"Rate limit reached","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."},"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry."}}},"500":{"description":"Internal server error","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}}},"x-required-scopes":["keys:manage"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKeyCreate"}}}}}},"/api/v1/keys/{id}/rotate":{"post":{"operationId":"rotateApiKey","summary":"Rotate an API key","tags":["API Keys"],"description":"Atomically revokes the old key and creates a replacement with the same scopes. Expiry preserves the remaining lifetime or is shortened to the caller expiry when sooner. The caller must hold every scope granted by the original key. Save the new key privately; it is shown once. Connections authorized by the revoked key lose that authorization.","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"responses":{"201":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKeyCreated"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"400":{"description":"Invalid input","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"401":{"description":"Missing or invalid credentials","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."},"WWW-Authenticate":{"schema":{"type":"string"},"description":"Bearer authentication challenge."}}},"403":{"description":"Required scope not granted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"410":{"description":"Event cursor is no longer available","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"412":{"description":"Resource version does not match","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"413":{"description":"Request body is too large","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"415":{"description":"Wrong content type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"429":{"description":"Rate limit reached","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."},"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry."}}},"500":{"description":"Internal server error","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}}},"x-required-scopes":["keys:manage"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{},"required":[],"additionalProperties":false}}}}}},"/api/v1/keys/{id}":{"delete":{"operationId":"revokeApiKey","summary":"Revoke an API key","tags":["API Keys"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"revoked":{"type":"boolean","const":true}},"required":["id","revoked"],"additionalProperties":false}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"400":{"description":"Invalid input","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"401":{"description":"Missing or invalid credentials","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."},"WWW-Authenticate":{"schema":{"type":"string"},"description":"Bearer authentication challenge."}}},"403":{"description":"Required scope not granted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"410":{"description":"Event cursor is no longer available","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"412":{"description":"Resource version does not match","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"413":{"description":"Request body is too large","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"415":{"description":"Wrong content type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"429":{"description":"Rate limit reached","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."},"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry."}}},"500":{"description":"Internal server error","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}}},"x-required-scopes":["keys:manage"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}]}},"/api/v1/apps":{"get":{"operationId":"listApplications","summary":"List OAuth applications","tags":["Applications"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Application"}},"pagination":{"$ref":"#/components/schemas/Pagination"}},"required":["data","pagination"],"additionalProperties":false}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"400":{"description":"Invalid input","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"401":{"description":"Missing or invalid credentials","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."},"WWW-Authenticate":{"schema":{"type":"string"},"description":"Bearer authentication challenge."}}},"403":{"description":"Required scope not granted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"410":{"description":"Event cursor is no longer available","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"412":{"description":"Resource version does not match","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"413":{"description":"Request body is too large","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"415":{"description":"Wrong content type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"429":{"description":"Rate limit reached","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."},"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry."}}},"500":{"description":"Internal server error","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}}},"x-required-scopes":["apps:manage"],"parameters":[{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":25}},{"name":"offset","in":"query","schema":{"type":"integer","minimum":0,"maximum":1000000,"default":0}}]},"post":{"operationId":"createApplication","summary":"Register an OAuth application","tags":["Applications"],"description":"Callbacks must match exactly. HTTPS is required except HTTP on localhost/127.0.0.1/[::1]. Wildcards, fragments and user information are not allowed. Public apps have no client secret.","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"responses":{"201":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApplicationCreated"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"400":{"description":"Invalid input","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"401":{"description":"Missing or invalid credentials","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."},"WWW-Authenticate":{"schema":{"type":"string"},"description":"Bearer authentication challenge."}}},"403":{"description":"Required scope not granted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"410":{"description":"Event cursor is no longer available","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"412":{"description":"Resource version does not match","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"413":{"description":"Request body is too large","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"415":{"description":"Wrong content type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"429":{"description":"Rate limit reached","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."},"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry."}}},"500":{"description":"Internal server error","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}}},"x-required-scopes":["apps:manage"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApplicationCreate"}}}}}},"/api/v1/apps/{id}":{"get":{"operationId":"getApplication","summary":"Get an application","tags":["Applications"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Application"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"400":{"description":"Invalid input","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"401":{"description":"Missing or invalid credentials","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."},"WWW-Authenticate":{"schema":{"type":"string"},"description":"Bearer authentication challenge."}}},"403":{"description":"Required scope not granted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"410":{"description":"Event cursor is no longer available","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"412":{"description":"Resource version does not match","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"413":{"description":"Request body is too large","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"415":{"description":"Wrong content type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"429":{"description":"Rate limit reached","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."},"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry."}}},"500":{"description":"Internal server error","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}}},"x-required-scopes":["apps:manage"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}]},"patch":{"operationId":"updateApplication","summary":"Update an application","tags":["Applications"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Application"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"400":{"description":"Invalid input","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"401":{"description":"Missing or invalid credentials","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."},"WWW-Authenticate":{"schema":{"type":"string"},"description":"Bearer authentication challenge."}}},"403":{"description":"Required scope not granted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"410":{"description":"Event cursor is no longer available","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"412":{"description":"Resource version does not match","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"413":{"description":"Request body is too large","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"415":{"description":"Wrong content type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"429":{"description":"Rate limit reached","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."},"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry."}}},"500":{"description":"Internal server error","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}}},"x-required-scopes":["apps:manage"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApplicationPatch"}}}}},"delete":{"operationId":"deleteApplication","summary":"Delete an application","tags":["Applications"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"deleted":{"type":"boolean","const":true}},"required":["id","deleted"],"additionalProperties":false}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"400":{"description":"Invalid input","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"401":{"description":"Missing or invalid credentials","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."},"WWW-Authenticate":{"schema":{"type":"string"},"description":"Bearer authentication challenge."}}},"403":{"description":"Required scope not granted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"410":{"description":"Event cursor is no longer available","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"412":{"description":"Resource version does not match","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"413":{"description":"Request body is too large","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"415":{"description":"Wrong content type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"429":{"description":"Rate limit reached","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."},"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry."}}},"500":{"description":"Internal server error","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}}},"x-required-scopes":["apps:manage"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}]}},"/api/v1/apps/{id}/rotate-secret":{"post":{"operationId":"rotateApplicationSecret","summary":"Rotate a confidential client secret","tags":["Applications"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"clientId":{"type":"string"},"clientSecret":{"type":"string"}},"required":["clientId","clientSecret"],"additionalProperties":false}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"400":{"description":"Invalid input","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"401":{"description":"Missing or invalid credentials","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."},"WWW-Authenticate":{"schema":{"type":"string"},"description":"Bearer authentication challenge."}}},"403":{"description":"Required scope not granted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"410":{"description":"Event cursor is no longer available","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"412":{"description":"Resource version does not match","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"413":{"description":"Request body is too large","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"415":{"description":"Wrong content type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"429":{"description":"Rate limit reached","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."},"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry."}}},"500":{"description":"Internal server error","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}}},"x-required-scopes":["apps:manage"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}]}},"/.well-known/oauth-authorization-server":{"get":{"operationId":"getOAuthDiscovery","summary":"Discover OAuth settings","tags":["OAuth"],"security":[],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OAuthDiscovery"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"400":{"description":"Invalid input","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"401":{"description":"Missing or invalid credentials","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."},"WWW-Authenticate":{"schema":{"type":"string"},"description":"Bearer authentication challenge."}}},"403":{"description":"Required scope not granted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"410":{"description":"Event cursor is no longer available","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"412":{"description":"Resource version does not match","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"413":{"description":"Request body is too large","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"415":{"description":"Wrong content type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"429":{"description":"Rate limit reached","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."},"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry."}}},"500":{"description":"Internal server error","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}}}}},"/oauth/authorize":{"get":{"operationId":"showOAuthConsent","summary":"Open the OAuth approval page","tags":["OAuth"],"description":"Authorization code flow for public or confidential apps. S256 PKCE and state are required; use the exact registered callback.","security":[],"responses":{"200":{"description":"Approval page. Enter a private API key only here to approve the requested scopes.","content":{"text/html":{"schema":{"type":"string"}}}},"400":{"description":"Invalid OAuth authorization request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OAuthError"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"401":{"description":"Missing or invalid credentials","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."},"WWW-Authenticate":{"schema":{"type":"string"},"description":"Bearer authentication challenge."}}},"403":{"description":"Required scope not granted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"410":{"description":"Event cursor is no longer available","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"412":{"description":"Resource version does not match","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"413":{"description":"Request body is too large","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"415":{"description":"Wrong content type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"429":{"description":"Rate limit reached","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."},"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry."}}},"500":{"description":"Internal server error","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"503":{"description":"Consent capacity reached; retry later","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OAuthError"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}}},"parameters":[{"name":"response_type","in":"query","required":true,"schema":{"type":"string","const":"code"}},{"name":"client_id","in":"query","required":true,"schema":{"type":"string"}},{"name":"redirect_uri","in":"query","required":true,"schema":{"type":"string","format":"uri"}},{"name":"scope","in":"query","schema":{"type":"string"}},{"name":"state","in":"query","required":true,"schema":{"type":"string","minLength":8,"maxLength":500}},{"name":"code_challenge","in":"query","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9_-]{43}$"}},{"name":"code_challenge_method","in":"query","required":true,"schema":{"type":"string","const":"S256"}}]},"post":{"operationId":"approveOAuthApplication","summary":"Approve or deny an OAuth application","tags":["OAuth"],"description":"Submit the approval page shown by GET /oauth/authorize. Requires the aw_consent cookie and csrf value from that page. Client, callback, state, scopes and PKCE are stored in the server-side consent session.","security":[],"responses":{"302":{"description":"Redirect to the registered callback with code and state, or an OAuth error.","headers":{"Location":{"schema":{"type":"string","format":"uri"}}}},"400":{"description":"OAuth approval error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OAuthError"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"401":{"description":"OAuth approval error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OAuthError"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"403":{"description":"OAuth approval error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OAuthError"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"410":{"description":"Event cursor is no longer available","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"412":{"description":"Resource version does not match","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"413":{"description":"Request body is too large","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"415":{"description":"Wrong content type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"429":{"description":"Rate limit reached","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."},"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry."}}},"500":{"description":"Internal server error","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}}},"parameters":[{"name":"aw_consent","in":"cookie","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/OAuthConsent"}}}}}},"/oauth/token":{"post":{"operationId":"issueOAuthToken","summary":"Exchange a code or refresh an access token","tags":["OAuth"],"description":"Confidential apps use HTTP Basic with client id and secret; public apps send client_id in the form. authorization_code needs code, redirect_uri and code_verifier. refresh_token needs refresh_token. client_credentials is only for confidential apps and issues no refresh token. Access tokens last 15 minutes. Rotating refresh tokens remain within the original 30-day grant lifetime.","security":[{"OAuthClientBasic":[]},{}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenResponse"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"400":{"description":"OAuth token error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OAuthError"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"401":{"description":"Client authentication failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OAuthError"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."},"WWW-Authenticate":{"schema":{"type":"string"},"description":"HTTP Basic client authentication challenge."}}},"403":{"description":"Required scope not granted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"410":{"description":"Event cursor is no longer available","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"412":{"description":"Resource version does not match","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"413":{"description":"Request body is too large","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"415":{"description":"Wrong content type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"429":{"description":"Rate limit reached","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."},"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry."}}},"500":{"description":"Internal server error","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}}},"requestBody":{"required":true,"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/TokenRequest"}}}}}},"/oauth/revoke":{"post":{"operationId":"revokeOAuthToken","summary":"Revoke a token","tags":["OAuth"],"description":"Use the same client authentication as /oauth/token. Revoking a refresh token revokes its token family.","security":[{"OAuthClientBasic":[]},{}],"responses":{"200":{"description":"Token family revoked, or token already unknown","content":{"application/json":{"schema":{"type":"object","properties":{},"required":[],"additionalProperties":false}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"400":{"description":"OAuth request error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OAuthError"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"401":{"description":"Client authentication failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OAuthError"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."},"WWW-Authenticate":{"schema":{"type":"string"},"description":"HTTP Basic client authentication challenge."}}},"403":{"description":"Required scope not granted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"410":{"description":"Event cursor is no longer available","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"412":{"description":"Resource version does not match","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"413":{"description":"Request body is too large","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"415":{"description":"Wrong content type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"429":{"description":"Rate limit reached","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."},"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry."}}},"500":{"description":"Internal server error","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}}},"requestBody":{"required":true,"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/RevokeRequest"}}}}}},"/api/v1/resources":{"get":{"operationId":"listResources","summary":"List resources","tags":["Resources"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"OAuth2":["resources:read"]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Resource"}},"pagination":{"$ref":"#/components/schemas/Pagination"}},"required":["data","pagination"],"additionalProperties":false}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"400":{"description":"Invalid input","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"401":{"description":"Missing or invalid credentials","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."},"WWW-Authenticate":{"schema":{"type":"string"},"description":"Bearer authentication challenge."}}},"403":{"description":"Required scope not granted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"410":{"description":"Event cursor is no longer available","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"412":{"description":"Resource version does not match","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"413":{"description":"Request body is too large","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"415":{"description":"Wrong content type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"429":{"description":"Rate limit reached","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."},"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry."}}},"500":{"description":"Internal server error","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}}},"x-required-scopes":["resources:read"],"parameters":[{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":25}},{"name":"offset","in":"query","schema":{"type":"integer","minimum":0,"maximum":1000000,"default":0}},{"name":"type","in":"query","schema":{"type":"string","enum":["sensor","binary_sensor","switch","text"]}},{"name":"tag","in":"query","schema":{"type":"string"}}]},"post":{"operationId":"createResource","summary":"Create a resource","tags":["Resources"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"OAuth2":["resources:write"]}],"responses":{"201":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Resource"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."},"ETag":{"schema":{"type":"string","example":"\"1\""},"description":"Quoted resource version, suitable for If-Match on resource updates."}}},"400":{"description":"Invalid input","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"401":{"description":"Missing or invalid credentials","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."},"WWW-Authenticate":{"schema":{"type":"string"},"description":"Bearer authentication challenge."}}},"403":{"description":"Required scope not granted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"410":{"description":"Event cursor is no longer available","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"412":{"description":"Resource version does not match","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"413":{"description":"Request body is too large","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"415":{"description":"Wrong content type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"429":{"description":"Rate limit reached","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."},"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry."}}},"500":{"description":"Internal server error","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}}},"x-required-scopes":["resources:write"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResourceCreate"}}}}}},"/api/v1/resources/{id}":{"get":{"operationId":"getResource","summary":"Get a resource","tags":["Resources"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"OAuth2":["resources:read"]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Resource"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."},"ETag":{"schema":{"type":"string","example":"\"1\""},"description":"Quoted resource version, suitable for If-Match on resource updates."}}},"400":{"description":"Invalid input","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"401":{"description":"Missing or invalid credentials","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."},"WWW-Authenticate":{"schema":{"type":"string"},"description":"Bearer authentication challenge."}}},"403":{"description":"Required scope not granted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"410":{"description":"Event cursor is no longer available","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"412":{"description":"Resource version does not match","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"413":{"description":"Request body is too large","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"415":{"description":"Wrong content type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"429":{"description":"Rate limit reached","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."},"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry."}}},"500":{"description":"Internal server error","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}}},"x-required-scopes":["resources:read"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}]},"patch":{"operationId":"updateResource","summary":"Update a resource","tags":["Resources"],"description":"Only supplied fields change. Resource type is fixed. binary_sensor and switch states must be boolean, text states string, sensor states number or string.","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"OAuth2":["resources:write"]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Resource"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."},"ETag":{"schema":{"type":"string","example":"\"1\""},"description":"Quoted resource version, suitable for If-Match on resource updates."}}},"400":{"description":"Invalid input","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"401":{"description":"Missing or invalid credentials","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."},"WWW-Authenticate":{"schema":{"type":"string"},"description":"Bearer authentication challenge."}}},"403":{"description":"Required scope not granted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"410":{"description":"Event cursor is no longer available","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"412":{"description":"Resource version does not match","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"413":{"description":"Request body is too large","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"415":{"description":"Wrong content type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"429":{"description":"Rate limit reached","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."},"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry."}}},"500":{"description":"Internal server error","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}}},"x-required-scopes":["resources:write"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"If-Match","in":"header","schema":{"type":"string","example":"\"1\""},"description":"Optional quoted resource version. A stale version returns 412."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResourcePatch"}}}}},"delete":{"operationId":"deleteResource","summary":"Delete a resource","tags":["Resources"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"OAuth2":["resources:write"]}],"responses":{"204":{"description":"Success"},"400":{"description":"Invalid input","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"401":{"description":"Missing or invalid credentials","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."},"WWW-Authenticate":{"schema":{"type":"string"},"description":"Bearer authentication challenge."}}},"403":{"description":"Required scope not granted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"410":{"description":"Event cursor is no longer available","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"412":{"description":"Resource version does not match","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"413":{"description":"Request body is too large","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"415":{"description":"Wrong content type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"429":{"description":"Rate limit reached","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."},"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry."}}},"500":{"description":"Internal server error","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}}},"x-required-scopes":["resources:write"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"If-Match","in":"header","schema":{"type":"string","example":"\"1\""},"description":"Optional quoted resource version. A stale version returns 412."}]}},"/api/v1/installations":{"get":{"operationId":"listInstallations","summary":"List uploaded installation files","tags":["Installations"],"description":"Lists your account’s uploaded files, public download URLs, availability, and storage allowance. The returned URLs grant public read access to their files.","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"OAuth2":["resources:read"]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InstallationPage"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"400":{"description":"Invalid input","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"401":{"description":"Missing or invalid credentials","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."},"WWW-Authenticate":{"schema":{"type":"string"},"description":"Bearer authentication challenge."}}},"403":{"description":"Required scope not granted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"410":{"description":"Event cursor is no longer available","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"412":{"description":"Resource version does not match","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"413":{"description":"Request body is too large","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"415":{"description":"Wrong content type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"429":{"description":"Rate limit reached","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."},"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry."}}},"500":{"description":"Internal server error","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}}},"x-required-scopes":["resources:read"],"parameters":[{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":25}},{"name":"offset","in":"query","schema":{"type":"integer","minimum":0,"maximum":1000000,"default":0}}]},"post":{"operationId":"uploadInstallation","summary":"Upload an installation file","tags":["Installations"],"description":"Uploads immutable file bytes and creates a random public /v1/install/{token} download URL. Requires resources:write. The service stores the file and never executes it. Upload a new file to publish an update; existing links continue to refer to their original bytes until revoked. Browser session writes require the console’s Origin and CSRF protections, and those links survive logout. A link created with an API key stops working if that key expires, is revoked, or is rotated. An OAuth-created link also stops working when its creating access token expires, normally after 15 minutes; use a signed-in account session for persistent releases.","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"OAuth2":["resources:write"]}],"responses":{"201":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Installation"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."},"Location":{"schema":{"type":"string"},"description":"Relative path to the newly created installation metadata."}}},"400":{"description":"Invalid input","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"401":{"description":"Missing or invalid credentials","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."},"WWW-Authenticate":{"schema":{"type":"string"},"description":"Bearer authentication challenge."}}},"403":{"description":"Required scope not granted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"409":{"description":"Account file count or storage allowance reached","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"410":{"description":"Event cursor is no longer available","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"412":{"description":"Resource version does not match","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"413":{"description":"Request body is too large","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"415":{"description":"Wrong content type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"429":{"description":"Rate limit reached","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."},"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry."}}},"500":{"description":"Internal server error","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"503":{"description":"Service upload capacity unavailable or too many uploads in progress","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"schema":{"type":"integer","minimum":1},"description":"Present when too many uploads are in progress. Wait this many seconds before retrying."}}}},"x-required-scopes":["resources:write"],"parameters":[{"name":"X-Install-Filename","in":"header","required":true,"schema":{"type":"string"},"description":"Required filename, encoded with encodeURIComponent as UTF-8 percent escapes. Decoded basename must contain 1–200 Unicode characters, with no slash, backslash, control characters, or . / .. names."},{"name":"X-Install-Name","in":"header","schema":{"type":"string"},"description":"Optional display name, encoded with encodeURIComponent as UTF-8 percent escapes. Decoded name must contain 1–120 Unicode characters. Defaults to the filename, shortened to 120 characters."}],"requestBody":{"required":true,"content":{"application/octet-stream":{"schema":{"type":"string","format":"binary","description":"Original file bytes, from 1 byte through 10 MiB (10,485,760 bytes). Send the file directly, not JSON, base64, or multipart form data."}}}}}},"/api/v1/installations/{id}":{"get":{"operationId":"getInstallation","summary":"Read installation file metadata","tags":["Installations"],"description":"Returns metadata for an uploaded file belonging to the authenticated account. This request does not download the file.","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"OAuth2":["resources:read"]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Installation"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"400":{"description":"Invalid input","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"401":{"description":"Missing or invalid credentials","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."},"WWW-Authenticate":{"schema":{"type":"string"},"description":"Bearer authentication challenge."}}},"403":{"description":"Required scope not granted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"410":{"description":"Event cursor is no longer available","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"412":{"description":"Resource version does not match","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"413":{"description":"Request body is too large","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"415":{"description":"Wrong content type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"429":{"description":"Rate limit reached","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."},"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry."}}},"500":{"description":"Internal server error","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}}},"x-required-scopes":["resources:read"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}]},"delete":{"operationId":"revokeInstallation","summary":"Delete an installation file and revoke its link","tags":["Installations"],"description":"Deletes the stored file and permanently revokes its public download URL. A future upload receives a different URL. Downloaded copies cannot be recalled.","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"OAuth2":["resources:write"]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"revoked":{"type":"boolean","const":true}},"required":["id","revoked"],"additionalProperties":false}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"400":{"description":"Invalid input","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"401":{"description":"Missing or invalid credentials","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."},"WWW-Authenticate":{"schema":{"type":"string"},"description":"Bearer authentication challenge."}}},"403":{"description":"Required scope not granted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"410":{"description":"Event cursor is no longer available","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"412":{"description":"Resource version does not match","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"413":{"description":"Request body is too large","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"415":{"description":"Wrong content type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"429":{"description":"Rate limit reached","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."},"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry."}}},"500":{"description":"Internal server error","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}}},"x-required-scopes":["resources:write"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}]}},"/v1/install/{token}":{"get":{"operationId":"downloadInstallation","summary":"Download an installation file","tags":["Installations"],"description":"Public download: no API key or OAuth token is required. Anyone with the exact URL can retrieve the original file bytes. Unknown, deleted, or unavailable links return the same 404 response. Files are returned as attachments and are never executed by the API.","security":[],"responses":{"200":{"description":"The original uploaded file bytes.","headers":{"Content-Type":{"schema":{"type":"string","const":"application/octet-stream"},"description":"Downloads are served as bytes, including text and shell scripts."},"Content-Disposition":{"schema":{"type":"string"},"description":"Attachment filename with an ASCII fallback and a UTF-8 filename* parameter."},"Content-Length":{"schema":{"type":"integer","minimum":1,"maximum":10485760},"description":"File size in bytes."},"Cache-Control":{"schema":{"type":"string","const":"no-store"},"description":"The download must not be cached."},"X-Content-Type-Options":{"schema":{"type":"string","const":"nosniff"}},"Accept-Ranges":{"schema":{"type":"string","const":"none"},"description":"Partial downloads and resume requests are not supported."}},"content":{"application/octet-stream":{"schema":{"type":"string","format":"binary"}}}},"400":{"description":"Invalid input","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"429":{"description":"Rate limit reached","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."},"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry."}}},"500":{"description":"Internal server error","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}}},"parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9_-]{43}$"},"description":"The opaque 256-bit token from an uploaded file’s url. Replace YOUR_INSTALLATION_TOKEN in documentation examples with the entire real token."}]},"head":{"operationId":"inspectInstallationDownload","summary":"Check an installation download without fetching its body","tags":["Installations"],"description":"Returns the same download headers as GET, with no response body. Unknown, deleted, or unavailable links return 404. This endpoint does not run or install the file.","security":[],"responses":{"200":{"description":"Download is available. No response body.","headers":{"Content-Type":{"schema":{"type":"string","const":"application/octet-stream"},"description":"Downloads are served as bytes, including text and shell scripts."},"Content-Disposition":{"schema":{"type":"string"},"description":"Attachment filename with an ASCII fallback and a UTF-8 filename* parameter."},"Content-Length":{"schema":{"type":"integer","minimum":1,"maximum":10485760},"description":"File size in bytes."},"Cache-Control":{"schema":{"type":"string","const":"no-store"},"description":"The download must not be cached."},"X-Content-Type-Options":{"schema":{"type":"string","const":"nosniff"}},"Accept-Ranges":{"schema":{"type":"string","const":"none"},"description":"Partial downloads and resume requests are not supported."}}},"400":{"description":"Invalid input","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"404":{"description":"The link does not exist or is unavailable. No response body."},"429":{"description":"Rate limit reached","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."},"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry."}}},"500":{"description":"Internal server error","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}}},"parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","pattern":"^[A-Za-z0-9_-]{43}$"},"description":"The opaque 256-bit token from an uploaded file’s url. Replace YOUR_INSTALLATION_TOKEN in documentation examples with the entire real token."}]}},"/api/v1/events":{"get":{"operationId":"listEvents","summary":"Read events after a cursor","tags":["Events"],"description":"Events include full resource state and attributes. A cursor ahead of the current cursor returns 400; a pruned cursor returns 410. The newest 10,000 events per account are retained.","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"OAuth2":["events:read"]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventPage"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"400":{"description":"Invalid input","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"401":{"description":"Missing or invalid credentials","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."},"WWW-Authenticate":{"schema":{"type":"string"},"description":"Bearer authentication challenge."}}},"403":{"description":"Required scope not granted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"410":{"description":"Event cursor is no longer available","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"412":{"description":"Resource version does not match","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"413":{"description":"Request body is too large","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"415":{"description":"Wrong content type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"429":{"description":"Rate limit reached","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."},"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry."}}},"500":{"description":"Internal server error","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}}},"x-required-scopes":["events:read"],"parameters":[{"name":"after","in":"query","schema":{"type":"integer","minimum":0,"default":0}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":100}},{"name":"type","in":"query","schema":{"type":"string"}}]},"post":{"operationId":"publishEvent","summary":"Publish a custom event","tags":["Events"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"OAuth2":["events:write"]}],"responses":{"201":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Event"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"400":{"description":"Invalid input","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"401":{"description":"Missing or invalid credentials","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."},"WWW-Authenticate":{"schema":{"type":"string"},"description":"Bearer authentication challenge."}}},"403":{"description":"Required scope not granted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"410":{"description":"Event cursor is no longer available","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"412":{"description":"Resource version does not match","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"413":{"description":"Request body is too large","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"415":{"description":"Wrong content type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"429":{"description":"Rate limit reached","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."},"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry."}}},"500":{"description":"Internal server error","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}}},"x-required-scopes":["events:write"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventCreate"}}}}}},"/api/v1/events/stream":{"get":{"operationId":"streamEvents","summary":"Stream live events","tags":["Events"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"OAuth2":["events:read"]}],"responses":{"200":{"description":"Server-sent events with id, event and JSON data, plus 15-second heartbeat comments. Reconnect with the most recent id. A cursor older than retention returns 410. A maximum of five streams may be open per account. Streams close when credentials expire or are revoked.","content":{"text/event-stream":{"schema":{"type":"string"}}}},"400":{"description":"Invalid input","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"401":{"description":"Missing or invalid credentials","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."},"WWW-Authenticate":{"schema":{"type":"string"},"description":"Bearer authentication challenge."}}},"403":{"description":"Required scope not granted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"410":{"description":"Event cursor is no longer available","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"412":{"description":"Resource version does not match","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"413":{"description":"Request body is too large","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"415":{"description":"Wrong content type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"429":{"description":"Rate limit reached","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."},"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry."}}},"500":{"description":"Internal server error","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}}},"x-required-scopes":["events:read"],"parameters":[{"name":"after","in":"query","schema":{"type":"integer","minimum":0,"default":0}},{"name":"Last-Event-ID","in":"header","schema":{"type":"string","pattern":"^(0|[1-9][0-9]*)$"},"description":"Must agree with after if both are supplied."},{"name":"type","in":"query","schema":{"type":"string"},"description":"Optional exact automatic or custom event type."},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":100},"description":"Backlog batch size."}]}},"/api/v1/webhooks":{"get":{"operationId":"listWebhooks","summary":"List webhooks","tags":["Webhooks"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"OAuth2":["webhooks:manage"]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Webhook"}},"pagination":{"$ref":"#/components/schemas/Pagination"}},"required":["data","pagination"],"additionalProperties":false}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"400":{"description":"Invalid input","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"401":{"description":"Missing or invalid credentials","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."},"WWW-Authenticate":{"schema":{"type":"string"},"description":"Bearer authentication challenge."}}},"403":{"description":"Required scope not granted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"410":{"description":"Event cursor is no longer available","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"412":{"description":"Resource version does not match","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"413":{"description":"Request body is too large","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"415":{"description":"Wrong content type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"429":{"description":"Rate limit reached","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."},"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry."}}},"500":{"description":"Internal server error","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}}},"x-required-scopes":["webhooks:manage"],"parameters":[{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":25}},{"name":"offset","in":"query","schema":{"type":"integer","minimum":0,"maximum":1000000,"default":0}}]},"post":{"operationId":"createWebhook","summary":"Create an event webhook","tags":["Webhooks"],"description":"HTTPS public targets only; private/loopback/link-local/reserved IPs blocked after DNS resolution and pinned for connection. No redirects. HMAC SHA-256 header X-AlexWeb-Signature: t=UNIX_SECONDS,v1=HEX over timestamp + '.' + raw JSON body. Event ID and delivery ID headers support deduplication. Secret returned once on creation/rotation. Persistent retries up to five attempts with backoff; delivery history on the same major page.","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"OAuth2":["webhooks:manage","events:read"]}],"responses":{"201":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookCreated"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"400":{"description":"Invalid input","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"401":{"description":"Missing or invalid credentials","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."},"WWW-Authenticate":{"schema":{"type":"string"},"description":"Bearer authentication challenge."}}},"403":{"description":"Required scope not granted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"410":{"description":"Event cursor is no longer available","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"412":{"description":"Resource version does not match","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"413":{"description":"Request body is too large","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"415":{"description":"Wrong content type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"429":{"description":"Rate limit reached","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."},"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry."}}},"500":{"description":"Internal server error","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}}},"x-required-scopes":["webhooks:manage","events:read"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookCreate"}}}}}},"/api/v1/webhooks/{id}":{"get":{"operationId":"getWebhook","summary":"Get a webhook","tags":["Webhooks"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"OAuth2":["webhooks:manage"]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Webhook"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"400":{"description":"Invalid input","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"401":{"description":"Missing or invalid credentials","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."},"WWW-Authenticate":{"schema":{"type":"string"},"description":"Bearer authentication challenge."}}},"403":{"description":"Required scope not granted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"410":{"description":"Event cursor is no longer available","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"412":{"description":"Resource version does not match","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"413":{"description":"Request body is too large","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"415":{"description":"Wrong content type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"429":{"description":"Rate limit reached","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."},"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry."}}},"500":{"description":"Internal server error","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}}},"x-required-scopes":["webhooks:manage"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}]},"patch":{"operationId":"updateWebhook","summary":"Update or pause a webhook","tags":["Webhooks"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"OAuth2":["webhooks:manage","events:read"]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Webhook"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"400":{"description":"Invalid input","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"401":{"description":"Missing or invalid credentials","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."},"WWW-Authenticate":{"schema":{"type":"string"},"description":"Bearer authentication challenge."}}},"403":{"description":"Required scope not granted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"410":{"description":"Event cursor is no longer available","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"412":{"description":"Resource version does not match","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"413":{"description":"Request body is too large","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"415":{"description":"Wrong content type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"429":{"description":"Rate limit reached","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."},"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry."}}},"500":{"description":"Internal server error","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}}},"x-required-scopes":["webhooks:manage","events:read"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"If-Match","in":"header","schema":{"type":"string","example":"\"1\""},"description":"Optional quoted resource version. A stale version returns 412."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookPatch"}}}}},"delete":{"operationId":"deleteWebhook","summary":"Delete a webhook","tags":["Webhooks"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"OAuth2":["webhooks:manage"]}],"responses":{"204":{"description":"Success"},"400":{"description":"Invalid input","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"401":{"description":"Missing or invalid credentials","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."},"WWW-Authenticate":{"schema":{"type":"string"},"description":"Bearer authentication challenge."}}},"403":{"description":"Required scope not granted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"410":{"description":"Event cursor is no longer available","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"412":{"description":"Resource version does not match","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"413":{"description":"Request body is too large","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"415":{"description":"Wrong content type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"429":{"description":"Rate limit reached","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."},"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry."}}},"500":{"description":"Internal server error","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}}},"x-required-scopes":["webhooks:manage"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"If-Match","in":"header","schema":{"type":"string","example":"\"1\""},"description":"Optional quoted resource version. A stale version returns 412."}]}},"/api/v1/webhooks/{id}/deliveries":{"get":{"operationId":"listWebhookDeliveries","summary":"List webhook delivery attempts","tags":["Webhooks"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"OAuth2":["webhooks:manage"]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/WebhookDelivery"}},"pagination":{"$ref":"#/components/schemas/Pagination"}},"required":["data","pagination"],"additionalProperties":false}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"400":{"description":"Invalid input","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"401":{"description":"Missing or invalid credentials","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."},"WWW-Authenticate":{"schema":{"type":"string"},"description":"Bearer authentication challenge."}}},"403":{"description":"Required scope not granted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"410":{"description":"Event cursor is no longer available","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"412":{"description":"Resource version does not match","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"413":{"description":"Request body is too large","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"415":{"description":"Wrong content type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"429":{"description":"Rate limit reached","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."},"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry."}}},"500":{"description":"Internal server error","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}}},"x-required-scopes":["webhooks:manage"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":25}},{"name":"offset","in":"query","schema":{"type":"integer","minimum":0,"maximum":1000000,"default":0}}]}},"/api/v1/webhooks/{id}/rotate-secret":{"post":{"operationId":"rotateWebhookSecret","summary":"Rotate a webhook signing secret","tags":["Webhooks"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"OAuth2":["webhooks:manage"]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookCreated"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"400":{"description":"Invalid input","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"401":{"description":"Missing or invalid credentials","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."},"WWW-Authenticate":{"schema":{"type":"string"},"description":"Bearer authentication challenge."}}},"403":{"description":"Required scope not granted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"410":{"description":"Event cursor is no longer available","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"412":{"description":"Resource version does not match","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"413":{"description":"Request body is too large","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"415":{"description":"Wrong content type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"429":{"description":"Rate limit reached","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."},"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry."}}},"500":{"description":"Internal server error","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}}},"x-required-scopes":["webhooks:manage"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}]}},"/api/v1/schedules":{"get":{"operationId":"listSchedules","summary":"List schedules","tags":["Schedules"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"OAuth2":["schedules:manage"]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Schedule"}},"pagination":{"$ref":"#/components/schemas/Pagination"}},"required":["data","pagination"],"additionalProperties":false}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"400":{"description":"Invalid input","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"401":{"description":"Missing or invalid credentials","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."},"WWW-Authenticate":{"schema":{"type":"string"},"description":"Bearer authentication challenge."}}},"403":{"description":"Required scope not granted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"410":{"description":"Event cursor is no longer available","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"412":{"description":"Resource version does not match","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"413":{"description":"Request body is too large","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"415":{"description":"Wrong content type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"429":{"description":"Rate limit reached","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."},"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry."}}},"500":{"description":"Internal server error","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}}},"x-required-scopes":["schedules:manage"],"parameters":[{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":25}},{"name":"offset","in":"query","schema":{"type":"integer","minimum":0,"maximum":1000000,"default":0}}]},"post":{"operationId":"createSchedule","summary":"Create a schedule","tags":["Schedules"],"description":"Choose runAt or intervalSeconds, not both. event.publish also requires events:write; resource.set_state also requires resources:write. Only built-in actions are allowed.","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"OAuth2":["schedules:manage"]}],"responses":{"201":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Schedule"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"400":{"description":"Invalid input","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"401":{"description":"Missing or invalid credentials","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."},"WWW-Authenticate":{"schema":{"type":"string"},"description":"Bearer authentication challenge."}}},"403":{"description":"Required scope not granted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"410":{"description":"Event cursor is no longer available","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"412":{"description":"Resource version does not match","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"413":{"description":"Request body is too large","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"415":{"description":"Wrong content type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"429":{"description":"Rate limit reached","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."},"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry."}}},"500":{"description":"Internal server error","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}}},"x-required-scopes":["schedules:manage"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScheduleCreate"}}}}}},"/api/v1/schedules/{id}":{"get":{"operationId":"getSchedule","summary":"Get a schedule and its run history","tags":["Schedules"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"OAuth2":["schedules:manage"]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Schedule"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"400":{"description":"Invalid input","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"401":{"description":"Missing or invalid credentials","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."},"WWW-Authenticate":{"schema":{"type":"string"},"description":"Bearer authentication challenge."}}},"403":{"description":"Required scope not granted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"410":{"description":"Event cursor is no longer available","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"412":{"description":"Resource version does not match","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"413":{"description":"Request body is too large","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"415":{"description":"Wrong content type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"429":{"description":"Rate limit reached","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."},"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry."}}},"500":{"description":"Internal server error","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}}},"x-required-scopes":["schedules:manage"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}]},"patch":{"operationId":"updateSchedule","summary":"Update or pause a schedule","tags":["Schedules"],"description":"Any edit or re-enabling requires events:write for event.publish, or resources:write for resource.set_state.","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"OAuth2":["schedules:manage"]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Schedule"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"400":{"description":"Invalid input","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"401":{"description":"Missing or invalid credentials","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."},"WWW-Authenticate":{"schema":{"type":"string"},"description":"Bearer authentication challenge."}}},"403":{"description":"Required scope not granted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"410":{"description":"Event cursor is no longer available","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"412":{"description":"Resource version does not match","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"413":{"description":"Request body is too large","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"415":{"description":"Wrong content type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"429":{"description":"Rate limit reached","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."},"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry."}}},"500":{"description":"Internal server error","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}}},"x-required-scopes":["schedules:manage"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"If-Match","in":"header","schema":{"type":"string","example":"\"1\""},"description":"Optional quoted resource version. A stale version returns 412."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SchedulePatch"}}}}},"delete":{"operationId":"deleteSchedule","summary":"Delete a schedule","tags":["Schedules"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"OAuth2":["schedules:manage"]}],"responses":{"204":{"description":"Success"},"400":{"description":"Invalid input","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"401":{"description":"Missing or invalid credentials","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."},"WWW-Authenticate":{"schema":{"type":"string"},"description":"Bearer authentication challenge."}}},"403":{"description":"Required scope not granted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"410":{"description":"Event cursor is no longer available","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"412":{"description":"Resource version does not match","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"413":{"description":"Request body is too large","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"415":{"description":"Wrong content type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"429":{"description":"Rate limit reached","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."},"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry."}}},"500":{"description":"Internal server error","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}}},"x-required-scopes":["schedules:manage"],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"If-Match","in":"header","schema":{"type":"string","example":"\"1\""},"description":"Optional quoted resource version. A stale version returns 412."}]}},"/api/v1/usage":{"get":{"operationId":"getUsage","summary":"Read API usage","tags":["Usage"],"description":"Account request counts, errors, and server latency until response headers are sent. Open event streams count at establishment; timings exclude their ongoing lifetime and response-body transfer. Latency p95 is a bounded-histogram estimate. Historical requests before latency collection have no timing samples.","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"OAuth2":["usage:read"]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Usage"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"400":{"description":"Invalid input","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"401":{"description":"Missing or invalid credentials","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."},"WWW-Authenticate":{"schema":{"type":"string"},"description":"Bearer authentication challenge."}}},"403":{"description":"Required scope not granted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"410":{"description":"Event cursor is no longer available","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"412":{"description":"Resource version does not match","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"413":{"description":"Request body is too large","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"415":{"description":"Wrong content type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"429":{"description":"Rate limit reached","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."},"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry."}}},"500":{"description":"Internal server error","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}}},"x-required-scopes":["usage:read"],"parameters":[{"name":"days","in":"query","schema":{"type":"integer","minimum":1,"maximum":30,"default":7}}]}},"/api/v1/audit":{"get":{"operationId":"listAuditEntries","summary":"Read account audit history","tags":["Usage"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"OAuth2":["usage:read"]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/AuditEntry"}},"pagination":{"$ref":"#/components/schemas/Pagination"}},"required":["data","pagination"],"additionalProperties":false}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"400":{"description":"Invalid input","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"401":{"description":"Missing or invalid credentials","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."},"WWW-Authenticate":{"schema":{"type":"string"},"description":"Bearer authentication challenge."}}},"403":{"description":"Required scope not granted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"410":{"description":"Event cursor is no longer available","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"412":{"description":"Resource version does not match","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"413":{"description":"Request body is too large","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"415":{"description":"Wrong content type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"429":{"description":"Rate limit reached","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."},"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry."}}},"500":{"description":"Internal server error","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}}},"x-required-scopes":["usage:read"],"parameters":[{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":25}},{"name":"offset","in":"query","schema":{"type":"integer","minimum":0,"maximum":1000000,"default":0}}]}},"/api/v1/integrations/home-assistant/manifest":{"get":{"operationId":"getHomeAssistantManifest","summary":"Discover Home Assistant API support","tags":["Home Assistant"],"security":[],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HomeAssistantManifest"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"400":{"description":"Invalid input","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"401":{"description":"Missing or invalid credentials","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."},"WWW-Authenticate":{"schema":{"type":"string"},"description":"Bearer authentication challenge."}}},"403":{"description":"Required scope not granted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"410":{"description":"Event cursor is no longer available","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"412":{"description":"Resource version does not match","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"413":{"description":"Request body is too large","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"415":{"description":"Wrong content type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"429":{"description":"Rate limit reached","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."},"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry."}}},"500":{"description":"Internal server error","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}}}}},"/api/v1/integrations/home-assistant":{"get":{"operationId":"getHomeAssistantInfo","summary":"Read integration settings","tags":["Home Assistant"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"OAuth2":["integrations:read","resources:read","events:read"]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HomeAssistantInfo"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"400":{"description":"Invalid input","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"401":{"description":"Missing or invalid credentials","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."},"WWW-Authenticate":{"schema":{"type":"string"},"description":"Bearer authentication challenge."}}},"403":{"description":"Required scope not granted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"410":{"description":"Event cursor is no longer available","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"412":{"description":"Resource version does not match","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"413":{"description":"Request body is too large","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"415":{"description":"Wrong content type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"429":{"description":"Rate limit reached","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."},"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry."}}},"500":{"description":"Internal server error","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}}},"x-required-scopes":["integrations:read","resources:read","events:read"]}},"/api/v1/integrations/home-assistant/entities":{"get":{"operationId":"listHomeAssistantEntities","summary":"List Home Assistant compatible entities","tags":["Home Assistant"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"OAuth2":["integrations:read","resources:read","events:read"]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/HomeAssistantEntity"}},"pagination":{"$ref":"#/components/schemas/Pagination"}},"required":["data","pagination"],"additionalProperties":false}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"400":{"description":"Invalid input","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"401":{"description":"Missing or invalid credentials","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."},"WWW-Authenticate":{"schema":{"type":"string"},"description":"Bearer authentication challenge."}}},"403":{"description":"Required scope not granted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"410":{"description":"Event cursor is no longer available","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"412":{"description":"Resource version does not match","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"413":{"description":"Request body is too large","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"415":{"description":"Wrong content type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"429":{"description":"Rate limit reached","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."},"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry."}}},"500":{"description":"Internal server error","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}}},"x-required-scopes":["integrations:read","resources:read","events:read"],"parameters":[{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":25}},{"name":"offset","in":"query","schema":{"type":"integer","minimum":0,"maximum":1000000,"default":0}}]}},"/api/v1/integrations/home-assistant/snapshot":{"get":{"operationId":"getHomeAssistantSnapshot","summary":"Load entities and the event cursor together","tags":["Home Assistant"],"security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"OAuth2":["integrations:read","resources:read","events:read"]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HomeAssistantSnapshot"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"400":{"description":"Invalid input","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"401":{"description":"Missing or invalid credentials","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."},"WWW-Authenticate":{"schema":{"type":"string"},"description":"Bearer authentication challenge."}}},"403":{"description":"Required scope not granted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"410":{"description":"Event cursor is no longer available","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"412":{"description":"Resource version does not match","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"413":{"description":"Request body is too large","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"415":{"description":"Wrong content type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"429":{"description":"Rate limit reached","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."},"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry."}}},"500":{"description":"Internal server error","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}}},"x-required-scopes":["integrations:read","resources:read","events:read"]}},"/api/v1/integrations/home-assistant/commands":{"post":{"operationId":"sendHomeAssistantCommand","summary":"Change an AlexWeb resource state","tags":["Home Assistant"],"description":"Used by the AlexWeb API Home Assistant integration. Only switch or text resources accept commands; version is required. This changes stored AlexWeb data. It does not directly control physical devices.","security":[{"BearerAuth":[]},{"ApiKeyAuth":[]},{"OAuth2":["integrations:read","resources:read","events:read","resources:write"]}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HomeAssistantEntity"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."},"ETag":{"schema":{"type":"string","example":"\"1\""},"description":"Quoted resource version, suitable for If-Match on resource updates."}}},"400":{"description":"Invalid input","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"401":{"description":"Missing or invalid credentials","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."},"WWW-Authenticate":{"schema":{"type":"string"},"description":"Bearer authentication challenge."}}},"403":{"description":"Required scope not granted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"410":{"description":"Event cursor is no longer available","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"412":{"description":"Resource version does not match","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"413":{"description":"Request body is too large","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"415":{"description":"Wrong content type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}},"429":{"description":"Rate limit reached","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."},"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry."}}},"500":{"description":"Internal server error","headers":{"X-Request-Id":{"schema":{"type":"string"},"description":"Identifier for this request."},"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request allowance for this one-minute window. The legacy /health liveness route is exempt."},"RateLimit-Remaining":{"schema":{"type":"integer","minimum":0},"description":"Requests remaining in this window."},"RateLimit-Reset":{"schema":{"type":"integer","minimum":1},"description":"Seconds until the current window resets."}}}},"x-required-scopes":["integrations:read","resources:read","events:read","resources:write"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HomeAssistantCommand"}}}}}}},"components":{"securitySchemes":{"BearerAuth":{"type":"http","scheme":"bearer","description":"API key or OAuth access token in Authorization: Bearer. Keep credentials out of URLs."},"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-Key","description":"Alternative header for an API key. OAuth access tokens use Bearer."},"DeveloperSessionCookie":{"type":"apiKey","in":"cookie","name":"__Host-aw_developer_session","description":"Same-origin developer console session, lasting up to 12 hours. Hosted cookie is Secure, HttpOnly, and SameSite=Strict. Browser writes also need the exact Origin and X-CSRF-Token. Apps should use API keys or OAuth instead."},"OAuthClientBasic":{"type":"http","scheme":"basic","description":"Confidential application client id and secret. Public apps instead send client_id without HTTP authentication."},"OAuth2":{"type":"oauth2","flows":{"authorizationCode":{"authorizationUrl":"https://api.alexxweb.com/oauth/authorize","tokenUrl":"https://api.alexxweb.com/oauth/token","refreshUrl":"https://api.alexxweb.com/oauth/token","scopes":{"resources:read":"resources read","resources:write":"resources write","events:read":"events read","events:write":"events write","webhooks:manage":"webhooks manage","schedules:manage":"schedules manage","usage:read":"usage read","integrations:read":"integrations read"}},"clientCredentials":{"tokenUrl":"https://api.alexxweb.com/oauth/token","scopes":{"resources:read":"resources read","resources:write":"resources write","events:read":"events read","events:write":"events write","webhooks:manage":"webhooks manage","schedules:manage":"schedules manage","usage:read":"usage read","integrations:read":"integrations read"}}},"description":"Authorization code with S256 PKCE, or client credentials for confidential apps. OAuth applications cannot manage keys or applications."}},"schemas":{"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"requestId":{"type":"string"}},"required":["code","message","requestId"],"additionalProperties":false}},"required":["error"],"additionalProperties":false},"OAuthError":{"type":"object","properties":{"error":{"type":"string"},"error_description":{"type":"string"}},"required":["error"],"additionalProperties":false},"Pagination":{"type":"object","properties":{"limit":{"type":"integer"},"offset":{"type":"integer"},"total":{"type":"integer"},"hasMore":{"type":"boolean"}},"required":["limit","offset","total","hasMore"],"additionalProperties":false},"ApiInfo":{"type":"object","properties":{"name":{"type":"string","const":"AlexWeb API"},"version":{"type":"string","const":"1.3.0"}},"required":["name","version"],"additionalProperties":false},"Health":{"type":"object","properties":{"status":{"type":"string","const":"ok"}},"required":["status"],"additionalProperties":false},"Readiness":{"type":"object","properties":{"status":{"type":"string","enum":["ok","unavailable"]}},"required":["status"],"additionalProperties":false},"ServiceStatus":{"type":"object","properties":{"service":{"type":"string","const":"AlexWeb API"},"version":{"type":"string","const":"1.3.0"},"status":{"type":"string","enum":["operational","degraded"]},"uptime_seconds":{"type":"integer","minimum":0},"timestamp":{"type":"string","format":"date-time"},"checks":{"type":"object","properties":{"storage":{"type":"object","properties":{"status":{"type":"string","enum":["ok","unavailable"]},"latency_ms":{"type":"number","minimum":0}},"required":["status","latency_ms"],"additionalProperties":false}},"required":["storage"],"additionalProperties":false}},"required":["service","version","status","uptime_seconds","timestamp","checks"],"additionalProperties":false},"Echo":{"type":"object","properties":{"message":{"type":"string","minLength":1,"maxLength":1000,"example":"Hello from AlexWeb","x-default":"Hello from AlexWeb"}},"required":["message"],"additionalProperties":false},"Capabilities":{"type":"object","properties":{"name":{"type":"string","const":"AlexWeb API"},"version":{"type":"string","const":"1.3.0"},"authentication":{"type":"array","items":{"type":"string","enum":["api_key","oauth2","developer_session"]}},"features":{"type":"array","items":{"type":"string","enum":["resources","events","webhooks","schedules","usage","home_assistant","developer_accounts","developer_console","health_status","installations"]}},"scopes":{"type":"array","items":{"type":"string","enum":["keys:manage","apps:manage","resources:read","resources:write","events:read","events:write","webhooks:manage","schedules:manage","usage:read","integrations:read"]},"minItems":1,"maxItems":10,"uniqueItems":true},"limits":{"type":"object","properties":{"bodyBytes":{"type":"integer","const":16384},"pageSize":{"type":"integer","const":100},"requestsPerMinute":{"type":"integer","const":120},"anonymousPerMinute":{"type":"integer","const":60},"accessTokenSeconds":{"type":"integer","const":900},"refreshTokenSeconds":{"type":"integer","const":2592000},"authorizationCodeSeconds":{"type":"integer","const":300},"eventRetention":{"type":"integer","const":10000},"requestsPerDay":{"type":"integer","const":10000}},"required":["bodyBytes","pageSize","requestsPerMinute","anonymousPerMinute","accessTokenSeconds","refreshTokenSeconds","authorizationCodeSeconds","eventRetention","requestsPerDay"],"additionalProperties":false}},"required":["name","version","authentication","features","scopes","limits"],"additionalProperties":false},"Account":{"type":"object","properties":{"id":{"type":"string"},"username":{"type":["string","null"],"description":"Normalized developer username, or null for a legacy account."},"name":{"type":"string"}},"required":["id","username","name"],"additionalProperties":false},"Identity":{"type":"object","properties":{"account":{"$ref":"#/components/schemas/Account"},"credential":{"type":"object","properties":{"id":{"type":"string"},"kind":{"type":"string"},"scopes":{"type":"array","items":{"type":"string","enum":["keys:manage","apps:manage","resources:read","resources:write","events:read","events:write","webhooks:manage","schedules:manage","usage:read","integrations:read"]},"minItems":1,"maxItems":10,"uniqueItems":true}},"required":["id","kind","scopes"],"additionalProperties":false},"api":{"$ref":"#/components/schemas/ApiInfo"}},"required":["account","credential","api"],"additionalProperties":false},"DeveloperSession":{"type":"object","properties":{"account":{"$ref":"#/components/schemas/Account"},"csrfToken":{"type":"string","description":"Session-bound CSRF token for same-origin browser writes. The console handles this value automatically."},"expiresAt":{"type":"string","format":"date-time"},"limits":{"type":"object","properties":{"requestsPerMinute":{"type":"integer","const":120},"requestsPerDay":{"type":"integer","const":10000}},"required":["requestsPerMinute","requestsPerDay"],"additionalProperties":false}},"required":["account","csrfToken","expiresAt","limits"],"additionalProperties":false},"DeveloperSignup":{"type":"object","properties":{"username":{"type":"string","pattern":"^[A-Za-z0-9_-]{3,32}$","minLength":3,"maxLength":32,"description":"Case-insensitive; normalized to lowercase."},"password":{"type":"string","format":"password","minLength":12,"maxLength":128,"writeOnly":true,"description":"12–128 Unicode characters."},"displayName":{"type":"string","minLength":1,"maxLength":80}},"required":["username","password"],"additionalProperties":false},"DeveloperLogin":{"type":"object","properties":{"username":{"type":"string","pattern":"^[A-Za-z0-9_-]{3,32}$","minLength":3,"maxLength":32},"password":{"type":"string","format":"password","minLength":12,"maxLength":128,"writeOnly":true}},"required":["username","password"],"additionalProperties":false},"DeveloperPasswordChange":{"type":"object","properties":{"currentPassword":{"type":"string","format":"password","minLength":12,"maxLength":128,"writeOnly":true},"newPassword":{"type":"string","format":"password","minLength":12,"maxLength":128,"writeOnly":true}},"required":["currentPassword","newPassword"],"additionalProperties":false},"ApiKey":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"prefix":{"type":"string"},"scopes":{"type":"array","items":{"type":"string","enum":["keys:manage","apps:manage","resources:read","resources:write","events:read","events:write","webhooks:manage","schedules:manage","usage:read","integrations:read"]},"minItems":1,"maxItems":10,"uniqueItems":true},"createdAt":{"type":"string","format":"date-time"},"expiresAt":{"type":["string","null"],"format":"date-time"},"revokedAt":{"type":["string","null"],"format":"date-time"},"lastUsedAt":{"type":["string","null"],"format":"date-time"}},"required":["id","name","prefix","scopes","createdAt","expiresAt","revokedAt","lastUsedAt"],"additionalProperties":false},"ApiKeyCreate":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":120},"scopes":{"type":"array","items":{"type":"string","enum":["keys:manage","apps:manage","resources:read","resources:write","events:read","events:write","webhooks:manage","schedules:manage","usage:read","integrations:read"]},"minItems":1,"maxItems":10,"uniqueItems":true},"expiresInDays":{"type":"integer","minimum":1,"maximum":365,"default":90}},"required":["name"],"additionalProperties":false},"ApiKeyCreated":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"prefix":{"type":"string"},"scopes":{"type":"array","items":{"type":"string","enum":["keys:manage","apps:manage","resources:read","resources:write","events:read","events:write","webhooks:manage","schedules:manage","usage:read","integrations:read"]},"minItems":1,"maxItems":10,"uniqueItems":true},"createdAt":{"type":"string","format":"date-time"},"expiresAt":{"type":["string","null"],"format":"date-time"},"revokedAt":{"type":["string","null"],"format":"date-time"},"lastUsedAt":{"type":["string","null"],"format":"date-time"},"key":{"type":"string","description":"Shown once. Store this key privately."}},"required":["id","name","prefix","scopes","createdAt","expiresAt","revokedAt","lastUsedAt","key"],"additionalProperties":false},"Application":{"type":"object","properties":{"id":{"type":"string"},"clientId":{"type":"string"},"name":{"type":"string"},"type":{"type":"string","enum":["public","confidential"]},"redirectUris":{"type":"array","items":{"type":"string","format":"uri"}},"scopes":{"type":"array","items":{"type":"string","enum":["resources:read","resources:write","events:read","events:write","webhooks:manage","schedules:manage","usage:read","integrations:read"]},"minItems":1,"maxItems":8,"uniqueItems":true},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"disabledAt":{"type":["string","null"],"format":"date-time"}},"required":["id","clientId","name","type","redirectUris","scopes","createdAt","updatedAt","disabledAt"],"additionalProperties":false},"ApplicationCreate":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":120},"type":{"type":"string","enum":["public","confidential"],"default":"public"},"redirectUris":{"type":"array","items":{"type":"string","format":"uri"}},"scopes":{"type":"array","items":{"type":"string","enum":["resources:read","resources:write","events:read","events:write","webhooks:manage","schedules:manage","usage:read","integrations:read"]},"minItems":1,"maxItems":8,"uniqueItems":true}},"required":["name"],"additionalProperties":false},"ApplicationPatch":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":120},"redirectUris":{"type":"array","items":{"type":"string","format":"uri"}},"scopes":{"type":"array","items":{"type":"string","enum":["resources:read","resources:write","events:read","events:write","webhooks:manage","schedules:manage","usage:read","integrations:read"]},"minItems":1,"maxItems":8,"uniqueItems":true}},"required":[],"additionalProperties":false,"minProperties":1},"ApplicationCreated":{"type":"object","properties":{"id":{"type":"string"},"clientId":{"type":"string"},"name":{"type":"string"},"type":{"type":"string","enum":["public","confidential"]},"redirectUris":{"type":"array","items":{"type":"string","format":"uri"}},"scopes":{"type":"array","items":{"type":"string","enum":["resources:read","resources:write","events:read","events:write","webhooks:manage","schedules:manage","usage:read","integrations:read"]},"minItems":1,"maxItems":8,"uniqueItems":true},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"disabledAt":{"type":["string","null"],"format":"date-time"},"clientSecret":{"type":"string","description":"Confidential apps only. Shown once."}},"required":["id","clientId","name","type","redirectUris","scopes","createdAt","updatedAt","disabledAt"],"additionalProperties":false},"RotatedSecret":{"type":"object","additionalProperties":true,"description":"The new secret is shown once; the previous secret is invalidated."},"Resource":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string","minLength":1,"maxLength":120},"type":{"type":"string","enum":["sensor","binary_sensor","switch","text"]},"state":{"type":["number","string","boolean"]},"attributes":{"type":"object","additionalProperties":true,"description":"JSON object up to 4096 bytes; depth at most 8."},"tags":{"type":"array","items":{"type":"string","minLength":1,"maxLength":40},"maxItems":20,"uniqueItems":true},"version":{"type":"integer","minimum":1},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}},"required":["id","name","type","state","attributes","tags","version","createdAt","updatedAt"],"additionalProperties":false,"allOf":[{"if":{"properties":{"type":{"const":"sensor"}},"required":["type"]},"then":{"properties":{"state":{"oneOf":[{"type":"number"},{"type":"string","maxLength":2000}]}}}},{"if":{"properties":{"type":{"const":"binary_sensor"}},"required":["type"]},"then":{"properties":{"state":{"type":"boolean"}}}},{"if":{"properties":{"type":{"const":"switch"}},"required":["type"]},"then":{"properties":{"state":{"type":"boolean"}}}},{"if":{"properties":{"type":{"const":"text"}},"required":["type"]},"then":{"properties":{"state":{"type":"string","maxLength":2000}}}}]},"ResourceCreate":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":120},"type":{"type":"string","enum":["sensor","binary_sensor","switch","text"]},"state":{"type":["number","string","boolean"]},"attributes":{"type":"object","additionalProperties":true,"description":"JSON object up to 4096 bytes; depth at most 8."},"tags":{"type":"array","items":{"type":"string","minLength":1,"maxLength":40},"maxItems":20,"uniqueItems":true}},"required":["name","type","state"],"additionalProperties":false,"allOf":[{"if":{"properties":{"type":{"const":"sensor"}},"required":["type"]},"then":{"properties":{"state":{"oneOf":[{"type":"number"},{"type":"string","maxLength":2000}]}}}},{"if":{"properties":{"type":{"const":"binary_sensor"}},"required":["type"]},"then":{"properties":{"state":{"type":"boolean"}}}},{"if":{"properties":{"type":{"const":"switch"}},"required":["type"]},"then":{"properties":{"state":{"type":"boolean"}}}},{"if":{"properties":{"type":{"const":"text"}},"required":["type"]},"then":{"properties":{"state":{"type":"string","maxLength":2000}}}}]},"ResourcePatch":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":120},"state":{"type":["number","string","boolean"]},"attributes":{"type":"object","additionalProperties":true,"description":"JSON object up to 4096 bytes; depth at most 8."},"tags":{"type":"array","items":{"type":"string","minLength":1,"maxLength":40},"maxItems":20,"uniqueItems":true}},"required":[],"additionalProperties":false,"minProperties":1},"Installation":{"type":"object","properties":{"id":{"type":"string","example":"inst_00000000-0000-4000-8000-000000000001"},"name":{"type":"string","maxLength":120},"filename":{"type":"string","maxLength":200},"size":{"type":"integer","minimum":1,"maximum":10485760,"description":"Exact file size in bytes."},"sha256":{"type":"string","pattern":"^[a-f0-9]{64}$","description":"SHA-256 digest of the original uploaded bytes."},"createdAt":{"type":"string","format":"date-time"},"url":{"type":"string","format":"uri","description":"Public download URL. Anyone with this link can download the file while it remains active."},"status":{"type":"string","enum":["active","unavailable"],"description":"Unavailable links cannot be downloaded, including when the creating credential is no longer active."}},"required":["id","name","filename","size","sha256","createdAt","url","status"],"additionalProperties":false},"InstallationPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Installation"}},"pagination":{"$ref":"#/components/schemas/Pagination"},"storage":{"type":"object","properties":{"usedBytes":{"type":"integer","minimum":0},"maxBytes":{"type":"integer","const":104857600},"activeCount":{"type":"integer","minimum":0},"maxInstallations":{"type":"integer","const":20},"maxFileBytes":{"type":"integer","const":10485760}},"required":["usedBytes","maxBytes","activeCount","maxInstallations","maxFileBytes"],"additionalProperties":false},"permissions":{"type":"object","properties":{"read":{"type":"string","const":"resources:read"},"write":{"type":"string","const":"resources:write"}},"required":["read","write"],"additionalProperties":false}},"required":["data","pagination","storage","permissions"],"additionalProperties":false},"Event":{"type":"object","properties":{"id":{"type":"integer","minimum":1},"type":{"type":"string"},"data":{"type":"object","additionalProperties":true},"createdAt":{"type":"string","format":"date-time"}},"required":["id","type","data","createdAt"],"additionalProperties":false},"EventCreate":{"type":"object","properties":{"type":{"type":"string","pattern":"^custom\\.[A-Za-z0-9][A-Za-z0-9._-]{0,79}$","description":"Custom event names must begin with custom."},"data":{"type":"object","additionalProperties":true,"description":"JSON object up to 8192 bytes; depth at most 8."}},"required":["type","data"],"additionalProperties":false},"EventPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Event"}},"cursor":{"type":"integer"},"hasMore":{"type":"boolean"},"oldestCursor":{"type":"integer"}},"required":["data","cursor","hasMore","oldestCursor"],"additionalProperties":false},"Webhook":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"url":{"type":"string","format":"uri"},"events":{"type":"array","items":{"type":"string"}},"enabled":{"type":"boolean"},"version":{"type":"integer"},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}},"required":["id","name","url","events","enabled","version","createdAt","updatedAt"],"additionalProperties":false},"WebhookCreate":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":120},"url":{"type":"string","format":"uri","pattern":"^https://","maxLength":2048,"description":"Public HTTPS on port 443, with no credentials or fragment."},"events":{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":20,"uniqueItems":true,"description":"resource.created, resource.updated, resource.deleted, schedule.executed, an exact custom event, or custom.*."},"enabled":{"type":"boolean","default":true}},"required":["name","url","events"],"additionalProperties":false},"WebhookPatch":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":120},"url":{"type":"string","format":"uri","pattern":"^https://","maxLength":2048},"events":{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":20,"uniqueItems":true},"enabled":{"type":"boolean"}},"required":[],"additionalProperties":false,"minProperties":1},"WebhookCreated":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"url":{"type":"string","format":"uri"},"events":{"type":"array","items":{"type":"string"}},"enabled":{"type":"boolean"},"version":{"type":"integer"},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"secret":{"type":"string","description":"Signing secret, shown once."}},"required":["id","name","url","events","enabled","version","createdAt","updatedAt","secret"],"additionalProperties":false},"WebhookDelivery":{"type":"object","properties":{"id":{"type":"string"},"webhookId":{"type":"string"},"eventId":{"type":"integer"},"eventType":{"type":"string"},"status":{"type":"string","enum":["pending","delivered","failed"]},"attempts":{"type":"integer"},"nextAttemptAt":{"type":["string","null"],"format":"date-time"},"history":{"type":"array","items":{"type":"object","properties":{"at":{"type":"string","format":"date-time"},"status":{"type":"integer"},"code":{"type":"string"}},"required":["at"],"additionalProperties":false}},"version":{"type":"integer"},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"lastStatus":{"type":["integer","null"]},"lastError":{"type":["string","null"]},"deliveredAt":{"type":["string","null"],"format":"date-time"}},"required":["id","webhookId","eventId","eventType","status","attempts","nextAttemptAt","history","version","createdAt","updatedAt"],"additionalProperties":false},"ScheduleAction":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","const":"event.publish"},"eventType":{"type":"string","pattern":"^custom\\.[A-Za-z0-9][A-Za-z0-9._-]{0,79}$"},"data":{"type":"object","additionalProperties":true}},"required":["type","eventType","data"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"resource.set_state"},"resourceId":{"type":"string"},"state":{"type":["number","string","boolean"]}},"required":["type","resourceId","state"],"additionalProperties":false}]},"ScheduleCreate":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":120},"runAt":{"type":"string","format":"date-time"},"intervalSeconds":{"type":"integer","minimum":60,"maximum":31536000},"enabled":{"type":"boolean"},"action":{"$ref":"#/components/schemas/ScheduleAction"}},"required":["name","action"],"additionalProperties":false,"oneOf":[{"required":["runAt"],"not":{"required":["intervalSeconds"]}},{"required":["intervalSeconds"],"not":{"required":["runAt"]}}]},"SchedulePatch":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":120},"runAt":{"type":"string","format":"date-time"},"intervalSeconds":{"type":"integer","minimum":60,"maximum":31536000},"enabled":{"type":"boolean"},"action":{"$ref":"#/components/schemas/ScheduleAction"}},"required":[],"additionalProperties":false,"minProperties":1},"Schedule":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"action":{"$ref":"#/components/schemas/ScheduleAction"},"enabled":{"type":"boolean"},"runAt":{"type":"string","format":"date-time"},"intervalSeconds":{"type":"integer"},"nextRunAt":{"type":["string","null"],"format":"date-time"},"lastRunAt":{"type":"string","format":"date-time"},"history":{"type":"array","items":{"type":"object","properties":{"at":{"type":"string","format":"date-time"},"status":{"type":"string","enum":["succeeded","failed"]},"code":{"type":"string"},"eventId":{"type":"integer"}},"required":["at","status"],"additionalProperties":false}},"version":{"type":"integer"},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}},"required":["id","name","action","enabled","nextRunAt","history","version","createdAt","updatedAt"],"additionalProperties":false},"ResponseTime":{"type":"object","properties":{"average":{"type":["number","null"],"minimum":0},"p95":{"type":["number","null"],"minimum":0},"max":{"type":["number","null"],"minimum":0},"samples":{"type":"integer","minimum":0},"p95IsEstimate":{"type":"boolean","const":true}},"required":["average","p95","max","samples","p95IsEstimate"],"additionalProperties":false},"Usage":{"type":"object","properties":{"days":{"type":"integer"},"since":{"type":"string","format":"date"},"totalRequests":{"type":"integer"},"clientErrors":{"type":"integer","minimum":0},"serverErrors":{"type":"integer","minimum":0},"errorRatePercent":{"type":"number","minimum":0,"maximum":100},"responseTimeMs":{"$ref":"#/components/schemas/ResponseTime"},"latencyHistogram":{"type":"object","properties":{"upperBoundsMs":{"type":"array","items":{"type":["integer","null"],"minimum":0}},"counts":{"type":"array","items":{"type":"integer","minimum":0}}},"required":["upperBoundsMs","counts"],"additionalProperties":false},"data":{"type":"array","items":{"type":"object","properties":{"day":{"type":"string","format":"date"},"credentialId":{"type":"string"},"method":{"type":"string"},"route":{"type":"string"},"status":{"type":"integer"},"total":{"type":"integer"},"durationTotalMs":{"type":"number","minimum":0},"maxDurationMs":{"type":["number","null"],"minimum":0},"durationSamples":{"type":"integer","minimum":0},"responseTimeMs":{"$ref":"#/components/schemas/ResponseTime"}},"required":["day","credentialId","method","route","status","total","durationTotalMs","maxDurationMs","durationSamples","responseTimeMs"],"additionalProperties":false}},"limits":{"type":"object","properties":{"requestsPerMinute":{"type":"integer"},"maxTrackedDurationMs":{"type":"integer","const":86400000}},"required":["requestsPerMinute","maxTrackedDurationMs"],"additionalProperties":false}},"required":["days","since","totalRequests","clientErrors","serverErrors","errorRatePercent","responseTimeMs","latencyHistogram","data","limits"],"additionalProperties":false},"AuditEntry":{"type":"object","properties":{"id":{"type":"integer","minimum":1},"actorId":{"type":"string"},"action":{"type":"string"},"targetId":{"type":["string","null"]},"requestId":{"type":"string"},"createdAt":{"type":"string","format":"date-time"}},"required":["id","actorId","action","targetId","requestId","createdAt"],"additionalProperties":false},"HomeAssistantManifest":{"type":"object","properties":{"domain":{"type":"string","const":"alexweb_api"},"name":{"type":"string"},"version":{"type":"string"},"integrationAvailable":{"type":"boolean","const":true},"apiSupport":{"type":"boolean","const":true},"resourceTypes":{"type":"array","items":{"type":"string","enum":["sensor","binary_sensor","switch","text"]}},"authentication":{"type":"array","items":{"type":"string"}},"readScopes":{"type":"array","items":{"type":"string","enum":["keys:manage","apps:manage","resources:read","resources:write","events:read","events:write","webhooks:manage","schedules:manage","usage:read","integrations:read"]},"minItems":1,"maxItems":10,"uniqueItems":true},"commandScopes":{"type":"array","items":{"type":"string","enum":["keys:manage","apps:manage","resources:read","resources:write","events:read","events:write","webhooks:manage","schedules:manage","usage:read","integrations:read"]},"minItems":1,"maxItems":10,"uniqueItems":true},"recommendedPollSeconds":{"type":"integer","const":30},"snapshotUrl":{"type":"string"},"eventsUrl":{"type":"string"},"streamUrl":{"type":"string"}},"required":["domain","name","version","integrationAvailable","apiSupport","resourceTypes","authentication","readScopes","commandScopes","recommendedPollSeconds","snapshotUrl","eventsUrl","streamUrl"],"additionalProperties":false},"HomeAssistantInfo":{"type":"object","properties":{"domain":{"type":"string","const":"alexweb_api"},"name":{"type":"string"},"integrationAvailable":{"type":"boolean","const":true},"apiSupport":{"type":"boolean","const":true},"recommendedPollSeconds":{"type":"integer"},"resourceTypes":{"type":"array","items":{"type":"string","enum":["sensor","binary_sensor","switch","text"]}},"commands":{"type":"array","items":{"type":"string","enum":["set_state"]}},"eventCursor":{"type":"integer"}},"required":["domain","name","integrationAvailable","apiSupport","recommendedPollSeconds","resourceTypes","commands","eventCursor"],"additionalProperties":false},"HomeAssistantEntity":{"type":"object","properties":{"resourceId":{"type":"string"},"uniqueId":{"type":"string"},"entityId":{"type":"string"},"domain":{"type":"string","enum":["sensor","binary_sensor","switch","text"]},"name":{"type":"string"},"state":{"type":["number","string","boolean"]},"attributes":{"type":"object","additionalProperties":true},"tags":{"type":"array","items":{"type":"string"}},"version":{"type":"integer"},"available":{"type":"boolean","const":true},"writable":{"type":"boolean"}},"required":["resourceId","uniqueId","entityId","domain","name","state","attributes","tags","version","available","writable"],"additionalProperties":false},"HomeAssistantSnapshot":{"type":"object","properties":{"entities":{"type":"array","items":{"$ref":"#/components/schemas/HomeAssistantEntity"}},"cursor":{"type":"integer"},"createdAt":{"type":"string","format":"date-time"}},"required":["entities","cursor","createdAt"],"additionalProperties":false},"HomeAssistantCommand":{"type":"object","properties":{"resourceId":{"type":"string"},"command":{"type":"string","const":"set_state"},"state":{"type":["string","boolean"]},"version":{"type":"integer","minimum":1}},"required":["resourceId","command","state","version"],"additionalProperties":false},"TokenRequest":{"type":"object","properties":{"grant_type":{"type":"string","enum":["authorization_code","refresh_token","client_credentials"]},"client_id":{"type":"string"},"code":{"type":"string"},"redirect_uri":{"type":"string","format":"uri"},"code_verifier":{"type":"string","minLength":43,"maxLength":128},"refresh_token":{"type":"string"},"scope":{"type":"string","description":"Space-separated scopes."}},"required":["grant_type"],"additionalProperties":false},"TokenResponse":{"type":"object","properties":{"access_token":{"type":"string"},"token_type":{"type":"string","const":"Bearer"},"expires_in":{"type":"integer","minimum":1,"maximum":900},"scope":{"type":"string"},"refresh_token":{"type":"string"}},"required":["access_token","token_type","expires_in","scope"],"additionalProperties":false},"RevokeRequest":{"type":"object","properties":{"token":{"type":"string"},"token_type_hint":{"type":"string","enum":["access_token","refresh_token"]},"client_id":{"type":"string"}},"required":["token"],"additionalProperties":false},"OAuthConsent":{"type":"object","properties":{"csrf":{"type":"string"},"api_key":{"type":"string"},"decision":{"type":"string","enum":["allow","deny"]}},"required":["csrf","decision"],"additionalProperties":false},"OAuthDiscovery":{"type":"object","properties":{"issuer":{"type":"string","format":"uri"},"authorization_endpoint":{"type":"string","format":"uri"},"token_endpoint":{"type":"string","format":"uri"},"revocation_endpoint":{"type":"string","format":"uri"},"response_types_supported":{"type":"array","items":{"type":"string","enum":["code"]}},"grant_types_supported":{"type":"array","items":{"type":"string","enum":["authorization_code","refresh_token","client_credentials"]}},"code_challenge_methods_supported":{"type":"array","items":{"type":"string","enum":["S256"]}},"token_endpoint_auth_methods_supported":{"type":"array","items":{"type":"string","enum":["client_secret_basic","none"]}},"revocation_endpoint_auth_methods_supported":{"type":"array","items":{"type":"string","enum":["client_secret_basic","none"]}},"scopes_supported":{"type":"array","items":{"type":"string","enum":["resources:read","resources:write","events:read","events:write","webhooks:manage","schedules:manage","usage:read","integrations:read"]},"minItems":1,"maxItems":8,"uniqueItems":true},"authorization_response_iss_parameter_supported":{"type":"boolean","const":true}},"required":["issuer","authorization_endpoint","token_endpoint","revocation_endpoint","response_types_supported","grant_types_supported","code_challenge_methods_supported","token_endpoint_auth_methods_supported","revocation_endpoint_auth_methods_supported","scopes_supported","authorization_response_iss_parameter_supported"],"additionalProperties":false}}}}