{"openapi":"3.1.0","info":{"title":"Oximy Public API","version":"2026-06-29","description":"Workspace-scoped REST API over Oximy's developer platform substrate."},"servers":[{"url":"https://api.oximy.com/v1"}],"security":[{"bearerAuth":[]}],"x-oximy":{"api_version":"2026-06-29","supported_versions":["2026-06-29"],"resources":[{"name":"users","path":"/v1/users","status":"available","scopes":["people:read"],"filters":["tool","department","period","sort","limit","cursor"],"name_scope":"people:names:read"},{"name":"user","path":"/v1/users/{id}","status":"available","scopes":["people:read"],"filters":["period"],"name_scope":"people:names:read"},{"name":"tools","path":"/v1/tools","status":"available","scopes":["tools:read"],"filters":["status","period","sort","limit","cursor"]},{"name":"spend","path":"/v1/spend","status":"available","scopes":["spend:read"],"filters":["tool","department","period","group_by","metric","sort","limit","cursor"]},{"name":"departments","path":"/v1/departments","status":"available","scopes":["people:read","spend:read"],"filters":["period","sort","limit","cursor"]},{"name":"department","path":"/v1/departments/{id}","status":"available","scopes":["people:read","spend:read"],"filters":["period"]},{"name":"seats","path":"/v1/seats","status":"available","scopes":["spend:read","tools:read"],"filters":["tool","utilization","period","sort","limit","cursor"],"name_scope":"people:names:read"},{"name":"recommendations","path":"/v1/recommendations","status":"available","scopes":["spend:read"],"filters":["impact_kind","confidence","lens","objective","period","sort","limit","cursor"]},{"name":"report_summary","path":"/v1/report-summary","status":"available","scopes":["spend:read"],"filters":["period"]},{"name":"events","path":"/v1/events","status":"available","scopes":["events:read"],"filters":["type","limit","cursor"]},{"name":"webhook_endpoints","path":"/v1/webhook-endpoints","status":"available","scopes":["webhooks:read","webhooks:write"],"filters":["limit","cursor"],"idempotency_required":"writes"},{"name":"tool_approvals","path":"/v1/tool-approvals","status":"available","scopes":["governance:write"],"filters":[],"idempotency_required":true}],"shared_filters":["tool","department","status","model","period","sort","limit","cursor","group_by","metric","impact_kind","confidence","lens","objective","type"]},"paths":{"/meta":{"get":{"operationId":"getMeta","summary":null,"parameters":[{"name":"Oximy-Version","in":"header","required":false,"schema":{"type":"string","enum":["2026-06-29"]},"description":"Optional dated API version. If sent, it must match the calling key's pinned version."}],"responses":{"200":{"description":"Machine-readable API catalog.","headers":{"Oximy-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Maximum requests allowed in the current window."},"Oximy-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests remaining in the current window."},"Oximy-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Unix timestamp in seconds when the current window resets."},"ETag":{"schema":{"type":"string"},"description":"Weak validator for conditional GET polling with If-None-Match."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MetaResponse"}}}},"304":{"description":"Not modified. Conditional GET responses do not consume rate-limit quota.","headers":{"Oximy-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Maximum requests allowed in the current window."},"Oximy-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests remaining in the current window."},"Oximy-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Unix timestamp in seconds when the current window resets."},"ETag":{"schema":{"type":"string"},"description":"Weak validator for conditional GET polling with If-None-Match."}}},"400":{"description":"Invalid parameters.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["type","code","message","request_id","doc_url"],"properties":{"type":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"},"request_id":{"type":"string"},"doc_url":{"type":"string"},"details":{"type":"array","items":{"type":"object","required":["message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}}}},"401":{"description":"Missing or invalid API key.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["type","code","message","request_id","doc_url"],"properties":{"type":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"},"request_id":{"type":"string"},"doc_url":{"type":"string"},"details":{"type":"array","items":{"type":"object","required":["message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}}}},"403":{"description":"The API key does not have the required scope.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["type","code","message","request_id","doc_url"],"properties":{"type":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"},"request_id":{"type":"string"},"doc_url":{"type":"string"},"details":{"type":"array","items":{"type":"object","required":["message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}}}},"404":{"description":"The requested resource was not found in the calling key's workspace scope.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["type","code","message","request_id","doc_url"],"properties":{"type":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"},"request_id":{"type":"string"},"doc_url":{"type":"string"},"details":{"type":"array","items":{"type":"object","required":["message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}}}},"409":{"description":"Conflict or idempotency replay conflict.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["type","code","message","request_id","doc_url"],"properties":{"type":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"},"request_id":{"type":"string"},"doc_url":{"type":"string"},"details":{"type":"array","items":{"type":"object","required":["message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}}}},"429":{"description":"Rate limit exceeded.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["type","code","message","request_id","doc_url"],"properties":{"type":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"},"request_id":{"type":"string"},"doc_url":{"type":"string"},"details":{"type":"array","items":{"type":"object","required":["message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["type","code","message","request_id","doc_url"],"properties":{"type":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"},"request_id":{"type":"string"},"doc_url":{"type":"string"},"details":{"type":"array","items":{"type":"object","required":["message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}}}}}}},"/usage":{"get":{"operationId":"getUsage","summary":null,"parameters":[{"name":"Oximy-Version","in":"header","required":false,"schema":{"type":"string","enum":["2026-06-29"]},"description":"Optional dated API version. If sent, it must match the calling key's pinned version."}],"responses":{"200":{"description":"Calling key usage.","headers":{"Oximy-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Maximum requests allowed in the current window."},"Oximy-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests remaining in the current window."},"Oximy-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Unix timestamp in seconds when the current window resets."},"ETag":{"schema":{"type":"string"},"description":"Weak validator for conditional GET polling with If-None-Match."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UsageResponse"}}}},"304":{"description":"Not modified. Conditional GET responses do not consume rate-limit quota.","headers":{"Oximy-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Maximum requests allowed in the current window."},"Oximy-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests remaining in the current window."},"Oximy-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Unix timestamp in seconds when the current window resets."},"ETag":{"schema":{"type":"string"},"description":"Weak validator for conditional GET polling with If-None-Match."}}},"400":{"description":"Invalid parameters.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["type","code","message","request_id","doc_url"],"properties":{"type":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"},"request_id":{"type":"string"},"doc_url":{"type":"string"},"details":{"type":"array","items":{"type":"object","required":["message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}}}},"401":{"description":"Missing or invalid API key.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["type","code","message","request_id","doc_url"],"properties":{"type":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"},"request_id":{"type":"string"},"doc_url":{"type":"string"},"details":{"type":"array","items":{"type":"object","required":["message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}}}},"403":{"description":"The API key does not have the required scope.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["type","code","message","request_id","doc_url"],"properties":{"type":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"},"request_id":{"type":"string"},"doc_url":{"type":"string"},"details":{"type":"array","items":{"type":"object","required":["message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}}}},"404":{"description":"The requested resource was not found in the calling key's workspace scope.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["type","code","message","request_id","doc_url"],"properties":{"type":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"},"request_id":{"type":"string"},"doc_url":{"type":"string"},"details":{"type":"array","items":{"type":"object","required":["message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}}}},"409":{"description":"Conflict or idempotency replay conflict.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["type","code","message","request_id","doc_url"],"properties":{"type":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"},"request_id":{"type":"string"},"doc_url":{"type":"string"},"details":{"type":"array","items":{"type":"object","required":["message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}}}},"429":{"description":"Rate limit exceeded.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["type","code","message","request_id","doc_url"],"properties":{"type":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"},"request_id":{"type":"string"},"doc_url":{"type":"string"},"details":{"type":"array","items":{"type":"object","required":["message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["type","code","message","request_id","doc_url"],"properties":{"type":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"},"request_id":{"type":"string"},"doc_url":{"type":"string"},"details":{"type":"array","items":{"type":"object","required":["message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}}}}}}},"/openapi.json":{"get":{"operationId":"getOpenApiSpec","summary":null,"parameters":[{"name":"Oximy-Version","in":"header","required":false,"schema":{"type":"string","enum":["2026-06-29"]},"description":"Optional dated API version. If sent, it must match the calling key's pinned version."}],"responses":{"200":{"description":"OpenAPI 3.1 document.","headers":{"Oximy-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Maximum requests allowed in the current window."},"Oximy-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests remaining in the current window."},"Oximy-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Unix timestamp in seconds when the current window resets."},"ETag":{"schema":{"type":"string"},"description":"Weak validator for conditional GET polling with If-None-Match."}},"content":{"application/json":{"schema":{"type":"object"}}}},"304":{"description":"Not modified. Conditional GET responses do not consume rate-limit quota.","headers":{"Oximy-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Maximum requests allowed in the current window."},"Oximy-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests remaining in the current window."},"Oximy-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Unix timestamp in seconds when the current window resets."},"ETag":{"schema":{"type":"string"},"description":"Weak validator for conditional GET polling with If-None-Match."}}},"400":{"description":"Invalid parameters.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["type","code","message","request_id","doc_url"],"properties":{"type":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"},"request_id":{"type":"string"},"doc_url":{"type":"string"},"details":{"type":"array","items":{"type":"object","required":["message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}}}},"401":{"description":"Missing or invalid API key.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["type","code","message","request_id","doc_url"],"properties":{"type":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"},"request_id":{"type":"string"},"doc_url":{"type":"string"},"details":{"type":"array","items":{"type":"object","required":["message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}}}},"403":{"description":"The API key does not have the required scope.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["type","code","message","request_id","doc_url"],"properties":{"type":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"},"request_id":{"type":"string"},"doc_url":{"type":"string"},"details":{"type":"array","items":{"type":"object","required":["message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}}}},"404":{"description":"The requested resource was not found in the calling key's workspace scope.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["type","code","message","request_id","doc_url"],"properties":{"type":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"},"request_id":{"type":"string"},"doc_url":{"type":"string"},"details":{"type":"array","items":{"type":"object","required":["message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}}}},"409":{"description":"Conflict or idempotency replay conflict.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["type","code","message","request_id","doc_url"],"properties":{"type":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"},"request_id":{"type":"string"},"doc_url":{"type":"string"},"details":{"type":"array","items":{"type":"object","required":["message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}}}},"429":{"description":"Rate limit exceeded.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["type","code","message","request_id","doc_url"],"properties":{"type":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"},"request_id":{"type":"string"},"doc_url":{"type":"string"},"details":{"type":"array","items":{"type":"object","required":["message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["type","code","message","request_id","doc_url"],"properties":{"type":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"},"request_id":{"type":"string"},"doc_url":{"type":"string"},"details":{"type":"array","items":{"type":"object","required":["message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}}}}}}},"/users":{"get":{"operationId":"listUsers","summary":null,"parameters":[{"name":"Oximy-Version","in":"header","required":false,"schema":{"type":"string","enum":["2026-06-29"]},"description":"Optional dated API version. If sent, it must match the calling key's pinned version."},{"name":"tool","in":"query","required":false,"schema":{"type":"string"},"description":"Filter to users who used a matching tool id or name."},{"name":"department","in":"query","required":false,"schema":{"type":"string"},"description":"Filter by department id or name."},{"name":"period","in":"query","required":false,"schema":{"type":"string","enum":["last_30d","all_time"],"default":"last_30d"},"description":"Usage window."},{"name":"status","in":"query","required":false,"schema":{"type":"string","enum":["power_user","active","light","dormant","inactive"]},"description":"Usage status."},{"name":"sort","in":"query","required":false,"schema":{"type":"string","enum":["-usage","usage","-sessions","sessions","-spend","spend","name","-name"],"default":"-usage"},"description":"Sort order."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":100,"default":50},"description":"Maximum rows to return."},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"},"description":"Cursor from the prior response."}],"responses":{"200":{"description":"Users list. Names and emails are only present with people:names:read.","headers":{"Oximy-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Maximum requests allowed in the current window."},"Oximy-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests remaining in the current window."},"Oximy-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Unix timestamp in seconds when the current window resets."},"ETag":{"schema":{"type":"string"},"description":"Weak validator for conditional GET polling with If-None-Match."}},"content":{"application/json":{"schema":{"type":"object","required":["object","request_id","as_of","data","has_more","next_cursor"],"properties":{"object":{"type":"string","enum":["list"]},"request_id":{"type":"string"},"as_of":{"type":"string","format":"date-time"},"data":{"type":"array","items":{"$ref":"#/components/schemas/User"}},"has_more":{"type":"boolean"},"next_cursor":{"type":"string","nullable":true}}}}}},"304":{"description":"Not modified. Conditional GET responses do not consume rate-limit quota.","headers":{"Oximy-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Maximum requests allowed in the current window."},"Oximy-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests remaining in the current window."},"Oximy-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Unix timestamp in seconds when the current window resets."},"ETag":{"schema":{"type":"string"},"description":"Weak validator for conditional GET polling with If-None-Match."}}},"400":{"description":"Invalid parameters.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["type","code","message","request_id","doc_url"],"properties":{"type":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"},"request_id":{"type":"string"},"doc_url":{"type":"string"},"details":{"type":"array","items":{"type":"object","required":["message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}}}},"401":{"description":"Missing or invalid API key.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["type","code","message","request_id","doc_url"],"properties":{"type":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"},"request_id":{"type":"string"},"doc_url":{"type":"string"},"details":{"type":"array","items":{"type":"object","required":["message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}}}},"403":{"description":"The API key does not have the required scope.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["type","code","message","request_id","doc_url"],"properties":{"type":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"},"request_id":{"type":"string"},"doc_url":{"type":"string"},"details":{"type":"array","items":{"type":"object","required":["message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}}}},"404":{"description":"The requested resource was not found in the calling key's workspace scope.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["type","code","message","request_id","doc_url"],"properties":{"type":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"},"request_id":{"type":"string"},"doc_url":{"type":"string"},"details":{"type":"array","items":{"type":"object","required":["message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}}}},"409":{"description":"Conflict or idempotency replay conflict.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["type","code","message","request_id","doc_url"],"properties":{"type":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"},"request_id":{"type":"string"},"doc_url":{"type":"string"},"details":{"type":"array","items":{"type":"object","required":["message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}}}},"429":{"description":"Rate limit exceeded.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["type","code","message","request_id","doc_url"],"properties":{"type":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"},"request_id":{"type":"string"},"doc_url":{"type":"string"},"details":{"type":"array","items":{"type":"object","required":["message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["type","code","message","request_id","doc_url"],"properties":{"type":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"},"request_id":{"type":"string"},"doc_url":{"type":"string"},"details":{"type":"array","items":{"type":"object","required":["message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}}}}}}},"/users/{id}":{"get":{"operationId":"getUser","summary":null,"parameters":[{"name":"Oximy-Version","in":"header","required":false,"schema":{"type":"string","enum":["2026-06-29"]},"description":"Optional dated API version. If sent, it must match the calling key's pinned version."},{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Public user id from /users."},{"name":"period","in":"query","required":false,"schema":{"type":"string","enum":["last_30d","all_time"],"default":"last_30d"},"description":"Usage window."}],"responses":{"200":{"description":"User detail. Names and emails are only present with people:names:read.","headers":{"Oximy-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Maximum requests allowed in the current window."},"Oximy-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests remaining in the current window."},"Oximy-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Unix timestamp in seconds when the current window resets."},"ETag":{"schema":{"type":"string"},"description":"Weak validator for conditional GET polling with If-None-Match."}},"content":{"application/json":{"schema":{"type":"object","required":["object","request_id","as_of","data"],"properties":{"object":{"type":"string","enum":["user"]},"request_id":{"type":"string"},"as_of":{"type":"string","format":"date-time"},"data":{"$ref":"#/components/schemas/User"}}}}}},"304":{"description":"Not modified. Conditional GET responses do not consume rate-limit quota.","headers":{"Oximy-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Maximum requests allowed in the current window."},"Oximy-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests remaining in the current window."},"Oximy-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Unix timestamp in seconds when the current window resets."},"ETag":{"schema":{"type":"string"},"description":"Weak validator for conditional GET polling with If-None-Match."}}},"400":{"description":"Invalid parameters.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["type","code","message","request_id","doc_url"],"properties":{"type":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"},"request_id":{"type":"string"},"doc_url":{"type":"string"},"details":{"type":"array","items":{"type":"object","required":["message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}}}},"401":{"description":"Missing or invalid API key.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["type","code","message","request_id","doc_url"],"properties":{"type":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"},"request_id":{"type":"string"},"doc_url":{"type":"string"},"details":{"type":"array","items":{"type":"object","required":["message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}}}},"403":{"description":"The API key does not have the required scope.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["type","code","message","request_id","doc_url"],"properties":{"type":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"},"request_id":{"type":"string"},"doc_url":{"type":"string"},"details":{"type":"array","items":{"type":"object","required":["message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}}}},"404":{"description":"The requested resource was not found in the calling key's workspace scope.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["type","code","message","request_id","doc_url"],"properties":{"type":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"},"request_id":{"type":"string"},"doc_url":{"type":"string"},"details":{"type":"array","items":{"type":"object","required":["message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}}}},"409":{"description":"Conflict or idempotency replay conflict.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["type","code","message","request_id","doc_url"],"properties":{"type":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"},"request_id":{"type":"string"},"doc_url":{"type":"string"},"details":{"type":"array","items":{"type":"object","required":["message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}}}},"429":{"description":"Rate limit exceeded.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["type","code","message","request_id","doc_url"],"properties":{"type":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"},"request_id":{"type":"string"},"doc_url":{"type":"string"},"details":{"type":"array","items":{"type":"object","required":["message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["type","code","message","request_id","doc_url"],"properties":{"type":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"},"request_id":{"type":"string"},"doc_url":{"type":"string"},"details":{"type":"array","items":{"type":"object","required":["message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}}}}}}},"/tools":{"get":{"operationId":"listTools","summary":null,"parameters":[{"name":"Oximy-Version","in":"header","required":false,"schema":{"type":"string","enum":["2026-06-29"]},"description":"Optional dated API version. If sent, it must match the calling key's pinned version."},{"name":"period","in":"query","required":false,"schema":{"type":"string","enum":["last_7d","last_30d","last_90d"],"default":"last_30d"},"description":"Usage window."},{"name":"status","in":"query","required":false,"schema":{"type":"string","enum":["shadow","approved"]},"description":"Governance status."},{"name":"sort","in":"query","required":false,"schema":{"type":"string","enum":["-users","users","-sessions","sessions"]},"description":"Sort order."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":100,"default":50},"description":"Maximum rows to return."},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"},"description":"Cursor from the prior response."}],"responses":{"200":{"description":"Tools list.","headers":{"Oximy-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Maximum requests allowed in the current window."},"Oximy-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests remaining in the current window."},"Oximy-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Unix timestamp in seconds when the current window resets."},"ETag":{"schema":{"type":"string"},"description":"Weak validator for conditional GET polling with If-None-Match."}},"content":{"application/json":{"schema":{"type":"object","required":["object","request_id","as_of","data","has_more","next_cursor"],"properties":{"object":{"type":"string","enum":["list"]},"request_id":{"type":"string"},"as_of":{"type":"string","format":"date-time"},"data":{"type":"array","items":{"$ref":"#/components/schemas/Tool"}},"has_more":{"type":"boolean"},"next_cursor":{"type":"string","nullable":true}}}}}},"304":{"description":"Not modified. Conditional GET responses do not consume rate-limit quota.","headers":{"Oximy-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Maximum requests allowed in the current window."},"Oximy-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests remaining in the current window."},"Oximy-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Unix timestamp in seconds when the current window resets."},"ETag":{"schema":{"type":"string"},"description":"Weak validator for conditional GET polling with If-None-Match."}}},"400":{"description":"Invalid parameters.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["type","code","message","request_id","doc_url"],"properties":{"type":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"},"request_id":{"type":"string"},"doc_url":{"type":"string"},"details":{"type":"array","items":{"type":"object","required":["message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}}}},"401":{"description":"Missing or invalid API key.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["type","code","message","request_id","doc_url"],"properties":{"type":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"},"request_id":{"type":"string"},"doc_url":{"type":"string"},"details":{"type":"array","items":{"type":"object","required":["message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}}}},"403":{"description":"The API key does not have the required scope.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["type","code","message","request_id","doc_url"],"properties":{"type":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"},"request_id":{"type":"string"},"doc_url":{"type":"string"},"details":{"type":"array","items":{"type":"object","required":["message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}}}},"404":{"description":"The requested resource was not found in the calling key's workspace scope.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["type","code","message","request_id","doc_url"],"properties":{"type":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"},"request_id":{"type":"string"},"doc_url":{"type":"string"},"details":{"type":"array","items":{"type":"object","required":["message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}}}},"409":{"description":"Conflict or idempotency replay conflict.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["type","code","message","request_id","doc_url"],"properties":{"type":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"},"request_id":{"type":"string"},"doc_url":{"type":"string"},"details":{"type":"array","items":{"type":"object","required":["message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}}}},"429":{"description":"Rate limit exceeded.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["type","code","message","request_id","doc_url"],"properties":{"type":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"},"request_id":{"type":"string"},"doc_url":{"type":"string"},"details":{"type":"array","items":{"type":"object","required":["message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["type","code","message","request_id","doc_url"],"properties":{"type":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"},"request_id":{"type":"string"},"doc_url":{"type":"string"},"details":{"type":"array","items":{"type":"object","required":["message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}}}}}}},"/spend":{"get":{"operationId":"listSpend","summary":null,"parameters":[{"name":"Oximy-Version","in":"header","required":false,"schema":{"type":"string","enum":["2026-06-29"]},"description":"Optional dated API version. If sent, it must match the calling key's pinned version."},{"name":"group_by","in":"query","required":false,"schema":{"type":"string","enum":["tool","department"],"default":"tool"},"description":"Aggregation dimension."},{"name":"tool","in":"query","required":false,"schema":{"type":"string"},"description":"Filter by tool id or name. Only valid with group_by=tool."},{"name":"department","in":"query","required":false,"schema":{"type":"string"},"description":"Filter by department id or name. Only valid with group_by=department."},{"name":"metric","in":"query","required":false,"schema":{"type":"string","enum":["cost","cost_per_person","users"],"default":"cost"},"description":"Metric to rank or read."},{"name":"period","in":"query","required":false,"schema":{"type":"string","enum":["last_7d","last_30d","last_90d"],"default":"last_30d"},"description":"Spend window."},{"name":"sort","in":"query","required":false,"schema":{"type":"string","enum":["-cost","cost","-cost_per_person","cost_per_person","-users","users","name","-name"],"default":"-cost"},"description":"Sort order."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":100,"default":50},"description":"Maximum rows to return."},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"},"description":"Cursor from the prior response."}],"responses":{"200":{"description":"Spend list.","headers":{"Oximy-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Maximum requests allowed in the current window."},"Oximy-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests remaining in the current window."},"Oximy-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Unix timestamp in seconds when the current window resets."},"ETag":{"schema":{"type":"string"},"description":"Weak validator for conditional GET polling with If-None-Match."}},"content":{"application/json":{"schema":{"type":"object","required":["object","request_id","as_of","data","has_more","next_cursor"],"properties":{"object":{"type":"string","enum":["list"]},"request_id":{"type":"string"},"as_of":{"type":"string","format":"date-time"},"data":{"type":"array","items":{"$ref":"#/components/schemas/Spend"}},"has_more":{"type":"boolean"},"next_cursor":{"type":"string","nullable":true}}}}}},"304":{"description":"Not modified. Conditional GET responses do not consume rate-limit quota.","headers":{"Oximy-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Maximum requests allowed in the current window."},"Oximy-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests remaining in the current window."},"Oximy-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Unix timestamp in seconds when the current window resets."},"ETag":{"schema":{"type":"string"},"description":"Weak validator for conditional GET polling with If-None-Match."}}},"400":{"description":"Invalid parameters.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["type","code","message","request_id","doc_url"],"properties":{"type":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"},"request_id":{"type":"string"},"doc_url":{"type":"string"},"details":{"type":"array","items":{"type":"object","required":["message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}}}},"401":{"description":"Missing or invalid API key.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["type","code","message","request_id","doc_url"],"properties":{"type":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"},"request_id":{"type":"string"},"doc_url":{"type":"string"},"details":{"type":"array","items":{"type":"object","required":["message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}}}},"403":{"description":"The API key does not have the required scope.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["type","code","message","request_id","doc_url"],"properties":{"type":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"},"request_id":{"type":"string"},"doc_url":{"type":"string"},"details":{"type":"array","items":{"type":"object","required":["message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}}}},"404":{"description":"The requested resource was not found in the calling key's workspace scope.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["type","code","message","request_id","doc_url"],"properties":{"type":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"},"request_id":{"type":"string"},"doc_url":{"type":"string"},"details":{"type":"array","items":{"type":"object","required":["message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}}}},"409":{"description":"Conflict or idempotency replay conflict.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["type","code","message","request_id","doc_url"],"properties":{"type":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"},"request_id":{"type":"string"},"doc_url":{"type":"string"},"details":{"type":"array","items":{"type":"object","required":["message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}}}},"429":{"description":"Rate limit exceeded.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["type","code","message","request_id","doc_url"],"properties":{"type":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"},"request_id":{"type":"string"},"doc_url":{"type":"string"},"details":{"type":"array","items":{"type":"object","required":["message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["type","code","message","request_id","doc_url"],"properties":{"type":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"},"request_id":{"type":"string"},"doc_url":{"type":"string"},"details":{"type":"array","items":{"type":"object","required":["message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}}}}}}},"/departments":{"get":{"operationId":"listDepartments","summary":null,"parameters":[{"name":"Oximy-Version","in":"header","required":false,"schema":{"type":"string","enum":["2026-06-29"]},"description":"Optional dated API version. If sent, it must match the calling key's pinned version."},{"name":"period","in":"query","required":false,"schema":{"type":"string","enum":["last_7d","last_30d","last_90d"],"default":"last_30d"},"description":"Spend window."},{"name":"sort","in":"query","required":false,"schema":{"type":"string","enum":["-cost","cost","-cost_per_person","cost_per_person","-users","users","name","-name"],"default":"-cost_per_person"},"description":"Sort order."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":100,"default":50},"description":"Maximum rows to return."},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"},"description":"Cursor from the prior response."}],"responses":{"200":{"description":"Departments list.","headers":{"Oximy-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Maximum requests allowed in the current window."},"Oximy-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests remaining in the current window."},"Oximy-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Unix timestamp in seconds when the current window resets."},"ETag":{"schema":{"type":"string"},"description":"Weak validator for conditional GET polling with If-None-Match."}},"content":{"application/json":{"schema":{"type":"object","required":["object","request_id","as_of","data","has_more","next_cursor"],"properties":{"object":{"type":"string","enum":["list"]},"request_id":{"type":"string"},"as_of":{"type":"string","format":"date-time"},"data":{"type":"array","items":{"$ref":"#/components/schemas/Department"}},"has_more":{"type":"boolean"},"next_cursor":{"type":"string","nullable":true}}}}}},"304":{"description":"Not modified. Conditional GET responses do not consume rate-limit quota.","headers":{"Oximy-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Maximum requests allowed in the current window."},"Oximy-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests remaining in the current window."},"Oximy-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Unix timestamp in seconds when the current window resets."},"ETag":{"schema":{"type":"string"},"description":"Weak validator for conditional GET polling with If-None-Match."}}},"400":{"description":"Invalid parameters.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["type","code","message","request_id","doc_url"],"properties":{"type":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"},"request_id":{"type":"string"},"doc_url":{"type":"string"},"details":{"type":"array","items":{"type":"object","required":["message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}}}},"401":{"description":"Missing or invalid API key.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["type","code","message","request_id","doc_url"],"properties":{"type":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"},"request_id":{"type":"string"},"doc_url":{"type":"string"},"details":{"type":"array","items":{"type":"object","required":["message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}}}},"403":{"description":"The API key does not have the required scope.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["type","code","message","request_id","doc_url"],"properties":{"type":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"},"request_id":{"type":"string"},"doc_url":{"type":"string"},"details":{"type":"array","items":{"type":"object","required":["message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}}}},"404":{"description":"The requested resource was not found in the calling key's workspace scope.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["type","code","message","request_id","doc_url"],"properties":{"type":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"},"request_id":{"type":"string"},"doc_url":{"type":"string"},"details":{"type":"array","items":{"type":"object","required":["message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}}}},"409":{"description":"Conflict or idempotency replay conflict.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["type","code","message","request_id","doc_url"],"properties":{"type":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"},"request_id":{"type":"string"},"doc_url":{"type":"string"},"details":{"type":"array","items":{"type":"object","required":["message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}}}},"429":{"description":"Rate limit exceeded.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["type","code","message","request_id","doc_url"],"properties":{"type":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"},"request_id":{"type":"string"},"doc_url":{"type":"string"},"details":{"type":"array","items":{"type":"object","required":["message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["type","code","message","request_id","doc_url"],"properties":{"type":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"},"request_id":{"type":"string"},"doc_url":{"type":"string"},"details":{"type":"array","items":{"type":"object","required":["message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}}}}}}},"/departments/{id}":{"get":{"operationId":"getDepartment","summary":null,"parameters":[{"name":"Oximy-Version","in":"header","required":false,"schema":{"type":"string","enum":["2026-06-29"]},"description":"Optional dated API version. If sent, it must match the calling key's pinned version."},{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Public department id from /departments."},{"name":"period","in":"query","required":false,"schema":{"type":"string","enum":["last_7d","last_30d","last_90d"],"default":"last_30d"},"description":"Spend window."}],"responses":{"200":{"description":"Department detail.","headers":{"Oximy-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Maximum requests allowed in the current window."},"Oximy-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests remaining in the current window."},"Oximy-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Unix timestamp in seconds when the current window resets."},"ETag":{"schema":{"type":"string"},"description":"Weak validator for conditional GET polling with If-None-Match."}},"content":{"application/json":{"schema":{"type":"object","required":["object","request_id","as_of","data"],"properties":{"object":{"type":"string","enum":["department"]},"request_id":{"type":"string"},"as_of":{"type":"string","format":"date-time"},"data":{"$ref":"#/components/schemas/Department"}}}}}},"304":{"description":"Not modified. Conditional GET responses do not consume rate-limit quota.","headers":{"Oximy-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Maximum requests allowed in the current window."},"Oximy-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests remaining in the current window."},"Oximy-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Unix timestamp in seconds when the current window resets."},"ETag":{"schema":{"type":"string"},"description":"Weak validator for conditional GET polling with If-None-Match."}}},"400":{"description":"Invalid parameters.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["type","code","message","request_id","doc_url"],"properties":{"type":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"},"request_id":{"type":"string"},"doc_url":{"type":"string"},"details":{"type":"array","items":{"type":"object","required":["message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}}}},"401":{"description":"Missing or invalid API key.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["type","code","message","request_id","doc_url"],"properties":{"type":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"},"request_id":{"type":"string"},"doc_url":{"type":"string"},"details":{"type":"array","items":{"type":"object","required":["message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}}}},"403":{"description":"The API key does not have the required scope.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["type","code","message","request_id","doc_url"],"properties":{"type":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"},"request_id":{"type":"string"},"doc_url":{"type":"string"},"details":{"type":"array","items":{"type":"object","required":["message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}}}},"404":{"description":"The requested resource was not found in the calling key's workspace scope.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["type","code","message","request_id","doc_url"],"properties":{"type":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"},"request_id":{"type":"string"},"doc_url":{"type":"string"},"details":{"type":"array","items":{"type":"object","required":["message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}}}},"409":{"description":"Conflict or idempotency replay conflict.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["type","code","message","request_id","doc_url"],"properties":{"type":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"},"request_id":{"type":"string"},"doc_url":{"type":"string"},"details":{"type":"array","items":{"type":"object","required":["message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}}}},"429":{"description":"Rate limit exceeded.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["type","code","message","request_id","doc_url"],"properties":{"type":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"},"request_id":{"type":"string"},"doc_url":{"type":"string"},"details":{"type":"array","items":{"type":"object","required":["message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["type","code","message","request_id","doc_url"],"properties":{"type":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"},"request_id":{"type":"string"},"doc_url":{"type":"string"},"details":{"type":"array","items":{"type":"object","required":["message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}}}}}}},"/seats":{"get":{"operationId":"listSeats","summary":null,"parameters":[{"name":"Oximy-Version","in":"header","required":false,"schema":{"type":"string","enum":["2026-06-29"]},"description":"Optional dated API version. If sent, it must match the calling key's pinned version."},{"name":"tool","in":"query","required":false,"schema":{"type":"string"},"description":"Seat-backed tool id or slug. Supported today: cursor, github_copilot."},{"name":"utilization","in":"query","required":false,"schema":{"type":"string","enum":["active","idle"]},"description":"Filter by utilization bucket."},{"name":"period","in":"query","required":false,"schema":{"type":"string","enum":["last_30d"],"default":"last_30d"},"description":"Utilization window."},{"name":"sort","in":"query","required":false,"schema":{"type":"string","enum":["-cost","cost","-last_active","last_active","name","-name"],"default":"-last_active"},"description":"Sort order."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":100,"default":50},"description":"Maximum rows to return."},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"},"description":"Cursor from the prior response."}],"responses":{"200":{"description":"Seats list. Employee names/emails are only present with people:names:read.","headers":{"Oximy-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Maximum requests allowed in the current window."},"Oximy-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests remaining in the current window."},"Oximy-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Unix timestamp in seconds when the current window resets."},"ETag":{"schema":{"type":"string"},"description":"Weak validator for conditional GET polling with If-None-Match."}},"content":{"application/json":{"schema":{"type":"object","required":["object","request_id","as_of","data","has_more","next_cursor"],"properties":{"object":{"type":"string","enum":["list"]},"request_id":{"type":"string"},"as_of":{"type":"string","format":"date-time"},"data":{"type":"array","items":{"$ref":"#/components/schemas/Seat"}},"has_more":{"type":"boolean"},"next_cursor":{"type":"string","nullable":true}}}}}},"304":{"description":"Not modified. Conditional GET responses do not consume rate-limit quota.","headers":{"Oximy-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Maximum requests allowed in the current window."},"Oximy-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests remaining in the current window."},"Oximy-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Unix timestamp in seconds when the current window resets."},"ETag":{"schema":{"type":"string"},"description":"Weak validator for conditional GET polling with If-None-Match."}}},"400":{"description":"Invalid parameters.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["type","code","message","request_id","doc_url"],"properties":{"type":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"},"request_id":{"type":"string"},"doc_url":{"type":"string"},"details":{"type":"array","items":{"type":"object","required":["message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}}}},"401":{"description":"Missing or invalid API key.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["type","code","message","request_id","doc_url"],"properties":{"type":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"},"request_id":{"type":"string"},"doc_url":{"type":"string"},"details":{"type":"array","items":{"type":"object","required":["message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}}}},"403":{"description":"The API key does not have the required scope.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["type","code","message","request_id","doc_url"],"properties":{"type":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"},"request_id":{"type":"string"},"doc_url":{"type":"string"},"details":{"type":"array","items":{"type":"object","required":["message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}}}},"404":{"description":"The requested resource was not found in the calling key's workspace scope.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["type","code","message","request_id","doc_url"],"properties":{"type":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"},"request_id":{"type":"string"},"doc_url":{"type":"string"},"details":{"type":"array","items":{"type":"object","required":["message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}}}},"409":{"description":"Conflict or idempotency replay conflict.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["type","code","message","request_id","doc_url"],"properties":{"type":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"},"request_id":{"type":"string"},"doc_url":{"type":"string"},"details":{"type":"array","items":{"type":"object","required":["message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}}}},"429":{"description":"Rate limit exceeded.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["type","code","message","request_id","doc_url"],"properties":{"type":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"},"request_id":{"type":"string"},"doc_url":{"type":"string"},"details":{"type":"array","items":{"type":"object","required":["message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["type","code","message","request_id","doc_url"],"properties":{"type":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"},"request_id":{"type":"string"},"doc_url":{"type":"string"},"details":{"type":"array","items":{"type":"object","required":["message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}}}}}}},"/recommendations":{"get":{"operationId":"listRecommendations","summary":null,"parameters":[{"name":"Oximy-Version","in":"header","required":false,"schema":{"type":"string","enum":["2026-06-29"]},"description":"Optional dated API version. If sent, it must match the calling key's pinned version."},{"name":"period","in":"query","required":false,"schema":{"type":"string","enum":["last_30d"],"default":"last_30d"},"description":"Recommendation window."},{"name":"impact_kind","in":"query","required":false,"schema":{"type":"string","enum":["hard_savings","modeled_savings","mixed_savings","review","data_quality"]},"description":"Filter by impact class."},{"name":"confidence","in":"query","required":false,"schema":{"type":"string","enum":["confirmed","modeled","needs_review"]},"description":"Filter by confidence level."},{"name":"lens","in":"query","required":false,"schema":{"type":"string","enum":["commitments","licenses","shadow","behavior","data_quality"]},"description":"Filter by recommendation lens."},{"name":"objective","in":"query","required":false,"schema":{"type":"string","enum":["save_money","right_size","reallocate","reduce_shadow","behavior_fit"]},"description":"Filter by scenario objective."},{"name":"sort","in":"query","required":false,"schema":{"type":"string","enum":["-impact","impact","-affected_people","affected_people"],"default":"-impact"},"description":"Sort order."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":100,"default":50},"description":"Maximum rows to return."},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"},"description":"Cursor from the prior response."}],"responses":{"200":{"description":"Recommendations list.","headers":{"Oximy-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Maximum requests allowed in the current window."},"Oximy-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests remaining in the current window."},"Oximy-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Unix timestamp in seconds when the current window resets."},"ETag":{"schema":{"type":"string"},"description":"Weak validator for conditional GET polling with If-None-Match."}},"content":{"application/json":{"schema":{"type":"object","required":["object","request_id","as_of","data","has_more","next_cursor"],"properties":{"object":{"type":"string","enum":["list"]},"request_id":{"type":"string"},"as_of":{"type":"string","format":"date-time"},"data":{"type":"array","items":{"$ref":"#/components/schemas/Recommendation"}},"has_more":{"type":"boolean"},"next_cursor":{"type":"string","nullable":true}}}}}},"304":{"description":"Not modified. Conditional GET responses do not consume rate-limit quota.","headers":{"Oximy-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Maximum requests allowed in the current window."},"Oximy-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests remaining in the current window."},"Oximy-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Unix timestamp in seconds when the current window resets."},"ETag":{"schema":{"type":"string"},"description":"Weak validator for conditional GET polling with If-None-Match."}}},"400":{"description":"Invalid parameters.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["type","code","message","request_id","doc_url"],"properties":{"type":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"},"request_id":{"type":"string"},"doc_url":{"type":"string"},"details":{"type":"array","items":{"type":"object","required":["message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}}}},"401":{"description":"Missing or invalid API key.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["type","code","message","request_id","doc_url"],"properties":{"type":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"},"request_id":{"type":"string"},"doc_url":{"type":"string"},"details":{"type":"array","items":{"type":"object","required":["message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}}}},"403":{"description":"The API key does not have the required scope.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["type","code","message","request_id","doc_url"],"properties":{"type":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"},"request_id":{"type":"string"},"doc_url":{"type":"string"},"details":{"type":"array","items":{"type":"object","required":["message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}}}},"404":{"description":"The requested resource was not found in the calling key's workspace scope.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["type","code","message","request_id","doc_url"],"properties":{"type":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"},"request_id":{"type":"string"},"doc_url":{"type":"string"},"details":{"type":"array","items":{"type":"object","required":["message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}}}},"409":{"description":"Conflict or idempotency replay conflict.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["type","code","message","request_id","doc_url"],"properties":{"type":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"},"request_id":{"type":"string"},"doc_url":{"type":"string"},"details":{"type":"array","items":{"type":"object","required":["message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}}}},"429":{"description":"Rate limit exceeded.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["type","code","message","request_id","doc_url"],"properties":{"type":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"},"request_id":{"type":"string"},"doc_url":{"type":"string"},"details":{"type":"array","items":{"type":"object","required":["message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["type","code","message","request_id","doc_url"],"properties":{"type":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"},"request_id":{"type":"string"},"doc_url":{"type":"string"},"details":{"type":"array","items":{"type":"object","required":["message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}}}}}}},"/report-summary":{"get":{"operationId":"getReportSummary","summary":null,"parameters":[{"name":"Oximy-Version","in":"header","required":false,"schema":{"type":"string","enum":["2026-06-29"]},"description":"Optional dated API version. If sent, it must match the calling key's pinned version."},{"name":"period","in":"query","required":false,"schema":{"type":"string","enum":["last_30d"],"default":"last_30d"},"description":"Report window."}],"responses":{"200":{"description":"Report summary.","headers":{"Oximy-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Maximum requests allowed in the current window."},"Oximy-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests remaining in the current window."},"Oximy-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Unix timestamp in seconds when the current window resets."},"ETag":{"schema":{"type":"string"},"description":"Weak validator for conditional GET polling with If-None-Match."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReportSummaryResponse"}}}},"304":{"description":"Not modified. Conditional GET responses do not consume rate-limit quota.","headers":{"Oximy-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Maximum requests allowed in the current window."},"Oximy-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests remaining in the current window."},"Oximy-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Unix timestamp in seconds when the current window resets."},"ETag":{"schema":{"type":"string"},"description":"Weak validator for conditional GET polling with If-None-Match."}}},"400":{"description":"Invalid parameters.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["type","code","message","request_id","doc_url"],"properties":{"type":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"},"request_id":{"type":"string"},"doc_url":{"type":"string"},"details":{"type":"array","items":{"type":"object","required":["message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}}}},"401":{"description":"Missing or invalid API key.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["type","code","message","request_id","doc_url"],"properties":{"type":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"},"request_id":{"type":"string"},"doc_url":{"type":"string"},"details":{"type":"array","items":{"type":"object","required":["message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}}}},"403":{"description":"The API key does not have the required scope.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["type","code","message","request_id","doc_url"],"properties":{"type":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"},"request_id":{"type":"string"},"doc_url":{"type":"string"},"details":{"type":"array","items":{"type":"object","required":["message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}}}},"404":{"description":"The requested resource was not found in the calling key's workspace scope.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["type","code","message","request_id","doc_url"],"properties":{"type":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"},"request_id":{"type":"string"},"doc_url":{"type":"string"},"details":{"type":"array","items":{"type":"object","required":["message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}}}},"409":{"description":"Conflict or idempotency replay conflict.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["type","code","message","request_id","doc_url"],"properties":{"type":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"},"request_id":{"type":"string"},"doc_url":{"type":"string"},"details":{"type":"array","items":{"type":"object","required":["message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}}}},"429":{"description":"Rate limit exceeded.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["type","code","message","request_id","doc_url"],"properties":{"type":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"},"request_id":{"type":"string"},"doc_url":{"type":"string"},"details":{"type":"array","items":{"type":"object","required":["message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["type","code","message","request_id","doc_url"],"properties":{"type":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"},"request_id":{"type":"string"},"doc_url":{"type":"string"},"details":{"type":"array","items":{"type":"object","required":["message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}}}}}}},"/events":{"get":{"operationId":"listEvents","summary":null,"parameters":[{"name":"Oximy-Version","in":"header","required":false,"schema":{"type":"string","enum":["2026-06-29"]},"description":"Optional dated API version. If sent, it must match the calling key's pinned version."},{"name":"type","in":"query","required":false,"schema":{"type":"string","enum":["tool_approval.updated","developer_webhook.created","developer_webhook.revoked"]},"description":"Filter by event type."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":100,"default":50},"description":"Maximum rows to return."},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"},"description":"Cursor from the prior response."}],"responses":{"200":{"description":"Events list.","headers":{"Oximy-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Maximum requests allowed in the current window."},"Oximy-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests remaining in the current window."},"Oximy-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Unix timestamp in seconds when the current window resets."},"ETag":{"schema":{"type":"string"},"description":"Weak validator for conditional GET polling with If-None-Match."}},"content":{"application/json":{"schema":{"type":"object","required":["object","request_id","as_of","data","has_more","next_cursor"],"properties":{"object":{"type":"string","enum":["list"]},"request_id":{"type":"string"},"as_of":{"type":"string","format":"date-time"},"data":{"type":"array","items":{"$ref":"#/components/schemas/Event"}},"has_more":{"type":"boolean"},"next_cursor":{"type":"string","nullable":true}}}}}},"304":{"description":"Not modified. Conditional GET responses do not consume rate-limit quota.","headers":{"Oximy-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Maximum requests allowed in the current window."},"Oximy-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests remaining in the current window."},"Oximy-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Unix timestamp in seconds when the current window resets."},"ETag":{"schema":{"type":"string"},"description":"Weak validator for conditional GET polling with If-None-Match."}}},"400":{"description":"Invalid parameters.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["type","code","message","request_id","doc_url"],"properties":{"type":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"},"request_id":{"type":"string"},"doc_url":{"type":"string"},"details":{"type":"array","items":{"type":"object","required":["message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}}}},"401":{"description":"Missing or invalid API key.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["type","code","message","request_id","doc_url"],"properties":{"type":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"},"request_id":{"type":"string"},"doc_url":{"type":"string"},"details":{"type":"array","items":{"type":"object","required":["message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}}}},"403":{"description":"The API key does not have the required scope.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["type","code","message","request_id","doc_url"],"properties":{"type":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"},"request_id":{"type":"string"},"doc_url":{"type":"string"},"details":{"type":"array","items":{"type":"object","required":["message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}}}},"404":{"description":"The requested resource was not found in the calling key's workspace scope.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["type","code","message","request_id","doc_url"],"properties":{"type":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"},"request_id":{"type":"string"},"doc_url":{"type":"string"},"details":{"type":"array","items":{"type":"object","required":["message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}}}},"409":{"description":"Conflict or idempotency replay conflict.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["type","code","message","request_id","doc_url"],"properties":{"type":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"},"request_id":{"type":"string"},"doc_url":{"type":"string"},"details":{"type":"array","items":{"type":"object","required":["message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}}}},"429":{"description":"Rate limit exceeded.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["type","code","message","request_id","doc_url"],"properties":{"type":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"},"request_id":{"type":"string"},"doc_url":{"type":"string"},"details":{"type":"array","items":{"type":"object","required":["message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["type","code","message","request_id","doc_url"],"properties":{"type":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"},"request_id":{"type":"string"},"doc_url":{"type":"string"},"details":{"type":"array","items":{"type":"object","required":["message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}}}}}}},"/webhook-endpoints":{"get":{"operationId":"listWebhookEndpoints","summary":null,"parameters":[{"name":"Oximy-Version","in":"header","required":false,"schema":{"type":"string","enum":["2026-06-29"]},"description":"Optional dated API version. If sent, it must match the calling key's pinned version."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":100,"default":50},"description":"Maximum rows to return."},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"},"description":"Cursor from the prior response."}],"responses":{"200":{"description":"Webhook endpoint list.","headers":{"Oximy-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Maximum requests allowed in the current window."},"Oximy-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests remaining in the current window."},"Oximy-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Unix timestamp in seconds when the current window resets."},"ETag":{"schema":{"type":"string"},"description":"Weak validator for conditional GET polling with If-None-Match."}},"content":{"application/json":{"schema":{"type":"object","required":["object","request_id","as_of","data","has_more","next_cursor"],"properties":{"object":{"type":"string","enum":["list"]},"request_id":{"type":"string"},"as_of":{"type":"string","format":"date-time"},"data":{"type":"array","items":{"$ref":"#/components/schemas/WebhookEndpoint"}},"has_more":{"type":"boolean"},"next_cursor":{"type":"string","nullable":true}}}}}},"304":{"description":"Not modified. Conditional GET responses do not consume rate-limit quota.","headers":{"Oximy-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Maximum requests allowed in the current window."},"Oximy-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests remaining in the current window."},"Oximy-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Unix timestamp in seconds when the current window resets."},"ETag":{"schema":{"type":"string"},"description":"Weak validator for conditional GET polling with If-None-Match."}}},"400":{"description":"Invalid parameters.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["type","code","message","request_id","doc_url"],"properties":{"type":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"},"request_id":{"type":"string"},"doc_url":{"type":"string"},"details":{"type":"array","items":{"type":"object","required":["message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}}}},"401":{"description":"Missing or invalid API key.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["type","code","message","request_id","doc_url"],"properties":{"type":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"},"request_id":{"type":"string"},"doc_url":{"type":"string"},"details":{"type":"array","items":{"type":"object","required":["message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}}}},"403":{"description":"The API key does not have the required scope.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["type","code","message","request_id","doc_url"],"properties":{"type":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"},"request_id":{"type":"string"},"doc_url":{"type":"string"},"details":{"type":"array","items":{"type":"object","required":["message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}}}},"404":{"description":"The requested resource was not found in the calling key's workspace scope.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["type","code","message","request_id","doc_url"],"properties":{"type":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"},"request_id":{"type":"string"},"doc_url":{"type":"string"},"details":{"type":"array","items":{"type":"object","required":["message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}}}},"409":{"description":"Conflict or idempotency replay conflict.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["type","code","message","request_id","doc_url"],"properties":{"type":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"},"request_id":{"type":"string"},"doc_url":{"type":"string"},"details":{"type":"array","items":{"type":"object","required":["message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}}}},"429":{"description":"Rate limit exceeded.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["type","code","message","request_id","doc_url"],"properties":{"type":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"},"request_id":{"type":"string"},"doc_url":{"type":"string"},"details":{"type":"array","items":{"type":"object","required":["message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["type","code","message","request_id","doc_url"],"properties":{"type":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"},"request_id":{"type":"string"},"doc_url":{"type":"string"},"details":{"type":"array","items":{"type":"object","required":["message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}}}}}},"post":{"operationId":"createWebhookEndpoint","summary":null,"parameters":[{"name":"Oximy-Version","in":"header","required":false,"schema":{"type":"string","enum":["2026-06-29"]},"description":"Optional dated API version. If sent, it must match the calling key's pinned version."},{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","minLength":1,"maxLength":255},"description":"Required for writes. Reusing the same key with the same body replays the first result."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookEndpointCreateRequest"}}}},"responses":{"200":{"description":"Webhook endpoint created.","headers":{"Oximy-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Maximum requests allowed in the current window."},"Oximy-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests remaining in the current window."},"Oximy-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Unix timestamp in seconds when the current window resets."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookEndpointResponse"}}}},"400":{"description":"Invalid parameters.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["type","code","message","request_id","doc_url"],"properties":{"type":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"},"request_id":{"type":"string"},"doc_url":{"type":"string"},"details":{"type":"array","items":{"type":"object","required":["message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}}}},"401":{"description":"Missing or invalid API key.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["type","code","message","request_id","doc_url"],"properties":{"type":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"},"request_id":{"type":"string"},"doc_url":{"type":"string"},"details":{"type":"array","items":{"type":"object","required":["message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}}}},"403":{"description":"The API key does not have the required scope.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["type","code","message","request_id","doc_url"],"properties":{"type":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"},"request_id":{"type":"string"},"doc_url":{"type":"string"},"details":{"type":"array","items":{"type":"object","required":["message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}}}},"404":{"description":"The requested resource was not found in the calling key's workspace scope.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["type","code","message","request_id","doc_url"],"properties":{"type":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"},"request_id":{"type":"string"},"doc_url":{"type":"string"},"details":{"type":"array","items":{"type":"object","required":["message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}}}},"409":{"description":"Conflict or idempotency replay conflict.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["type","code","message","request_id","doc_url"],"properties":{"type":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"},"request_id":{"type":"string"},"doc_url":{"type":"string"},"details":{"type":"array","items":{"type":"object","required":["message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}}}},"429":{"description":"Rate limit exceeded.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["type","code","message","request_id","doc_url"],"properties":{"type":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"},"request_id":{"type":"string"},"doc_url":{"type":"string"},"details":{"type":"array","items":{"type":"object","required":["message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["type","code","message","request_id","doc_url"],"properties":{"type":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"},"request_id":{"type":"string"},"doc_url":{"type":"string"},"details":{"type":"array","items":{"type":"object","required":["message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}}}}}}},"/webhook-endpoint-revocations":{"post":{"operationId":"revokeWebhookEndpoint","summary":null,"parameters":[{"name":"Oximy-Version","in":"header","required":false,"schema":{"type":"string","enum":["2026-06-29"]},"description":"Optional dated API version. If sent, it must match the calling key's pinned version."},{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","minLength":1,"maxLength":255},"description":"Required for writes. Reusing the same key with the same body replays the first result."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookEndpointRevokeRequest"}}}},"responses":{"200":{"description":"Webhook endpoint revoked.","headers":{"Oximy-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Maximum requests allowed in the current window."},"Oximy-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests remaining in the current window."},"Oximy-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Unix timestamp in seconds when the current window resets."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookEndpointResponse"}}}},"400":{"description":"Invalid parameters.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["type","code","message","request_id","doc_url"],"properties":{"type":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"},"request_id":{"type":"string"},"doc_url":{"type":"string"},"details":{"type":"array","items":{"type":"object","required":["message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}}}},"401":{"description":"Missing or invalid API key.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["type","code","message","request_id","doc_url"],"properties":{"type":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"},"request_id":{"type":"string"},"doc_url":{"type":"string"},"details":{"type":"array","items":{"type":"object","required":["message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}}}},"403":{"description":"The API key does not have the required scope.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["type","code","message","request_id","doc_url"],"properties":{"type":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"},"request_id":{"type":"string"},"doc_url":{"type":"string"},"details":{"type":"array","items":{"type":"object","required":["message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}}}},"404":{"description":"The requested resource was not found in the calling key's workspace scope.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["type","code","message","request_id","doc_url"],"properties":{"type":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"},"request_id":{"type":"string"},"doc_url":{"type":"string"},"details":{"type":"array","items":{"type":"object","required":["message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}}}},"409":{"description":"Conflict or idempotency replay conflict.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["type","code","message","request_id","doc_url"],"properties":{"type":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"},"request_id":{"type":"string"},"doc_url":{"type":"string"},"details":{"type":"array","items":{"type":"object","required":["message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}}}},"429":{"description":"Rate limit exceeded.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["type","code","message","request_id","doc_url"],"properties":{"type":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"},"request_id":{"type":"string"},"doc_url":{"type":"string"},"details":{"type":"array","items":{"type":"object","required":["message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["type","code","message","request_id","doc_url"],"properties":{"type":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"},"request_id":{"type":"string"},"doc_url":{"type":"string"},"details":{"type":"array","items":{"type":"object","required":["message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}}}}}}},"/tool-approvals":{"post":{"operationId":"createToolApproval","summary":null,"parameters":[{"name":"Oximy-Version","in":"header","required":false,"schema":{"type":"string","enum":["2026-06-29"]},"description":"Optional dated API version. If sent, it must match the calling key's pinned version."},{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","minLength":1,"maxLength":255},"description":"Required for writes. Reusing the same key with the same body replays the first result."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolApprovalWriteRequest"}}}},"responses":{"200":{"description":"Tool approval decision applied.","headers":{"Oximy-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Maximum requests allowed in the current window."},"Oximy-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests remaining in the current window."},"Oximy-RateLimit-Reset":{"schema":{"type":"integer"},"description":"Unix timestamp in seconds when the current window resets."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolApprovalResponse"}}}},"400":{"description":"Invalid parameters.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["type","code","message","request_id","doc_url"],"properties":{"type":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"},"request_id":{"type":"string"},"doc_url":{"type":"string"},"details":{"type":"array","items":{"type":"object","required":["message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}}}},"401":{"description":"Missing or invalid API key.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["type","code","message","request_id","doc_url"],"properties":{"type":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"},"request_id":{"type":"string"},"doc_url":{"type":"string"},"details":{"type":"array","items":{"type":"object","required":["message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}}}},"403":{"description":"The API key does not have the required scope.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["type","code","message","request_id","doc_url"],"properties":{"type":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"},"request_id":{"type":"string"},"doc_url":{"type":"string"},"details":{"type":"array","items":{"type":"object","required":["message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}}}},"404":{"description":"The requested resource was not found in the calling key's workspace scope.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["type","code","message","request_id","doc_url"],"properties":{"type":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"},"request_id":{"type":"string"},"doc_url":{"type":"string"},"details":{"type":"array","items":{"type":"object","required":["message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}}}},"409":{"description":"Conflict or idempotency replay conflict.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["type","code","message","request_id","doc_url"],"properties":{"type":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"},"request_id":{"type":"string"},"doc_url":{"type":"string"},"details":{"type":"array","items":{"type":"object","required":["message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}}}},"429":{"description":"Rate limit exceeded.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["type","code","message","request_id","doc_url"],"properties":{"type":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"},"request_id":{"type":"string"},"doc_url":{"type":"string"},"details":{"type":"array","items":{"type":"object","required":["message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}}}},"500":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["type","code","message","request_id","doc_url"],"properties":{"type":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"},"request_id":{"type":"string"},"doc_url":{"type":"string"},"details":{"type":"array","items":{"type":"object","required":["message"],"properties":{"field":{"type":"string"},"message":{"type":"string"}}}}}}}}}}}}}}},"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"oxy_live API key"}},"schemas":{"MetaResponse":{"type":"object","required":["object","request_id","as_of","data"],"properties":{"object":{"type":"string","enum":["meta"]},"request_id":{"type":"string"},"as_of":{"type":"string","format":"date-time"},"data":{"type":"object","required":["version","effective_version","supported_versions","mode","scopes","resources","shared_filters"],"properties":{"version":{"type":"string"},"requested_version":{"type":"string","nullable":true},"effective_version":{"type":"string"},"supported_versions":{"type":"array","items":{"type":"string"}},"mode":{"type":"string","enum":["live"]},"scopes":{"type":"array","items":{"type":"string"}},"openapi_url":{"type":"string"},"usage_url":{"type":"string"},"rate_limit":{"$ref":"#/components/schemas/RateLimitState"},"resources":{"type":"array","items":{"type":"object"}},"shared_filters":{"type":"array","items":{"type":"string"}}}}}},"UsageResponse":{"type":"object","required":["object","request_id","as_of","data"],"properties":{"object":{"type":"string","enum":["usage"]},"request_id":{"type":"string"},"as_of":{"type":"string","format":"date-time"},"data":{"type":"object","required":["key_id","key_prefix","mode","scopes","api_version","effective_version","supported_versions","usage_count","rate_limit"],"properties":{"key_id":{"type":"string"},"key_prefix":{"type":"string"},"mode":{"type":"string","enum":["live"]},"scopes":{"type":"array","items":{"type":"string"}},"api_version":{"type":"string"},"requested_version":{"type":"string","nullable":true},"effective_version":{"type":"string"},"supported_versions":{"type":"array","items":{"type":"string"}},"last_used_at":{"type":"string","format":"date-time","nullable":true},"usage_count":{"type":"number"},"rate_limit":{"$ref":"#/components/schemas/RateLimitState"}}}}},"RateLimitState":{"type":"object","required":["limit","remaining","reset_at"],"properties":{"limit":{"type":"number"},"remaining":{"type":"number"},"reset_at":{"type":"string","format":"date-time"}}},"User":{"type":"object","required":["id","object","status","usage","sessions","tools_used","spend","sources"],"properties":{"id":{"type":"string"},"object":{"type":"string","enum":["user"]},"name":{"type":"string"},"email":{"type":"string"},"department":{"type":"string","nullable":true},"status":{"type":"string"},"usage":{"type":"number"},"usage_7d":{"type":"number"},"active_days":{"type":"number"},"sessions":{"type":"number"},"sessions_7d":{"type":"number"},"tools_used":{"type":"number"},"spend":{"type":"object","required":["monthly_usd","currency","sources"],"properties":{"monthly_usd":{"type":"number"},"currency":{"type":"string","enum":["usd"]},"sources":{"type":"array","items":{"type":"string"}}}},"top_tools":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"count":{"type":"number"},"last_used":{"type":"string","format":"date-time"}}}},"last_active":{"type":"string","format":"date-time"},"first_seen":{"type":"string","format":"date-time"},"sources":{"type":"array","items":{"type":"string"}}}},"Tool":{"type":"object","required":["id","object","name","status","users","sessions","sources"],"properties":{"id":{"type":"string"},"object":{"type":"string","enum":["tool"]},"name":{"type":"string"},"domain":{"type":"string","nullable":true},"vendor":{"type":"string","nullable":true},"category":{"type":"string"},"status":{"type":"string"},"lifecycle":{"type":"string"},"users":{"type":"number"},"active_users_7d":{"type":"number"},"sessions":{"type":"number"},"sessions_7d":{"type":"number"},"sessions_per_user":{"type":"number"},"first_seen":{"type":"string","format":"date-time"},"last_active":{"type":"string","format":"date-time"},"sources":{"type":"array","items":{"type":"string"}}}},"Spend":{"oneOf":[{"$ref":"#/components/schemas/SpendByTool"},{"$ref":"#/components/schemas/SpendByDepartment"}]},"Department":{"type":"object","required":["id","object","name","users","tools","cost","cost_per_person","sources"],"properties":{"id":{"type":"string"},"object":{"type":"string","enum":["department"]},"name":{"type":"string"},"users":{"type":"number"},"tools":{"type":"number"},"cost":{"type":"number"},"currency":{"type":"string","enum":["usd"]},"cost_per_person":{"type":"number"},"subscription_spend":{"type":"number"},"usage_spend":{"type":"number"},"issue_count":{"type":"number"},"trend":{"type":"object"},"sources":{"type":"array","items":{"type":"string"}}}},"Seat":{"type":"object","required":["id","object","tool","provider","utilization","is_active","sources"],"properties":{"id":{"type":"string"},"object":{"type":"string","enum":["seat"]},"tool":{"type":"object","required":["id","name"],"properties":{"id":{"type":"string"},"name":{"type":"string"}}},"provider":{"type":"string","enum":["cursor","github_copilot"]},"account":{"type":"object","properties":{"id":{"type":"string"},"email":{"type":"string","nullable":true},"login":{"type":"string","nullable":true},"role":{"type":"string","nullable":true}}},"employee":{"type":"object","nullable":true,"properties":{"id":{"type":"string","nullable":true},"name":{"type":"string"},"email":{"type":"string"},"department":{"type":"string","nullable":true}}},"utilization":{"type":"string","enum":["active","idle"]},"is_active":{"type":"boolean"},"cost":{"type":"number","nullable":true},"currency":{"type":"string","enum":["usd"]},"tokens":{"type":"number"},"requests":{"type":"number"},"accepts":{"type":"number"},"last_active":{"type":"string","format":"date-time","nullable":true},"sources":{"type":"array","items":{"type":"string"}}}},"Recommendation":{"type":"object","required":["id","object","type","title","impact","affected","confidence","sources"],"properties":{"id":{"type":"string"},"object":{"type":"string","enum":["recommendation"]},"type":{"type":"string"},"lens":{"type":"string"},"objective":{"type":"string"},"title":{"type":"string"},"description":{"type":"string"},"tool":{"type":"object","nullable":true,"properties":{"id":{"type":"string","nullable":true},"name":{"type":"string"},"category":{"type":"string","nullable":true},"icon_url":{"type":"string","nullable":true}}},"department":{"type":"object","nullable":true,"properties":{"name":{"type":"string"}}},"impact":{"type":"object","required":["monthly_usd","annual_usd","kind"],"properties":{"monthly_usd":{"type":"number"},"annual_usd":{"type":"number"},"scenario_monthly_usd":{"type":"number","nullable":true},"kind":{"type":"string"},"breakdown":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string"},"monthly_usd":{"type":"number"},"annual_usd":{"type":"number"},"kind":{"type":"string"},"people":{"type":"number","nullable":true},"seats":{"type":"number","nullable":true},"detail":{"type":"string","nullable":true}}}}}},"affected":{"type":"object","required":["people","seats"],"properties":{"people":{"type":"number"},"seats":{"type":"number"}}},"confidence":{"type":"string"},"evidence":{"type":"array","items":{"type":"string"}},"recommended_action":{"type":"string"},"action_href":{"type":"string"},"subject":{"type":"object"},"sources":{"type":"array","items":{"type":"string"}}}},"ReportSummaryResponse":{"type":"object","required":["object","request_id","as_of","data"],"properties":{"object":{"type":"string","enum":["report_summary"]},"request_id":{"type":"string"},"as_of":{"type":"string","format":"date-time"},"data":{"$ref":"#/components/schemas/ReportSummary"}}},"ReportSummary":{"type":"object","required":["id","object","period","generated_at","savings","opportunity_counts","sources"],"properties":{"id":{"type":"string"},"object":{"type":"string","enum":["report_summary"]},"period":{"type":"string"},"generated_at":{"type":"string","format":"date-time"},"baseline_monthly_spend_usd":{"type":"number"},"savings":{"type":"object","properties":{"confirmed_monthly_usd":{"type":"number"},"confirmed_annual_usd":{"type":"number"},"modeled_monthly_usd":{"type":"number"},"total_scenario_monthly_usd":{"type":"number"},"confirmed_percent_of_baseline":{"type":"number","nullable":true}}},"opportunity_counts":{"type":"object","properties":{"total":{"type":"number"},"confirmed_actions":{"type":"number"},"review_actions":{"type":"number"}}},"shadow":{"type":"object","properties":{"unapproved_spend_total_usd":{"type":"number"},"review_accounts":{"type":"number"}}},"scorecard":{"$ref":"#/components/schemas/Scorecard"},"top_recommendations":{"type":"array","items":{"$ref":"#/components/schemas/Recommendation"}},"behavior":{"type":"object"},"sources":{"type":"array","items":{"type":"string"}}}},"Scorecard":{"type":"object","required":["status","source","grade","score","tone","basis","inputs"],"properties":{"status":{"type":"string","enum":["available","not_available"]},"source":{"type":"string","enum":["spend_intelligence_scorecard_v1"]},"grade":{"type":"string","nullable":true},"score":{"type":"number","nullable":true},"tone":{"type":"string","enum":["excellent","good","mid","bad","base"]},"basis":{"type":"string"},"inputs":{"type":"object","required":["baselineMonthlyUsd","confirmedSavingsPct","modeledSavingsPct","confirmedActionShare","shadowSpendPct","reviewActions","reviewAccounts"],"properties":{"baselineMonthlyUsd":{"type":"number"},"confirmedSavingsPct":{"type":"number","nullable":true},"modeledSavingsPct":{"type":"number","nullable":true},"confirmedActionShare":{"type":"number","nullable":true},"shadowSpendPct":{"type":"number","nullable":true},"reviewActions":{"type":"number"},"reviewAccounts":{"type":"number"}}}}},"Event":{"type":"object","required":["id","object","type","api_version","livemode","resource","data","created_at","sources"],"properties":{"id":{"type":"string"},"object":{"type":"string","enum":["event"]},"type":{"type":"string"},"api_version":{"type":"string"},"livemode":{"type":"boolean"},"actor":{"type":"object","properties":{"type":{"type":"string"},"id":{"type":"string","nullable":true}}},"resource":{"type":"object","properties":{"type":{"type":"string"},"id":{"type":"string","nullable":true}}},"data":{"type":"object"},"idempotency_key":{"type":"string","nullable":true},"request_id":{"type":"string","nullable":true},"webhook_deliveries":{"type":"array","items":{"type":"object","properties":{"endpoint_id":{"type":"string"},"status":{"type":"string"},"status_code":{"type":"number","nullable":true},"error":{"type":"string","nullable":true},"attempted_at":{"type":"string","format":"date-time","nullable":true}}}},"created_at":{"type":"string","format":"date-time"},"sources":{"type":"array","items":{"type":"string"}}}},"WebhookEndpointCreateRequest":{"type":"object","required":["name","url"],"properties":{"name":{"type":"string"},"url":{"type":"string"},"event_types":{"type":"array","items":{"type":"string","enum":["*","tool_approval.updated","developer_webhook.created","developer_webhook.revoked"]}}}},"WebhookEndpointRevokeRequest":{"type":"object","required":["webhook_endpoint"],"properties":{"webhook_endpoint":{"type":"string"}}},"WebhookEndpointResponse":{"type":"object","required":["object","request_id","as_of","data"],"properties":{"object":{"type":"string","enum":["webhook_endpoint"]},"request_id":{"type":"string"},"as_of":{"type":"string","format":"date-time"},"data":{"$ref":"#/components/schemas/WebhookEndpoint"}}},"WebhookEndpoint":{"type":"object","required":["id","object","name","url","event_types","secret_prefix","is_revoked","created_at","sources"],"properties":{"id":{"type":"string"},"object":{"type":"string","enum":["webhook_endpoint"]},"name":{"type":"string"},"url":{"type":"string"},"event_types":{"type":"array","items":{"type":"string","enum":["*","tool_approval.updated","developer_webhook.created","developer_webhook.revoked"]}},"secret_prefix":{"type":"string"},"secret":{"type":"string"},"is_revoked":{"type":"boolean"},"last_delivery_at":{"type":"string","format":"date-time","nullable":true},"last_delivery_status":{"type":"string","nullable":true},"last_delivery_error":{"type":"string","nullable":true},"created_at":{"type":"string","format":"date-time"},"revoked_at":{"type":"string","format":"date-time","nullable":true},"sources":{"type":"array","items":{"type":"string"}}}},"ToolApprovalWriteRequest":{"type":"object","required":["tool","decision"],"properties":{"tool":{"type":"string"},"decision":{"type":"string","enum":["approved","pending","unapproved","flagged","warn","blocked"]},"reason":{"type":"string"},"review_note":{"type":"string"},"risk_level":{"type":"string","enum":["low","medium","high","critical"]},"risk_flags":{"type":"array","items":{"type":"string"}},"enforcement_message":{"type":"string"},"enforcement_conditions":{"type":"string"}}},"ToolApprovalResponse":{"type":"object","required":["object","request_id","as_of","data"],"properties":{"object":{"type":"string","enum":["tool_approval"]},"request_id":{"type":"string"},"as_of":{"type":"string","format":"date-time"},"data":{"$ref":"#/components/schemas/ToolApproval"}}},"ToolApproval":{"type":"object","required":["id","object","tool_id","status","sources"],"properties":{"id":{"type":"string"},"object":{"type":"string","enum":["tool_approval"]},"tool_id":{"type":"string"},"tool_type":{"type":"string"},"status":{"type":"string","enum":["approved","pending","unapproved","flagged","warn","blocked"]},"reviewed_at":{"type":"string","format":"date-time"},"review_note":{"type":"string"},"risk_level":{"type":"string"},"risk_flags":{"type":"array","items":{"type":"string"}},"enforcement_message":{"type":"string"},"enforcement_conditions":{"type":"string"},"first_detected_at":{"type":"string","format":"date-time"},"last_seen_at":{"type":"string","format":"date-time"},"sources":{"type":"array","items":{"type":"string"}}}},"SpendByTool":{"type":"object","required":["id","object","group","tool","cost","currency","users","sources"],"properties":{"id":{"type":"string"},"object":{"type":"string","enum":["spend"]},"group":{"type":"string","enum":["tool"]},"tool":{"type":"object","required":["id","name"],"properties":{"id":{"type":"string"},"name":{"type":"string"},"category":{"type":"string","nullable":true},"icon_url":{"type":"string","nullable":true}}},"cost":{"type":"number"},"currency":{"type":"string","enum":["usd"]},"users":{"type":"number"},"priced_accounts":{"type":"number"},"pricing_status":{"type":"string"},"issues":{"type":"array","items":{"type":"string"}},"cost_breakdown":{"type":"object","nullable":true},"sources":{"type":"array","items":{"type":"string"}}}},"SpendByDepartment":{"type":"object","required":["id","object","group","department","cost","currency","users","cost_per_person","sources"],"properties":{"id":{"type":"string"},"object":{"type":"string","enum":["spend"]},"group":{"type":"string","enum":["department"]},"department":{"type":"object","required":["id","name"],"properties":{"id":{"type":"string"},"name":{"type":"string"}}},"cost":{"type":"number"},"currency":{"type":"string","enum":["usd"]},"users":{"type":"number"},"tools":{"type":"number"},"cost_per_person":{"type":"number"},"subscription_spend":{"type":"number"},"usage_spend":{"type":"number"},"issue_count":{"type":"number"},"trend":{"type":"object"},"sources":{"type":"array","items":{"type":"string"}}}}}}}