{"components":{"securitySchemes":{"accountBearer":{"description":"Scoped account token from /settings/api-tokens. Only /api/v1 operations accept it; omit browser session cookies.","scheme":"bearer","type":"http"},"session":{"description":"Session cookie from OAuth login","in":"cookie","name":"session","type":"apiKey"}}},"externalDocs":{"description":"Headless stream creation for scripts and AI","url":"https://app.meshcast.io/docs/account-api"},"info":{"contact":{"name":"Meshcast Support","url":"https://app.meshcast.io"},"description":"\nMeshcast is a streaming platform with multi-destination restreaming,\ncloud transcoding, and VOD recording capabilities.\n\n## Authentication\nMost endpoints require authentication via session cookies.\nLogin via OAuth (Google/Discord) at `/auth/<provider>`.\nAccount automation uses scoped Bearer tokens on the explicitly documented `/api/v1` operations.\n\n## Rate Limiting\nAccount-token /api/v1 operations allow 120 authorized requests per account per minute. Honor Retry-After on HTTP 429.\n        ","title":"Meshcast API","version":"v0.0.148-12-g8a4f0a12"},"openapi":"3.0.3","paths":{"/api/billing/summary":{"get":{"description":"Returns subscription status and usage summary","responses":{"200":{"content":{"application/json":{"schema":{"properties":{"subscription":{"type":"object"},"tier":{"type":"string"},"transcode_usage":{"type":"object"}},"type":"object"}}},"description":"Billing summary"}},"security":[{"session":[]}],"summary":"Get billing summary","tags":["Billing"]}},"/api/monitoring/health":{"get":{"description":"Returns health status of all media servers","parameters":[{"description":"Filter by server tier (production, staging)","in":"query","name":"tier","schema":{"type":"string"}},{"description":"Health check timeout in seconds (5-30)","in":"query","name":"timeout","schema":{"default":10,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"healthy_count":{"type":"integer"},"servers":{"items":{"properties":{"checks":{"type":"object"},"healthy":{"type":"boolean"},"id":{"type":"string"},"name":{"type":"string"},"region":{"type":"string"}},"type":"object"},"type":"array"},"status":{"enum":["healthy","degraded","unhealthy"],"type":"string"},"unhealthy_count":{"type":"integer"}},"type":"object"}}},"description":"Server health status"}},"summary":"Media server health status","tags":["Monitoring"]}},"/api/monitoring/select":{"get":{"description":"Returns the best server based on health, load, and location","parameters":[{"description":"Preferred region","in":"query","name":"region_hint","schema":{"type":"string"}},{"description":"Comma-separated node IDs to exclude","in":"query","name":"exclude","schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"fallback":{"type":"array"},"selected":{"type":"object"}},"type":"object"}}},"description":"Selected server"},"503":{"description":"No servers available"}},"summary":"Select optimal server","tags":["Monitoring"]}},"/api/monitoring/servers":{"get":{"description":"Returns list of all configured media servers","parameters":[{"description":"Filter by tier","in":"query","name":"tier","schema":{"type":"string"}},{"description":"Filter by region","in":"query","name":"region","schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"servers":{"type":"array"},"total":{"type":"integer"}},"type":"object"}}},"description":"List of servers"}},"summary":"List media servers","tags":["Monitoring"]}},"/api/monitoring/version":{"get":{"description":"Returns version, git info, and environment details","responses":{"200":{"content":{"application/json":{"schema":{"properties":{"environment":{"type":"string"},"git":{"properties":{"branch":{"type":"string"},"commit":{"type":"string"},"message":{"type":"string"},"timestamp":{"type":"string"}},"type":"object"},"server_time":{"type":"string"},"service":{"example":"meshcast","type":"string"},"version":{"example":"2.1.0","type":"string"}},"type":"object"}}},"description":"Version information"}},"summary":"Get deployment version","tags":["Monitoring"]}},"/api/v1/account":{"get":{"description":"Account API tokens allow 120 requests per account per minute. JSON request bodies are limited to 16 KiB. Account tokens cannot be combined with a browser login cookie.","operationId":"account_get_account","responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"email":{"type":"string"},"id":{"type":"integer"},"tier":{"type":"string"}},"required":["id","email","tier"],"type":"object"}}},"description":"Success","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"X-Request-ID":{"description":"Server-generated correlation ID","schema":{"type":"string"}}}},"400":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"error":{"additionalProperties":false,"properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Invalid request","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"X-Request-ID":{"description":"Server-generated correlation ID","schema":{"type":"string"}}}},"401":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"error":{"additionalProperties":false,"properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Invalid, expired or revoked token","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"X-Request-ID":{"description":"Server-generated correlation ID","schema":{"type":"string"}}}},"403":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"error":{"additionalProperties":false,"properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Insufficient scope or resource restriction","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"X-Request-ID":{"description":"Server-generated correlation ID","schema":{"type":"string"}}}},"404":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"error":{"additionalProperties":false,"properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Owned resource not found","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"X-Request-ID":{"description":"Server-generated correlation ID","schema":{"type":"string"}}}},"409":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"error":{"additionalProperties":false,"properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Conflict; read current state before retrying","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"X-Request-ID":{"description":"Server-generated correlation ID","schema":{"type":"string"}}}},"413":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"error":{"additionalProperties":false,"properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Request body exceeds 16 KiB","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"X-Request-ID":{"description":"Server-generated correlation ID","schema":{"type":"string"}}}},"429":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"error":{"additionalProperties":false,"properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Rate limited; honor Retry-After","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"Retry-After":{"description":"Seconds until the account minute resets","schema":{"type":"integer"}},"X-Request-ID":{"description":"Server-generated correlation ID","schema":{"type":"string"}}}}},"security":[{"accountBearer":[]}],"summary":"Read your account","tags":["Account API"],"x-required-scopes":["account:read"]}},"/api/v1/capabilities":{"get":{"description":"Account API tokens allow 120 requests per account per minute. JSON request bodies are limited to 16 KiB. Account tokens cannot be combined with a browser login cookie.","operationId":"account_get_capabilities","responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"api_version":{"type":"string"},"resource_restrictions":{"additionalProperties":false,"properties":{"nodes":{"items":{"type":"string"},"type":"array"},"streams":{"items":{"type":"string"},"type":"array"}},"required":[],"type":"object"},"scopes":{"items":{"type":"string"},"type":"array"},"stream_control":{"additionalProperties":false,"properties":{"disable":{"type":"boolean"},"disconnect":{"type":"boolean"},"enable":{"type":"boolean"},"start_encoder":{"type":"boolean"}},"required":["enable","disable","disconnect","start_encoder"],"type":"object"}},"required":["api_version","scopes","resource_restrictions","stream_control"],"type":"object"}}},"description":"Success","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"X-Request-ID":{"description":"Server-generated correlation ID","schema":{"type":"string"}}}},"400":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"error":{"additionalProperties":false,"properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Invalid request","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"X-Request-ID":{"description":"Server-generated correlation ID","schema":{"type":"string"}}}},"401":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"error":{"additionalProperties":false,"properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Invalid, expired or revoked token","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"X-Request-ID":{"description":"Server-generated correlation ID","schema":{"type":"string"}}}},"403":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"error":{"additionalProperties":false,"properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Insufficient scope or resource restriction","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"X-Request-ID":{"description":"Server-generated correlation ID","schema":{"type":"string"}}}},"404":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"error":{"additionalProperties":false,"properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Owned resource not found","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"X-Request-ID":{"description":"Server-generated correlation ID","schema":{"type":"string"}}}},"409":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"error":{"additionalProperties":false,"properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Conflict; read current state before retrying","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"X-Request-ID":{"description":"Server-generated correlation ID","schema":{"type":"string"}}}},"413":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"error":{"additionalProperties":false,"properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Request body exceeds 16 KiB","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"X-Request-ID":{"description":"Server-generated correlation ID","schema":{"type":"string"}}}},"429":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"error":{"additionalProperties":false,"properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Rate limited; honor Retry-After","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"Retry-After":{"description":"Seconds until the account minute resets","schema":{"type":"integer"}},"X-Request-ID":{"description":"Server-generated correlation ID","schema":{"type":"string"}}}}},"security":[{"accountBearer":[]}],"summary":"Read allowed scopes and supported controls","tags":["Account API"],"x-required-scopes":["account:read"]}},"/api/v1/nodes":{"get":{"description":"Account API tokens allow 120 requests per account per minute. JSON request bodies are limited to 16 KiB. Account tokens cannot be combined with a browser login cookie.","operationId":"account_get_nodes","responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"nodes":{"items":{"additionalProperties":false,"properties":{"label":{"type":"string"},"node_id":{"type":"string"},"status":{"type":"string"},"url":{"type":"string"}},"required":["node_id","label","url","status"],"type":"object"},"type":"array"}},"required":["nodes"],"type":"object"}}},"description":"Success","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"X-Request-ID":{"description":"Server-generated correlation ID","schema":{"type":"string"}}}},"400":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"error":{"additionalProperties":false,"properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Invalid request","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"X-Request-ID":{"description":"Server-generated correlation ID","schema":{"type":"string"}}}},"401":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"error":{"additionalProperties":false,"properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Invalid, expired or revoked token","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"X-Request-ID":{"description":"Server-generated correlation ID","schema":{"type":"string"}}}},"403":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"error":{"additionalProperties":false,"properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Insufficient scope or resource restriction","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"X-Request-ID":{"description":"Server-generated correlation ID","schema":{"type":"string"}}}},"404":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"error":{"additionalProperties":false,"properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Owned resource not found","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"X-Request-ID":{"description":"Server-generated correlation ID","schema":{"type":"string"}}}},"409":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"error":{"additionalProperties":false,"properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Conflict; read current state before retrying","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"X-Request-ID":{"description":"Server-generated correlation ID","schema":{"type":"string"}}}},"413":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"error":{"additionalProperties":false,"properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Request body exceeds 16 KiB","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"X-Request-ID":{"description":"Server-generated correlation ID","schema":{"type":"string"}}}},"429":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"error":{"additionalProperties":false,"properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Rate limited; honor Retry-After","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"Retry-After":{"description":"Seconds until the account minute resets","schema":{"type":"integer"}},"X-Request-ID":{"description":"Server-generated correlation ID","schema":{"type":"string"}}}}},"security":[{"accountBearer":[]}],"summary":"List your personal nodes","tags":["Account API"],"x-required-scopes":["nodes:read"]},"post":{"description":"Account API tokens allow 120 requests per account per minute. JSON request bodies are limited to 16 KiB. Account tokens cannot be combined with a browser login cookie.","operationId":"account_post_nodes","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"hostname":{"type":"string"},"label":{"maxLength":50,"minLength":2,"type":"string"},"port":{"maximum":65535,"minimum":1,"type":"integer"},"scheme":{"enum":["https","http"],"type":"string"}},"required":["hostname","label"],"type":"object"}}},"required":true},"responses":{"201":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"server":{"additionalProperties":false,"properties":{"hostname":{"type":"string"},"label":{"type":"string"},"node_id":{"type":"string"},"port":{"type":"integer"},"status":{"type":"string"},"url":{"type":"string"}},"required":["node_id","label","url","status","hostname","port"],"type":"object"},"success":{"type":"boolean"}},"required":["success","server"],"type":"object"}}},"description":"Node registered; check readiness separately","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"X-Request-ID":{"description":"Server-generated correlation ID","schema":{"type":"string"}}}},"400":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"error":{"additionalProperties":false,"properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Invalid request","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"X-Request-ID":{"description":"Server-generated correlation ID","schema":{"type":"string"}}}},"401":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"error":{"additionalProperties":false,"properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Invalid, expired or revoked token","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"X-Request-ID":{"description":"Server-generated correlation ID","schema":{"type":"string"}}}},"403":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"error":{"additionalProperties":false,"properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Insufficient scope or resource restriction","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"X-Request-ID":{"description":"Server-generated correlation ID","schema":{"type":"string"}}}},"404":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"error":{"additionalProperties":false,"properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Owned resource not found","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"X-Request-ID":{"description":"Server-generated correlation ID","schema":{"type":"string"}}}},"409":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"error":{"additionalProperties":false,"properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Conflict; read current state before retrying","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"X-Request-ID":{"description":"Server-generated correlation ID","schema":{"type":"string"}}}},"413":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"error":{"additionalProperties":false,"properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Request body exceeds 16 KiB","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"X-Request-ID":{"description":"Server-generated correlation ID","schema":{"type":"string"}}}},"429":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"error":{"additionalProperties":false,"properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Rate limited; honor Retry-After","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"Retry-After":{"description":"Seconds until the account minute resets","schema":{"type":"integer"}},"X-Request-ID":{"description":"Server-generated correlation ID","schema":{"type":"string"}}}}},"security":[{"accountBearer":[]}],"summary":"Register a personal node; duplicates are rejected","tags":["Account API"],"x-required-scopes":["nodes:write"]}},"/api/v1/nodes/{node_id}":{"delete":{"description":"Account API tokens allow 120 requests per account per minute. JSON request bodies are limited to 16 KiB. Account tokens cannot be combined with a browser login cookie.","operationId":"account_delete_nodes_node_id","parameters":[{"in":"path","name":"node_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"success":{"type":"boolean"}},"required":["success"],"type":"object"}}},"description":"Success","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"X-Request-ID":{"description":"Server-generated correlation ID","schema":{"type":"string"}}}},"400":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"error":{"additionalProperties":false,"properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Invalid request","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"X-Request-ID":{"description":"Server-generated correlation ID","schema":{"type":"string"}}}},"401":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"error":{"additionalProperties":false,"properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Invalid, expired or revoked token","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"X-Request-ID":{"description":"Server-generated correlation ID","schema":{"type":"string"}}}},"403":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"error":{"additionalProperties":false,"properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Insufficient scope or resource restriction","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"X-Request-ID":{"description":"Server-generated correlation ID","schema":{"type":"string"}}}},"404":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"error":{"additionalProperties":false,"properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Owned resource not found","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"X-Request-ID":{"description":"Server-generated correlation ID","schema":{"type":"string"}}}},"409":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"error":{"additionalProperties":false,"properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Conflict; read current state before retrying","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"X-Request-ID":{"description":"Server-generated correlation ID","schema":{"type":"string"}}}},"413":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"error":{"additionalProperties":false,"properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Request body exceeds 16 KiB","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"X-Request-ID":{"description":"Server-generated correlation ID","schema":{"type":"string"}}}},"429":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"error":{"additionalProperties":false,"properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Rate limited; honor Retry-After","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"Retry-After":{"description":"Seconds until the account minute resets","schema":{"type":"integer"}},"X-Request-ID":{"description":"Server-generated correlation ID","schema":{"type":"string"}}}}},"security":[{"accountBearer":[]}],"summary":"Remove node authorization; existing connections may continue","tags":["Account API"],"x-required-scopes":["nodes:write"]}},"/api/v1/nodes/{node_id}/access":{"get":{"description":"Account API tokens allow 120 requests per account per minute. JSON request bodies are limited to 16 KiB. Account tokens cannot be combined with a browser login cookie.","operationId":"account_get_nodes_node_id_access","parameters":[{"in":"path","name":"node_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"events":{"items":{"additionalProperties":false,"properties":{"action":{"type":"string"},"created_at":{"description":"Unix seconds","type":"integer"},"outcome":{"type":"integer"},"stream_id":{"nullable":true,"type":"string"}},"required":["stream_id","action","outcome","created_at"],"type":"object"},"type":"array"}},"required":["events"],"type":"object"}}},"description":"Success","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"X-Request-ID":{"description":"Server-generated correlation ID","schema":{"type":"string"}}}},"400":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"error":{"additionalProperties":false,"properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Invalid request","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"X-Request-ID":{"description":"Server-generated correlation ID","schema":{"type":"string"}}}},"401":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"error":{"additionalProperties":false,"properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Invalid, expired or revoked token","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"X-Request-ID":{"description":"Server-generated correlation ID","schema":{"type":"string"}}}},"403":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"error":{"additionalProperties":false,"properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Insufficient scope or resource restriction","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"X-Request-ID":{"description":"Server-generated correlation ID","schema":{"type":"string"}}}},"404":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"error":{"additionalProperties":false,"properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Owned resource not found","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"X-Request-ID":{"description":"Server-generated correlation ID","schema":{"type":"string"}}}},"409":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"error":{"additionalProperties":false,"properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Conflict; read current state before retrying","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"X-Request-ID":{"description":"Server-generated correlation ID","schema":{"type":"string"}}}},"413":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"error":{"additionalProperties":false,"properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Request body exceeds 16 KiB","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"X-Request-ID":{"description":"Server-generated correlation ID","schema":{"type":"string"}}}},"429":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"error":{"additionalProperties":false,"properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Rate limited; honor Retry-After","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"Retry-After":{"description":"Seconds until the account minute resets","schema":{"type":"integer"}},"X-Request-ID":{"description":"Server-generated correlation ID","schema":{"type":"string"}}}}},"security":[{"accountBearer":[]}],"summary":"Read recent authorization outcomes, not guaranteed established sessions","tags":["Account API"],"x-required-scopes":["access:read"]}},"/api/v1/nodes/{node_id}/bundle":{"get":{"description":"Account API tokens allow 120 requests per account per minute. JSON request bodies are limited to 16 KiB. Account tokens cannot be combined with a browser login cookie.","operationId":"account_get_nodes_node_id_bundle","parameters":[{"in":"path","name":"node_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/zip":{"schema":{"format":"binary","type":"string"}}},"description":"Success","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"X-Request-ID":{"description":"Server-generated correlation ID","schema":{"type":"string"}}}},"400":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"error":{"additionalProperties":false,"properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Invalid request","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"X-Request-ID":{"description":"Server-generated correlation ID","schema":{"type":"string"}}}},"401":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"error":{"additionalProperties":false,"properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Invalid, expired or revoked token","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"X-Request-ID":{"description":"Server-generated correlation ID","schema":{"type":"string"}}}},"403":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"error":{"additionalProperties":false,"properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Insufficient scope or resource restriction","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"X-Request-ID":{"description":"Server-generated correlation ID","schema":{"type":"string"}}}},"404":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"error":{"additionalProperties":false,"properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Owned resource not found","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"X-Request-ID":{"description":"Server-generated correlation ID","schema":{"type":"string"}}}},"409":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"error":{"additionalProperties":false,"properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Conflict; read current state before retrying","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"X-Request-ID":{"description":"Server-generated correlation ID","schema":{"type":"string"}}}},"413":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"error":{"additionalProperties":false,"properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Request body exceeds 16 KiB","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"X-Request-ID":{"description":"Server-generated correlation ID","schema":{"type":"string"}}}},"429":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"error":{"additionalProperties":false,"properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Rate limited; honor Retry-After","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"Retry-After":{"description":"Seconds until the account minute resets","schema":{"type":"integer"}},"X-Request-ID":{"description":"Server-generated correlation ID","schema":{"type":"string"}}}}},"security":[{"accountBearer":[]}],"summary":"Download private ZIP; also requires credentials:read and no stream restriction","tags":["Account API"],"x-required-scopes":["nodes:write","credentials:read"]}},"/api/v1/nodes/{node_id}/check":{"post":{"description":"Account API tokens allow 120 requests per account per minute. JSON request bodies are limited to 16 KiB. Account tokens cannot be combined with a browser login cookie.","operationId":"account_post_nodes_node_id_check","parameters":[{"in":"path","name":"node_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"error":{"nullable":true,"type":"string"},"reachable":{"type":"boolean"},"status":{"type":"string"},"success":{"type":"boolean"}},"required":["success","reachable","error","status"],"type":"object"}}},"description":"Success","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"X-Request-ID":{"description":"Server-generated correlation ID","schema":{"type":"string"}}}},"400":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"error":{"additionalProperties":false,"properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Invalid request","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"X-Request-ID":{"description":"Server-generated correlation ID","schema":{"type":"string"}}}},"401":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"error":{"additionalProperties":false,"properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Invalid, expired or revoked token","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"X-Request-ID":{"description":"Server-generated correlation ID","schema":{"type":"string"}}}},"403":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"error":{"additionalProperties":false,"properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Insufficient scope or resource restriction","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"X-Request-ID":{"description":"Server-generated correlation ID","schema":{"type":"string"}}}},"404":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"error":{"additionalProperties":false,"properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Owned resource not found","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"X-Request-ID":{"description":"Server-generated correlation ID","schema":{"type":"string"}}}},"409":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"error":{"additionalProperties":false,"properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Conflict; read current state before retrying","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"X-Request-ID":{"description":"Server-generated correlation ID","schema":{"type":"string"}}}},"413":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"error":{"additionalProperties":false,"properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Request body exceeds 16 KiB","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"X-Request-ID":{"description":"Server-generated correlation ID","schema":{"type":"string"}}}},"429":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"error":{"additionalProperties":false,"properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Rate limited; honor Retry-After","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"Retry-After":{"description":"Seconds until the account minute resets","schema":{"type":"integer"}},"X-Request-ID":{"description":"Server-generated correlation ID","schema":{"type":"string"}}}}},"security":[{"accountBearer":[]}],"summary":"Check TCP reachability, not streaming readiness","tags":["Account API"],"x-required-scopes":["nodes:write"]}},"/api/v1/nodes/{node_id}/select":{"put":{"description":"Account API tokens allow 120 requests per account per minute. JSON request bodies are limited to 16 KiB. Account tokens cannot be combined with a browser login cookie.","operationId":"account_put_nodes_node_id_select","parameters":[{"in":"path","name":"node_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"selected_node":{"type":"string"}},"required":["selected_node"],"type":"object"}}},"description":"Success","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"X-Request-ID":{"description":"Server-generated correlation ID","schema":{"type":"string"}}}},"400":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"error":{"additionalProperties":false,"properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Invalid request","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"X-Request-ID":{"description":"Server-generated correlation ID","schema":{"type":"string"}}}},"401":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"error":{"additionalProperties":false,"properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Invalid, expired or revoked token","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"X-Request-ID":{"description":"Server-generated correlation ID","schema":{"type":"string"}}}},"403":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"error":{"additionalProperties":false,"properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Insufficient scope or resource restriction","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"X-Request-ID":{"description":"Server-generated correlation ID","schema":{"type":"string"}}}},"404":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"error":{"additionalProperties":false,"properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Owned resource not found","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"X-Request-ID":{"description":"Server-generated correlation ID","schema":{"type":"string"}}}},"409":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"error":{"additionalProperties":false,"properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Conflict; read current state before retrying","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"X-Request-ID":{"description":"Server-generated correlation ID","schema":{"type":"string"}}}},"413":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"error":{"additionalProperties":false,"properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Request body exceeds 16 KiB","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"X-Request-ID":{"description":"Server-generated correlation ID","schema":{"type":"string"}}}},"429":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"error":{"additionalProperties":false,"properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Rate limited; honor Retry-After","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"Retry-After":{"description":"Seconds until the account minute resets","schema":{"type":"integer"}},"X-Request-ID":{"description":"Server-generated correlation ID","schema":{"type":"string"}}}}},"security":[{"accountBearer":[]}],"summary":"Select an active owned personal node for account routing","tags":["Account API"],"x-required-scopes":["nodes:write"]}},"/api/v1/nodes/{node_id}/status":{"get":{"description":"Account API tokens allow 120 requests per account per minute. JSON request bodies are limited to 16 KiB. Account tokens cannot be combined with a browser login cookie.","operationId":"account_get_nodes_node_id_status","parameters":[{"in":"path","name":"node_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"last_report_at":{"description":"Unix milliseconds, or null before the first report","nullable":true,"type":"integer"},"source":{"type":"string"},"status":{"enum":["reporting","stale","unavailable"],"type":"string"},"streams":{"items":{"additionalProperties":false,"properties":{"protocol":{"enum":["rtmp","srt","webrtc"],"type":"string"},"session_id":{"type":"string"},"stream_id":{"type":"string"},"viewers":{"type":"integer"}},"required":["stream_id","session_id","protocol","viewers"],"type":"object"},"nullable":true,"type":"array"}},"required":["status","streams","last_report_at","source"],"type":"object"}}},"description":"Success","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"X-Request-ID":{"description":"Server-generated correlation ID","schema":{"type":"string"}}}},"400":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"error":{"additionalProperties":false,"properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Invalid request","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"X-Request-ID":{"description":"Server-generated correlation ID","schema":{"type":"string"}}}},"401":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"error":{"additionalProperties":false,"properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Invalid, expired or revoked token","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"X-Request-ID":{"description":"Server-generated correlation ID","schema":{"type":"string"}}}},"403":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"error":{"additionalProperties":false,"properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Insufficient scope or resource restriction","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"X-Request-ID":{"description":"Server-generated correlation ID","schema":{"type":"string"}}}},"404":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"error":{"additionalProperties":false,"properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Owned resource not found","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"X-Request-ID":{"description":"Server-generated correlation ID","schema":{"type":"string"}}}},"409":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"error":{"additionalProperties":false,"properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Conflict; read current state before retrying","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"X-Request-ID":{"description":"Server-generated correlation ID","schema":{"type":"string"}}}},"413":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"error":{"additionalProperties":false,"properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Request body exceeds 16 KiB","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"X-Request-ID":{"description":"Server-generated correlation ID","schema":{"type":"string"}}}},"429":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"error":{"additionalProperties":false,"properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Rate limited; honor Retry-After","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"Retry-After":{"description":"Seconds until the account minute resets","schema":{"type":"integer"}},"X-Request-ID":{"description":"Server-generated correlation ID","schema":{"type":"string"}}}}},"security":[{"accountBearer":[]}],"summary":"Read recent node-reported streams; stale data returns streams=null","tags":["Account API"],"x-required-scopes":["nodes:read"]}},"/api/v1/nodes/{node_id}/usage":{"get":{"description":"Account API tokens allow 120 requests per account per minute. JSON request bodies are limited to 16 KiB. Account tokens cannot be combined with a browser login cookie.","operationId":"account_get_nodes_node_id_usage","parameters":[{"in":"path","name":"node_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"days":{"items":{"additionalProperties":false,"properties":{"bytes_in":{"type":"integer"},"bytes_out":{"type":"integer"},"coverage_gaps":{"type":"integer"},"day":{"format":"date","type":"string"},"stream_id":{"type":"string"}},"required":["stream_id","day","bytes_in","bytes_out","coverage_gaps"],"type":"object"},"type":"array"},"hosted_allowance_charged":{"type":"boolean"},"measurement":{"type":"string"},"source":{"type":"string"}},"required":["source","measurement","hosted_allowance_charged","days"],"type":"object"}}},"description":"Success","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"X-Request-ID":{"description":"Server-generated correlation ID","schema":{"type":"string"}}}},"400":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"error":{"additionalProperties":false,"properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Invalid request","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"X-Request-ID":{"description":"Server-generated correlation ID","schema":{"type":"string"}}}},"401":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"error":{"additionalProperties":false,"properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Invalid, expired or revoked token","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"X-Request-ID":{"description":"Server-generated correlation ID","schema":{"type":"string"}}}},"403":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"error":{"additionalProperties":false,"properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Insufficient scope or resource restriction","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"X-Request-ID":{"description":"Server-generated correlation ID","schema":{"type":"string"}}}},"404":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"error":{"additionalProperties":false,"properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Owned resource not found","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"X-Request-ID":{"description":"Server-generated correlation ID","schema":{"type":"string"}}}},"409":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"error":{"additionalProperties":false,"properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Conflict; read current state before retrying","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"X-Request-ID":{"description":"Server-generated correlation ID","schema":{"type":"string"}}}},"413":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"error":{"additionalProperties":false,"properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Request body exceeds 16 KiB","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"X-Request-ID":{"description":"Server-generated correlation ID","schema":{"type":"string"}}}},"429":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"error":{"additionalProperties":false,"properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Rate limited; honor Retry-After","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"Retry-After":{"description":"Seconds until the account minute resets","schema":{"type":"integer"}},"X-Request-ID":{"description":"Server-generated correlation ID","schema":{"type":"string"}}}}},"security":[{"accountBearer":[]}],"summary":"Read observed byte deltas and coverage gaps; never hosted billing","tags":["Account API"],"x-required-scopes":["usage:read"]}},"/api/v1/streams":{"get":{"description":"Account API tokens allow 120 requests per account per minute. JSON request bodies are limited to 16 KiB. Account tokens cannot be combined with a browser login cookie.","operationId":"account_get_streams","responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"streams":{"items":{"additionalProperties":false,"properties":{"created_at":{"type":"string"},"is_active":{"enum":[0,1],"type":"integer"},"label":{"nullable":true,"type":"string"},"stream_id":{"type":"string"}},"required":["stream_id","label","created_at","is_active"],"type":"object"},"type":"array"}},"required":["streams"],"type":"object"}}},"description":"Success","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"X-Request-ID":{"description":"Server-generated correlation ID","schema":{"type":"string"}}}},"400":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"error":{"additionalProperties":false,"properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Invalid request","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"X-Request-ID":{"description":"Server-generated correlation ID","schema":{"type":"string"}}}},"401":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"error":{"additionalProperties":false,"properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Invalid, expired or revoked token","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"X-Request-ID":{"description":"Server-generated correlation ID","schema":{"type":"string"}}}},"403":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"error":{"additionalProperties":false,"properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Insufficient scope or resource restriction","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"X-Request-ID":{"description":"Server-generated correlation ID","schema":{"type":"string"}}}},"404":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"error":{"additionalProperties":false,"properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Owned resource not found","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"X-Request-ID":{"description":"Server-generated correlation ID","schema":{"type":"string"}}}},"409":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"error":{"additionalProperties":false,"properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Conflict; read current state before retrying","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"X-Request-ID":{"description":"Server-generated correlation ID","schema":{"type":"string"}}}},"413":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"error":{"additionalProperties":false,"properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Request body exceeds 16 KiB","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"X-Request-ID":{"description":"Server-generated correlation ID","schema":{"type":"string"}}}},"429":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"error":{"additionalProperties":false,"properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Rate limited; honor Retry-After","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"Retry-After":{"description":"Seconds until the account minute resets","schema":{"type":"integer"}},"X-Request-ID":{"description":"Server-generated correlation ID","schema":{"type":"string"}}}}},"security":[{"accountBearer":[]}],"summary":"List your stream metadata without publishing secrets","tags":["Account API"],"x-required-scopes":["streams:read"]},"post":{"description":"Account API tokens allow 120 requests per account per minute. JSON request bodies are limited to 16 KiB. Account tokens cannot be combined with a browser login cookie. Idempotency keys are retained for seven days, capped at 1000 creations per account during that period. Reuse after expiry is a new request. Use a fresh random key for each intended creation.","operationId":"account_post_streams","parameters":[{"in":"header","name":"Idempotency-Key","required":true,"schema":{"maxLength":100,"minLength":8,"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"label":{"maxLength":100,"minLength":1,"type":"string"}},"required":["label"],"type":"object"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"created_at":{"type":"string"},"is_active":{"enum":[0,1],"type":"integer"},"label":{"nullable":true,"type":"string"},"stream_id":{"type":"string"}},"required":["stream_id","label","created_at","is_active"],"type":"object"}}},"description":"Success","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"X-Request-ID":{"description":"Server-generated correlation ID","schema":{"type":"string"}}}},"201":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"created_at":{"type":"string"},"is_active":{"enum":[0,1],"type":"integer"},"label":{"nullable":true,"type":"string"},"stream_id":{"type":"string"}},"required":["stream_id","label","created_at","is_active"],"type":"object"}}},"description":"Created; response excludes publish credentials","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"X-Request-ID":{"description":"Server-generated correlation ID","schema":{"type":"string"}}}},"400":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"error":{"additionalProperties":false,"properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Invalid request","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"X-Request-ID":{"description":"Server-generated correlation ID","schema":{"type":"string"}}}},"401":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"error":{"additionalProperties":false,"properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Invalid, expired or revoked token","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"X-Request-ID":{"description":"Server-generated correlation ID","schema":{"type":"string"}}}},"403":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"error":{"additionalProperties":false,"properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Insufficient scope or resource restriction","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"X-Request-ID":{"description":"Server-generated correlation ID","schema":{"type":"string"}}}},"404":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"error":{"additionalProperties":false,"properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Owned resource not found","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"X-Request-ID":{"description":"Server-generated correlation ID","schema":{"type":"string"}}}},"409":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"error":{"additionalProperties":false,"properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Conflict; read current state before retrying","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"X-Request-ID":{"description":"Server-generated correlation ID","schema":{"type":"string"}}}},"413":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"error":{"additionalProperties":false,"properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Request body exceeds 16 KiB","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"X-Request-ID":{"description":"Server-generated correlation ID","schema":{"type":"string"}}}},"429":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"error":{"additionalProperties":false,"properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Rate limited; honor Retry-After","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"Retry-After":{"description":"Seconds until the account minute resets","schema":{"type":"integer"}},"X-Request-ID":{"description":"Server-generated correlation ID","schema":{"type":"string"}}}}},"security":[{"accountBearer":[]}],"summary":"Create a stream with an Idempotency-Key","tags":["Account API"],"x-required-scopes":["streams:write"]}},"/api/v1/streams/{stream_id}":{"patch":{"description":"Account API tokens allow 120 requests per account per minute. JSON request bodies are limited to 16 KiB. Account tokens cannot be combined with a browser login cookie.","operationId":"account_patch_streams_stream_id","parameters":[{"in":"path","name":"stream_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"label":{"maxLength":100,"minLength":1,"type":"string"}},"required":["label"],"type":"object"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"created_at":{"type":"string"},"is_active":{"enum":[0,1],"type":"integer"},"label":{"nullable":true,"type":"string"},"stream_id":{"type":"string"}},"required":["stream_id","label","created_at","is_active"],"type":"object"}}},"description":"Success","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"X-Request-ID":{"description":"Server-generated correlation ID","schema":{"type":"string"}}}},"400":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"error":{"additionalProperties":false,"properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Invalid request","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"X-Request-ID":{"description":"Server-generated correlation ID","schema":{"type":"string"}}}},"401":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"error":{"additionalProperties":false,"properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Invalid, expired or revoked token","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"X-Request-ID":{"description":"Server-generated correlation ID","schema":{"type":"string"}}}},"403":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"error":{"additionalProperties":false,"properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Insufficient scope or resource restriction","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"X-Request-ID":{"description":"Server-generated correlation ID","schema":{"type":"string"}}}},"404":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"error":{"additionalProperties":false,"properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Owned resource not found","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"X-Request-ID":{"description":"Server-generated correlation ID","schema":{"type":"string"}}}},"409":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"error":{"additionalProperties":false,"properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Conflict; read current state before retrying","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"X-Request-ID":{"description":"Server-generated correlation ID","schema":{"type":"string"}}}},"413":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"error":{"additionalProperties":false,"properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Request body exceeds 16 KiB","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"X-Request-ID":{"description":"Server-generated correlation ID","schema":{"type":"string"}}}},"429":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"error":{"additionalProperties":false,"properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Rate limited; honor Retry-After","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"Retry-After":{"description":"Seconds until the account minute resets","schema":{"type":"integer"}},"X-Request-ID":{"description":"Server-generated correlation ID","schema":{"type":"string"}}}}},"security":[{"accountBearer":[]}],"summary":"Rename a stream","tags":["Account API"],"x-required-scopes":["streams:write"]}},"/api/v1/streams/{stream_id}/credentials":{"get":{"description":"Account API tokens allow 120 requests per account per minute. JSON request bodies are limited to 16 KiB. Account tokens cannot be combined with a browser login cookie.","operationId":"account_get_streams_stream_id_credentials","parameters":[{"in":"path","name":"stream_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"publish_key":{"type":"string"},"stream_id":{"type":"string"}},"required":["stream_id","publish_key"],"type":"object"}}},"description":"Success","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"ETag":{"description":"Send this value unchanged as If-Match when rotating","schema":{"type":"string"}},"X-Request-ID":{"description":"Server-generated correlation ID","schema":{"type":"string"}}}},"400":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"error":{"additionalProperties":false,"properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Invalid request","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"X-Request-ID":{"description":"Server-generated correlation ID","schema":{"type":"string"}}}},"401":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"error":{"additionalProperties":false,"properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Invalid, expired or revoked token","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"X-Request-ID":{"description":"Server-generated correlation ID","schema":{"type":"string"}}}},"403":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"error":{"additionalProperties":false,"properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Insufficient scope or resource restriction","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"X-Request-ID":{"description":"Server-generated correlation ID","schema":{"type":"string"}}}},"404":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"error":{"additionalProperties":false,"properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Owned resource not found","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"X-Request-ID":{"description":"Server-generated correlation ID","schema":{"type":"string"}}}},"409":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"error":{"additionalProperties":false,"properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Conflict; read current state before retrying","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"X-Request-ID":{"description":"Server-generated correlation ID","schema":{"type":"string"}}}},"413":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"error":{"additionalProperties":false,"properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Request body exceeds 16 KiB","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"X-Request-ID":{"description":"Server-generated correlation ID","schema":{"type":"string"}}}},"429":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"error":{"additionalProperties":false,"properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Rate limited; honor Retry-After","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"Retry-After":{"description":"Seconds until the account minute resets","schema":{"type":"integer"}},"X-Request-ID":{"description":"Server-generated correlation ID","schema":{"type":"string"}}}}},"security":[{"accountBearer":[]}],"summary":"Read publishing credentials and their ETag","tags":["Account API"],"x-required-scopes":["credentials:read"]},"put":{"description":"Account API tokens allow 120 requests per account per minute. JSON request bodies are limited to 16 KiB. Account tokens cannot be combined with a browser login cookie.","operationId":"account_put_streams_stream_id_credentials","parameters":[{"in":"path","name":"stream_id","required":true,"schema":{"type":"string"}},{"description":"ETag from credentials GET","in":"header","name":"If-Match","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"existing_connections":{"enum":["unchanged"],"type":"string"},"rotated":{"type":"boolean"},"stream_id":{"type":"string"}},"required":["stream_id","rotated","existing_connections"],"type":"object"}}},"description":"Success","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"X-Request-ID":{"description":"Server-generated correlation ID","schema":{"type":"string"}}}},"400":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"error":{"additionalProperties":false,"properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Invalid request","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"X-Request-ID":{"description":"Server-generated correlation ID","schema":{"type":"string"}}}},"401":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"error":{"additionalProperties":false,"properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Invalid, expired or revoked token","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"X-Request-ID":{"description":"Server-generated correlation ID","schema":{"type":"string"}}}},"403":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"error":{"additionalProperties":false,"properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Insufficient scope or resource restriction","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"X-Request-ID":{"description":"Server-generated correlation ID","schema":{"type":"string"}}}},"404":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"error":{"additionalProperties":false,"properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Owned resource not found","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"X-Request-ID":{"description":"Server-generated correlation ID","schema":{"type":"string"}}}},"409":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"error":{"additionalProperties":false,"properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Conflict; read current state before retrying","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"X-Request-ID":{"description":"Server-generated correlation ID","schema":{"type":"string"}}}},"413":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"error":{"additionalProperties":false,"properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Request body exceeds 16 KiB","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"X-Request-ID":{"description":"Server-generated correlation ID","schema":{"type":"string"}}}},"429":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"error":{"additionalProperties":false,"properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Rate limited; honor Retry-After","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"Retry-After":{"description":"Seconds until the account minute resets","schema":{"type":"integer"}},"X-Request-ID":{"description":"Server-generated correlation ID","schema":{"type":"string"}}}}},"security":[{"accountBearer":[]}],"summary":"Rotate with If-Match; retrying an old ETag returns 409","tags":["Account API"],"x-required-scopes":["credentials:rotate"]}},"/api/v1/streams/{stream_id}/publishing":{"put":{"description":"Account API tokens allow 120 requests per account per minute. JSON request bodies are limited to 16 KiB. Account tokens cannot be combined with a browser login cookie.","operationId":"account_put_streams_stream_id_publishing","parameters":[{"in":"path","name":"stream_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"enabled":{"type":"boolean"}},"required":["enabled"],"type":"object"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"enabled":{"type":"boolean"},"existing_connections":{"enum":["unchanged"],"type":"string"},"stream_id":{"type":"string"}},"required":["stream_id","enabled","existing_connections"],"type":"object"}}},"description":"Success","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"X-Request-ID":{"description":"Server-generated correlation ID","schema":{"type":"string"}}}},"400":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"error":{"additionalProperties":false,"properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Invalid request","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"X-Request-ID":{"description":"Server-generated correlation ID","schema":{"type":"string"}}}},"401":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"error":{"additionalProperties":false,"properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Invalid, expired or revoked token","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"X-Request-ID":{"description":"Server-generated correlation ID","schema":{"type":"string"}}}},"403":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"error":{"additionalProperties":false,"properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Insufficient scope or resource restriction","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"X-Request-ID":{"description":"Server-generated correlation ID","schema":{"type":"string"}}}},"404":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"error":{"additionalProperties":false,"properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Owned resource not found","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"X-Request-ID":{"description":"Server-generated correlation ID","schema":{"type":"string"}}}},"409":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"error":{"additionalProperties":false,"properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Conflict; read current state before retrying","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"X-Request-ID":{"description":"Server-generated correlation ID","schema":{"type":"string"}}}},"413":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"error":{"additionalProperties":false,"properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Request body exceeds 16 KiB","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"X-Request-ID":{"description":"Server-generated correlation ID","schema":{"type":"string"}}}},"429":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"error":{"additionalProperties":false,"properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"}}},"description":"Rate limited; honor Retry-After","headers":{"Cache-Control":{"schema":{"enum":["no-store"],"type":"string"}},"Retry-After":{"description":"Seconds until the account minute resets","schema":{"type":"integer"}},"X-Request-ID":{"description":"Server-generated correlation ID","schema":{"type":"string"}}}}},"security":[{"accountBearer":[]}],"summary":"Enable or disable future publishing; existing connections are unchanged","tags":["Account API"],"x-required-scopes":["streams:control"]}},"/health":{"get":{"description":"Returns application health status for load balancers","responses":{"200":{"content":{"application/json":{"schema":{"properties":{"service":{"example":"meshcast","type":"string"},"status":{"example":"healthy","type":"string"},"version":{"example":"2.1.0","type":"string"}},"type":"object"}}},"description":"Healthy"}},"summary":"Application health check","tags":["Monitoring"]}},"/recordings/vod":{"get":{"description":"Returns all recordings for the authenticated user","responses":{"200":{"content":{"application/json":{"schema":{"properties":{"quota":{"type":"object"},"recordings":{"type":"array"}},"type":"object"}}},"description":"List of recordings"}},"security":[{"session":[]}],"summary":"List VOD recordings","tags":["Recording"]}},"/stream-keys":{"get":{"description":"Returns all stream keys for the authenticated user","responses":{"200":{"content":{"application/json":{"schema":{"properties":{"keys":{"type":"array"},"limits":{"type":"object"},"tier":{"type":"string"}},"type":"object"}}},"description":"List of stream keys"},"401":{"description":"Authentication required"}},"security":[{"session":[]}],"summary":"List stream keys","tags":["Streaming"]}},"/transcode/sessions":{"post":{"description":"Start a new cloud transcoding session","requestBody":{"content":{"application/json":{"schema":{"properties":{"outputs":{"items":{"properties":{"name":{"type":"string"},"platform":{"type":"string"},"rtmp_url":{"type":"string"},"stream_key":{"type":"string"}},"type":"object"},"type":"array"},"quality_preset":{"default":"standard","enum":["low","standard","high"],"type":"string"}},"required":["outputs"],"type":"object"}}},"required":true},"responses":{"200":{"description":"Session created"},"400":{"description":"Invalid request"},"403":{"description":"Tier access denied"},"503":{"description":"Service unavailable"}},"security":[{"session":[]}],"summary":"Create transcode session","tags":["Transcode"]}},"/transcode/status":{"get":{"description":"Returns availability, pricing, and quality presets","responses":{"200":{"content":{"application/json":{"schema":{"properties":{"available":{"type":"boolean"},"hourly_rate_cents":{"example":200,"type":"integer"},"max_outputs":{"type":"integer"},"quality_presets":{"type":"object"},"tier_access":{"type":"boolean"}},"type":"object"}}},"description":"Service status"}},"security":[{"session":[]}],"summary":"Get transcode service status","tags":["Transcode"]}}},"servers":[{"description":"Production server","url":"https://app.meshcast.io"}],"tags":[{"description":"Server health and status","name":"Monitoring"},{"description":"Stream keys and publishing","name":"Streaming"},{"description":"Cloud transcoding sessions","name":"Transcode"},{"description":"VOD recording management","name":"Recording"},{"description":"Subscription and payment","name":"Billing"},{"description":"Owner-scoped API for scripts and AI","name":"Account API"}]}
