{"openapi":"3.1.0","info":{"title":"Land of Assets API","description":"Land of Assets API Reference","version":"0.0.1","contact":{"name":"API Support","email":"ben@landofassets.com","url":"https://github.com/landofassets"},"x-logo":{"url":"https://redocly.github.io/redoc/petstore-logo.png","altText":"Petstore logo"},"x-dark-logo":{"url":"/img/petstore-logo-dark.png","altText":"Petstore dark logo"},"license":{"name":"Apache 2.0","url":"http://www.apache.org/licenses/LICENSE-2.0.html"}},"components":{"securitySchemes":{"jwtToken":{"type":"http","scheme":"bearer","bearerFormat":"JWT"},"frontendToken":{"type":"apiKey","in":"query","name":"frontendToken"},"sessionToken":{"type":"http","scheme":"bearer","bearerFormat":""},"secretToken":{"type":"http","scheme":"bearer","bearerFormat":""},"anonymous":{"type":"http","scheme":"bearer","bearerFormat":"","description":"Anonymous access (no authentication required)"}},"schemas":{}},"paths":{"/api-tokens":{"get":{"operationId":"list-api-tokens","summary":"List API tokens","tags":["api-tokens"],"description":"List API tokens for the organization or project.","parameters":[{"schema":{"type":"integer","minimum":0,"maximum":9007199254740991},"in":"query","name":"pageOffset","required":false,"description":"The number of items to skip before starting to return results. Must be 0 or greater."},{"schema":{"type":"integer","minimum":1,"maximum":1000},"in":"query","name":"pageSize","required":false,"description":"The maximum number of items to return. Must be between 1 and 1000."},{"schema":{"type":"string","enum":["createdAt","updatedAt","name","lastUsedAt","usedCount"]},"in":"query","name":"sortBy","required":false,"description":"The field to sort by"},{"schema":{"type":"string","enum":["asc","desc"]},"in":"query","name":"sortDir","required":false,"description":"The direction to sort by"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"query","name":"orgName","required":true,"description":"The name of the organization"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"query","name":"projectName","required":true,"description":"The name of the project"},{"schema":{"type":"string","enum":["SECRET","FRONTEND"]},"in":"query","name":"tokenType","required":false,"description":"Filter by token type (SECRET or FRONTEND)"}],"security":[{"jwtToken":[]},{"secretToken":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"rows":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"name":{"type":"string"},"description":{"type":"string"},"token":{"default":"","type":"string"},"type":{"type":"string","enum":["SECRET","FRONTEND"]},"domainWhitelist":{"type":["null","string"]},"lastUsedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]},"usedCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"userId":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"userName":{"type":"string"}},"required":["id","name","description","token","type","domainWhitelist","lastUsedAt","usedCount","createdAt","updatedAt","userId","userName"],"additionalProperties":false}},"rowCount":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["rows","rowCount"],"additionalProperties":false}}}},"400":{"description":"Bad request response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}}}},"401":{"description":"Unauthorized response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Unauthorized response"}}}},"403":{"description":"Forbidden response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Forbidden response"}}}},"404":{"description":"Not found response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Not found response"}}}}}},"post":{"operationId":"create-api-token","summary":"Create API token","tags":["api-tokens"],"description":"Create an API token for a service account.  The API token enables programmatic access to the API on behalf of the service account.","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"serviceAccountName":{"type":"string","minLength":1,"maxLength":30,"allOf":[{"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},{"pattern":"^sa-"}],"description":"The name of the service account"},"name":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$","description":"The name for the API token"},"description":{"description":"Optional description for the token","type":"string","maxLength":1024},"type":{"type":"string","enum":["SECRET","FRONTEND"],"description":"Token type: SECRET (server-side) or FRONTEND (browser)"},"domainWhitelist":{"description":"Optional comma-separated list of allowed domains (for FRONTEND tokens)","type":"string","maxLength":1024,"pattern":"^[a-zA-Z0-9.,\\s]+$"}},"required":["serviceAccountName","name","type"],"additionalProperties":false}}},"required":true},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"query","name":"orgName","required":true,"description":"The name of the organization"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"query","name":"projectName","required":true,"description":"The name of the project"}],"security":[{"jwtToken":[]},{"secretToken":[]}],"responses":{"201":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"name":{"type":"string"},"description":{"type":"string"},"token":{"default":"","type":"string"},"type":{"type":"string","enum":["SECRET","FRONTEND"]},"domainWhitelist":{"type":["null","string"]},"lastUsedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]},"usedCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"userId":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"userName":{"type":"string"}},"required":["id","name","description","token","type","domainWhitelist","lastUsedAt","usedCount","createdAt","updatedAt","userId","userName"],"additionalProperties":false}}}},"400":{"description":"Bad request response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}}}},"401":{"description":"Unauthorized response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Unauthorized response"}}}},"403":{"description":"Forbidden response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Forbidden response"}}}},"404":{"description":"Not found response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Not found response"}}}}}}},"/avatars":{"delete":{"operationId":"delete-org-avatar","summary":"Delete avatar","tags":["avatars"],"description":"Delete the current avatar for the given organization or project.","parameters":[{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"query","name":"orgName","required":true,"description":"The name of the organization"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"query","name":"projectName","required":true,"description":"The name of the project"}],"security":[{"jwtToken":[]},{"secretToken":[]}],"responses":{"204":{"description":"No content response","content":{"application/json":{"schema":{"type":"object","properties":{},"additionalProperties":false,"description":"No content response"}}}},"400":{"description":"Bad request response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}}}},"401":{"description":"Unauthorized response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Unauthorized response"}}}},"403":{"description":"Forbidden response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Forbidden response"}}}},"404":{"description":"Not found response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Not found response"}}}}}},"get":{"operationId":"get-avatar","summary":"Get avatar","tags":["avatars"],"description":"Get the current avatar for the given organization or project.","parameters":[{"schema":{"type":"string","enum":["jpg","png","webp","avif"]},"in":"query","name":"format","required":false,"description":"The image format to transform to"},{"schema":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"in":"query","name":"width","required":false,"description":"The width of the resized image"},{"schema":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"in":"query","name":"height","required":false,"description":"The height of the resized image"},{"schema":{"type":"integer","minimum":1,"maximum":100},"in":"query","name":"quality","required":false,"description":"The quality of the resized image"},{"schema":{"type":"string","format":"uri"},"in":"query","name":"redirectOnNotFound","required":false},{"schema":{"type":"string","maxLength":256},"in":"query","name":"cacheKey","required":false},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"query","name":"orgName","required":true,"description":"The name of the organization"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"query","name":"projectName","required":true,"description":"The name of the project"}],"security":[],"responses":{"200":{"description":"Successful response","content":{"image/png":{"schema":{"description":"Successful response","type":"string","format":"binary"}},"image/jpeg":{"schema":{"description":"Successful response","type":"string","format":"binary"}},"image/gif":{"schema":{"description":"Successful response","type":"string","format":"binary"}},"image/webp":{"schema":{"description":"Successful response","type":"string","format":"binary"}}}},"400":{"description":"Bad request response","content":{"image/png":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}},"image/jpeg":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}},"image/gif":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}},"image/webp":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}}}},"403":{"description":"Forbidden response","content":{"image/png":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Forbidden response"}},"image/jpeg":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Forbidden response"}},"image/gif":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Forbidden response"}},"image/webp":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Forbidden response"}}}},"404":{"description":"Not found response","content":{"image/png":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Not found response"}},"image/jpeg":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Not found response"}},"image/gif":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Not found response"}},"image/webp":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Not found response"}}}}}},"post":{"operationId":"upload-avatar","summary":"Upload avatar","tags":["avatars"],"description":"Upload a new avatar for the given organization or project.","parameters":[{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"query","name":"orgName","required":true,"description":"The name of the organization"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"query","name":"projectName","required":true,"description":"The name of the project"}],"security":[{"jwtToken":[]},{"secretToken":[]}],"responses":{"204":{"description":"No content response","content":{"application/json":{"schema":{"type":"object","properties":{},"additionalProperties":false,"description":"No content response"}}}},"400":{"description":"Bad request response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}}}},"401":{"description":"Unauthorized response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Unauthorized response"}}}},"403":{"description":"Forbidden response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Forbidden response"}}}},"404":{"description":"Not found response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Not found response"}}}},"413":{"description":"Bad request response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}}}}}}},"/assets":{"get":{"operationId":"list-assets","summary":"List assets","tags":["assets"],"description":"List assets, optionally filtered by organization, project, user, visibility, or search text. Unauthenticated users can only see public assets.","parameters":[{"schema":{"type":"integer","minimum":0,"maximum":9007199254740991},"in":"query","name":"pageOffset","required":false,"description":"The number of items to skip before starting to return results. Must be 0 or greater."},{"schema":{"type":"integer","minimum":1,"maximum":1000},"in":"query","name":"pageSize","required":false,"description":"The maximum number of items to return. Must be between 1 and 1000."},{"schema":{"type":"string","enum":["createdAt","updatedAt","name","likeCount","shareCount"]},"in":"query","name":"sortBy","required":false,"description":"The field to sort by"},{"schema":{"type":"string","enum":["asc","desc"]},"in":"query","name":"sortDir","required":false,"description":"The direction to sort by"},{"schema":{"type":"string","enum":["PRIVATE","UNLISTED","PUBLIC"]},"in":"query","name":"visibility","required":false,"description":"Filter by visibility (PUBLIC or PRIVATE)"},{"schema":{"type":"string","maxLength":256},"in":"query","name":"searchText","required":false,"description":"Search text to filter assets by name or description"},{"schema":{"type":"string","enum":["MODEL","MATERIAL","IMAGE","SCENE","ENVMAP","CAD","LIGHT"]},"in":"query","name":"type","required":false,"description":"Filter by asset type"},{"schema":{"type":"string","maxLength":100},"in":"query","name":"userName","required":false,"description":"Filter by username"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"query","name":"orgName","required":false,"description":"Filter by organization name"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"query","name":"projectName","required":false,"description":"Filter by project name"},{"schema":{"type":"boolean"},"in":"query","name":"archived","required":false,"description":"Filter by archived status (true for archived, false for non-archived)"}],"security":[{"jwtToken":[]},{"secretToken":[]},{}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"rows":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"name":{"type":"string"},"type":{"type":"string","enum":["MODEL","MATERIAL","IMAGE","SCENE","ENVMAP","CAD","LIGHT"]},"visibility":{"type":"string","enum":["PRIVATE","UNLISTED","PUBLIC"],"description":"The visibility of the asset"},"projectId":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"projectName":{"type":"string"},"orgId":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"orgName":{"type":"string"},"description":{"type":"string"},"keywords":{"type":"string"},"shareLicense":{"type":"string","enum":["NONE","CC_0","CC_BY","CC_BY_SA","CC_BY_NC","CC_BY_NC_SA","CC_BY_ND","CC_BY_NC_ND"]},"aiUsage":{"type":"string","enum":["UNDISCLOSED","AI_USED","AI_FREE"],"description":"The AI usage policy of the asset"},"commentMode":{"type":"string","enum":["ENABLED","MEMBERS_ONLY","NONE"]},"reported":{"type":"boolean"},"likeCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"shareCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"archived":{"type":"boolean"},"metadata":{"type":"string","maxLength":10240},"originalSize":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"width":{"type":["null","number"]},"height":{"type":["null","number"]},"depth":{"type":["null","number"]},"version":{"type":"string","pattern":"^(0|[1-9][0-9]*)\\.(0|[1-9][0-9]*)\\.(0|[1-9][0-9]*)$"},"latestVersion":{"type":"string","pattern":"^(0|[1-9][0-9]*)\\.(0|[1-9][0-9]*)\\.(0|[1-9][0-9]*)$"},"versionId":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"originalExtension":{"type":"string"},"fileOid":{"type":"string"},"thumbnailOid":{"type":["null","string"]},"analysis":{"anyOf":[{"type":"object","properties":{"schemaVersion":{"type":"number","enum":[1]},"sourceFileOid":{"type":"string","minLength":64,"maxLength":64,"pattern":"^[a-f0-9]+$"},"analyzerId":{"type":"string","minLength":1},"analyzerVersion":{"type":"string","minLength":1},"status":{"type":"string","enum":["pending","running","succeeded","failed","unsupported"]},"analyzedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]},"data":{"anyOf":[{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["model"]},"dimensions":{"anyOf":[{"type":"object","properties":{"widthMeters":{"type":"number","minimum":0},"depthMeters":{"type":"number","minimum":0},"heightMeters":{"type":"number","minimum":0},"unitSource":{"type":"string","enum":["format-defined","declared","assumed","unknown"]},"measurementBasis":{"type":"string"}},"required":["widthMeters","depthMeters","heightMeters","unitSource","measurementBasis"],"additionalProperties":false},{"type":"null"}]},"meshCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"geometryCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"triangleCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"vertexCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"materialCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"textureCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"textures":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"path":{"type":["string","null"]},"widthPixels":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"heightPixels":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"format":{"type":["string","null"]},"mimeType":{"type":["string","null"]},"byteSize":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"mipLevelCount":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"colorSpace":{"type":["string","null"]},"usages":{"type":"array","items":{"type":"string"}}},"required":["id","path","widthPixels","heightPixels","format","mimeType","byteSize"],"additionalProperties":false}}},"required":["kind","dimensions","meshCount","geometryCount","triangleCount","vertexCount","materialCount","textureCount","textures"],"additionalProperties":false},{"type":"object","properties":{"version":{"type":"string"},"colorspace":{"type":"string"},"materials":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"category":{"type":"string"}},"required":["category"],"additionalProperties":false}},"nodeGraphCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"topLevelNodeCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"referencedTextures":{"type":"array","items":{"type":"string"}},"warnings":{"type":"array","items":{"type":"string"}},"kind":{"type":"string","enum":["material"]},"nodeCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"textureCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"textures":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"path":{"type":["string","null"]},"widthPixels":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"heightPixels":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"format":{"type":["string","null"]},"mimeType":{"type":["string","null"]},"byteSize":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"mipLevelCount":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"colorSpace":{"type":["string","null"]},"usages":{"type":"array","items":{"type":"string"}}},"required":["id","path","widthPixels","heightPixels","format","mimeType","byteSize"],"additionalProperties":false}}},"required":["materials","nodeGraphCount","topLevelNodeCount","referencedTextures","warnings","kind","nodeCount","textureCount","textures"],"additionalProperties":false},{"type":"object","properties":{"version":{"type":"string"},"metadata":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}},"photometricType":{"type":"integer","minimum":1,"maximum":3},"photometricTypeName":{"type":"string","enum":["A","B","C"]},"photometry":{"type":"string","enum":["absolute","relative"]},"manufacturer":{"type":"string"},"luminaire":{"type":"string"},"lightSource":{"type":"string"},"lampCatalog":{"type":"string"},"lampCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"lumensPerLamp":{"type":"number"},"inputWatts":{"type":"number"},"peakCandela":{"type":"number"},"verticalAngles":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"horizontalAngles":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"units":{"type":"string","enum":["feet","meters"]},"dimensions":{"type":"object","properties":{"width":{"type":"number"},"length":{"type":"number"},"height":{"type":"number"}},"required":["width","length","height"],"additionalProperties":false},"hasTilt":{"type":"boolean"},"warnings":{"type":"array","items":{"type":"string"}},"kind":{"type":"string","enum":["light"]},"luminousFluxLumens":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"efficacyLumensPerWatt":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"beamAngleDegrees":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"fieldAngleDegrees":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"declaredLampFluxLumens":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"downwardFluxLumens":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"upwardFluxLumens":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"metricsTiltDegrees":{"type":"number"},"beamAngles":{"type":"array","items":{"type":"object","properties":{"horizontalDegrees":{"type":"number"},"peakDirectionDegrees":{"type":"number"},"peakCandela":{"type":"number","minimum":0},"beamAngleDegrees":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"fieldAngleDegrees":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"beamAngleStatus":{"type":"string","enum":["ok","no-light","no-crossing","multiple-lobes"]},"fieldAngleStatus":{"type":"string","enum":["ok","no-light","no-crossing","multiple-lobes"]}},"required":["horizontalDegrees","peakDirectionDegrees","peakCandela","beamAngleDegrees","fieldAngleDegrees","beamAngleStatus","fieldAngleStatus"],"additionalProperties":false}},"metricsStatus":{"type":"string","enum":["supported","unsupported","unavailable"]}},"required":["version","metadata","photometricType","photometricTypeName","photometry","manufacturer","luminaire","lightSource","lampCatalog","lampCount","lumensPerLamp","inputWatts","peakCandela","verticalAngles","horizontalAngles","units","dimensions","hasTilt","warnings","kind","luminousFluxLumens","efficacyLumensPerWatt","beamAngleDegrees","fieldAngleDegrees","metricsStatus"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","enum":["envmap"]},"widthPixels":{"type":"integer","minimum":0,"maximum":9007199254740991},"heightPixels":{"type":"integer","minimum":0,"maximum":9007199254740991},"format":{"type":"string"},"colorSpace":{"type":"string"},"projection":{"type":"string","enum":["equirectangular","unknown"]},"brightnessUnit":{"type":"string","enum":["relative","cd/m2"]},"calibration":{"type":["string","null"]},"minimumBrightness":{"type":"number","minimum":0},"maximumBrightness":{"type":"number","minimum":0},"averageBrightness":{"type":"number","minimum":0},"percentile01Brightness":{"type":"number","minimum":0},"percentile99Brightness":{"type":"number","minimum":0},"dynamicRangeStops":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]}},"required":["kind","widthPixels","heightPixels","format","colorSpace","projection","brightnessUnit","calibration","minimumBrightness","maximumBrightness","averageBrightness","percentile01Brightness","percentile99Brightness","dynamicRangeStops"],"additionalProperties":false}]},{"type":"null"}]},"validation":{"anyOf":[{"type":"object","properties":{"status":{"type":"string","enum":["valid","invalid","unassessed"]},"validator":{"type":"string"},"validatorVersion":{"type":"string"},"rules":{"type":"array","items":{"type":"string"}},"issues":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string"},"severity":{"type":"string","enum":["error","warning","info"]},"message":{"type":"string"},"location":{"type":"string"}},"required":["code","severity","message"],"additionalProperties":false}}},"required":["status","validator","validatorVersion","rules","issues"],"additionalProperties":false},{"type":"null"}]},"diagnostics":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string"},"severity":{"type":"string","enum":["error","warning","info"]},"message":{"type":"string"},"location":{"type":"string"}},"required":["code","severity","message"],"additionalProperties":false}}},"required":["schemaVersion","sourceFileOid","analyzerId","analyzerVersion","status","analyzedAt","data","validation","diagnostics"],"additionalProperties":false},{"type":"null"}]},"analysisSummary":{"anyOf":[{"type":"object","properties":{"schemaVersion":{"type":"number","enum":[1]},"sourceFileOid":{"type":"string","minLength":64,"maxLength":64,"pattern":"^[a-f0-9]+$"},"analyzerId":{"type":"string","minLength":1},"analyzerVersion":{"type":"string","minLength":1},"status":{"type":"string","enum":["pending","running","succeeded","failed","unsupported"]},"analyzedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]},"validationStatus":{"anyOf":[{"type":"string","enum":["valid","invalid","unassessed"]},{"type":"null"}]},"errorCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"warningCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"data":{"anyOf":[{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["model"]},"dimensions":{"anyOf":[{"type":"object","properties":{"widthMeters":{"type":"number","minimum":0},"depthMeters":{"type":"number","minimum":0},"heightMeters":{"type":"number","minimum":0},"unitSource":{"type":"string","enum":["format-defined","declared","assumed","unknown"]},"measurementBasis":{"type":"string"}},"required":["widthMeters","depthMeters","heightMeters","unitSource","measurementBasis"],"additionalProperties":false},{"type":"null"}]},"meshCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"geometryCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"triangleCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"vertexCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"materialCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"textureCount":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["kind","dimensions","meshCount","geometryCount","triangleCount","vertexCount","materialCount","textureCount"],"additionalProperties":false},{"type":"object","properties":{"version":{"type":"string"},"colorspace":{"type":"string"},"nodeGraphCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"topLevelNodeCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"kind":{"type":"string","enum":["material"]},"nodeCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"textureCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"materialCount":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["nodeGraphCount","topLevelNodeCount","kind","nodeCount","textureCount","materialCount"],"additionalProperties":false},{"type":"object","properties":{"version":{"type":"string"},"photometricType":{"type":"integer","minimum":1,"maximum":3},"photometricTypeName":{"type":"string","enum":["A","B","C"]},"photometry":{"type":"string","enum":["absolute","relative"]},"manufacturer":{"type":"string"},"luminaire":{"type":"string"},"lightSource":{"type":"string"},"lampCatalog":{"type":"string"},"lampCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"lumensPerLamp":{"type":"number"},"inputWatts":{"type":"number"},"peakCandela":{"type":"number"},"verticalAngles":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"horizontalAngles":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"units":{"type":"string","enum":["feet","meters"]},"dimensions":{"type":"object","properties":{"width":{"type":"number"},"length":{"type":"number"},"height":{"type":"number"}},"required":["width","length","height"],"additionalProperties":false},"hasTilt":{"type":"boolean"},"kind":{"type":"string","enum":["light"]},"luminousFluxLumens":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"efficacyLumensPerWatt":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"beamAngleDegrees":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"fieldAngleDegrees":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"declaredLampFluxLumens":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"downwardFluxLumens":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"upwardFluxLumens":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"metricsTiltDegrees":{"type":"number"},"metricsStatus":{"type":"string","enum":["supported","unsupported","unavailable"]}},"required":["version","photometricType","photometricTypeName","photometry","manufacturer","luminaire","lightSource","lampCatalog","lampCount","lumensPerLamp","inputWatts","peakCandela","verticalAngles","horizontalAngles","units","dimensions","hasTilt","kind","luminousFluxLumens","efficacyLumensPerWatt","beamAngleDegrees","fieldAngleDegrees","metricsStatus"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","enum":["envmap"]},"widthPixels":{"type":"integer","minimum":0,"maximum":9007199254740991},"heightPixels":{"type":"integer","minimum":0,"maximum":9007199254740991},"format":{"type":"string"},"colorSpace":{"type":"string"},"projection":{"type":"string","enum":["equirectangular","unknown"]},"brightnessUnit":{"type":"string","enum":["relative","cd/m2"]},"calibration":{"type":["string","null"]},"minimumBrightness":{"type":"number","minimum":0},"maximumBrightness":{"type":"number","minimum":0},"averageBrightness":{"type":"number","minimum":0},"percentile01Brightness":{"type":"number","minimum":0},"percentile99Brightness":{"type":"number","minimum":0},"dynamicRangeStops":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]}},"required":["kind","widthPixels","heightPixels","format","colorSpace","projection","brightnessUnit","calibration","minimumBrightness","maximumBrightness","averageBrightness","percentile01Brightness","percentile99Brightness","dynamicRangeStops"],"additionalProperties":false}]},{"type":"null"}]}},"required":["schemaVersion","sourceFileOid","analyzerId","analyzerVersion","status","analyzedAt","validationStatus","errorCount","warningCount","data"],"additionalProperties":false},{"type":"null"}]},"materialInfo":{"type":"object","properties":{"version":{"type":"string"},"colorspace":{"type":"string"},"materials":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"category":{"type":"string"}},"required":["category"],"additionalProperties":false}},"nodeGraphCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"topLevelNodeCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"referencedTextures":{"type":"array","items":{"type":"string"}},"warnings":{"type":"array","items":{"type":"string"}}},"required":["materials","nodeGraphCount","topLevelNodeCount","referencedTextures","warnings"],"additionalProperties":false},"lightInfo":{"type":"object","properties":{"version":{"type":"string"},"metadata":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}},"photometricType":{"type":"integer","minimum":1,"maximum":3},"photometricTypeName":{"type":"string","enum":["A","B","C"]},"photometry":{"type":"string","enum":["absolute","relative"]},"manufacturer":{"type":"string"},"luminaire":{"type":"string"},"lightSource":{"type":"string"},"lampCatalog":{"type":"string"},"lampCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"lumensPerLamp":{"type":"number"},"inputWatts":{"type":"number"},"peakCandela":{"type":"number"},"verticalAngles":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"horizontalAngles":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"units":{"type":"string","enum":["feet","meters"]},"dimensions":{"type":"object","properties":{"width":{"type":"number"},"length":{"type":"number"},"height":{"type":"number"}},"required":["width","length","height"],"additionalProperties":false},"hasTilt":{"type":"boolean"},"warnings":{"type":"array","items":{"type":"string"}}},"required":["version","metadata","photometricType","photometricTypeName","photometry","manufacturer","luminaire","lightSource","lampCatalog","lampCount","lumensPerLamp","inputWatts","peakCandela","verticalAngles","horizontalAngles","units","dimensions","hasTilt","warnings"],"additionalProperties":false}},"required":["id","name","type","visibility","projectId","projectName","orgId","orgName","description","keywords","shareLicense","aiUsage","commentMode","reported","likeCount","shareCount","createdAt","updatedAt","archived","metadata","version","latestVersion","versionId","originalExtension","fileOid"],"additionalProperties":false}},"rowCount":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["rows","rowCount"],"additionalProperties":false}}}},"400":{"description":"Bad request response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}}}},"401":{"description":"Unauthorized response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Unauthorized response"}}}},"403":{"description":"Forbidden response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Forbidden response"}}}},"404":{"description":"Not found response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Not found response"}}}}}}},"/auth/authorize/consent":{"post":{"operationId":"oauth-consent","summary":"OAuth consent","tags":["auth"],"description":"OAuth 2.0 consent endpoint - creates authorization code","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"client_id":{"type":"string"},"redirect_uri":{"type":"string","format":"uri"},"response_type":{"type":"string","enum":["code"]},"scope":{"type":"string"},"state":{"type":"string"},"code_challenge":{"type":"string"},"code_challenge_method":{"type":"string","enum":["S256"]},"action":{"type":"string","enum":["APPROVE","DENY"]},"session_token":{"type":"string"}},"required":["client_id","redirect_uri","response_type","scope","state","code_challenge","code_challenge_method","action","session_token"],"additionalProperties":false}}},"required":true},"security":[{"frontendToken":[]}],"responses":{"302":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"redirectUrl":{"type":"string"}},"required":["redirectUrl"],"additionalProperties":false}}}},"400":{"description":"Bad request response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}}}},"401":{"description":"Unauthorized response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Unauthorized response"}}}},"429":{"description":"Too many requests response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Too many requests response"}}}}}}},"/auth/authorize":{"get":{"operationId":"oauth-authorize","summary":"OAuth authorize","tags":["auth"],"description":"OAuth 2.0 authorization endpoint","parameters":[{"schema":{"type":"string"},"in":"query","name":"client_id","required":true},{"schema":{"type":"string","format":"uri"},"in":"query","name":"redirect_uri","required":true},{"schema":{"type":"string","enum":["code"]},"in":"query","name":"response_type","required":true},{"schema":{"type":"string"},"in":"query","name":"scope","required":false},{"schema":{"type":"string"},"in":"query","name":"state","required":true},{"schema":{"type":"string"},"in":"query","name":"code_challenge","required":true},{"schema":{"type":"string","enum":["S256"]},"in":"query","name":"code_challenge_method","required":true}],"security":[{"anonymous":[]}],"responses":{"302":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"redirectUrl":{"type":"string"}},"required":["redirectUrl"],"additionalProperties":false}}}},"400":{"description":"Bad request response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}}}},"401":{"description":"Unauthorized response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Unauthorized response"}}}},"429":{"description":"Too many requests response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Too many requests response"}}}}}}},"/auth/refresh-access-token":{"post":{"operationId":"refresh-access-token","summary":"Refresh access token","tags":["auth"],"description":"Refresh access token using session token","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"refreshToken":{"type":"string","description":"The refresh token to use for refreshing the access token (must start with \"ut_\" for session tokens or \"st_\" for API tokens)"}},"required":["refreshToken"],"additionalProperties":false}}},"required":true},"security":[{"sessionToken":[]},{"secretToken":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"accessToken":{"type":"string"}},"required":["accessToken"],"additionalProperties":false}}}},"201":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"accessToken":{"type":"string"}},"required":["accessToken"],"additionalProperties":false}}}},"400":{"description":"Bad request response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}}}},"401":{"description":"Unauthorized response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Unauthorized response"}}}}}}},"/auth/token":{"post":{"operationId":"oauth-token","summary":"OAuth token","tags":["auth"],"description":"OAuth 2.0 token endpoint - exchange authorization code for tokens","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"grant_type":{"type":"string","enum":["authorization_code"]},"code":{"type":"string"},"client_id":{"type":"string"},"code_verifier":{"type":"string"},"redirect_uri":{"type":"string","format":"uri"},"client_secret":{"type":"string"}},"required":["grant_type","code","client_id","code_verifier","redirect_uri"],"additionalProperties":false}}},"required":true},"security":[{"anonymous":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"access_token":{"type":"string"},"refresh_token":{"type":"string"},"token_type":{"type":"string","enum":["Bearer"]},"expires_in":{"type":"number"}},"required":["access_token","refresh_token","token_type","expires_in"],"additionalProperties":false}}}},"400":{"description":"Bad request response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}}}},"401":{"description":"Unauthorized response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Unauthorized response"}}}},"429":{"description":"Too many requests response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Too many requests response"}}}}}}},"/health/debug-sentry":{"get":{"operationId":"debug-sentry","summary":"Debug Sentry","tags":["health"],"description":"Debug endpoint to test Sentry error reporting. This endpoint intentionally throws an error.","security":[{}],"responses":{"204":{"description":"No content response","content":{"application/json":{"schema":{"type":"object","properties":{},"additionalProperties":false,"description":"No content response"}}}},"500":{"description":"Server error response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Server error response"}}}}}}},"/health/error":{"get":{"operationId":"health-error","summary":"Throw test error","tags":["health"],"description":"Throw Error","security":[{}],"responses":{"204":{"description":"No content response","content":{"application/json":{"schema":{"type":"object","properties":{},"additionalProperties":false,"description":"No content response"}}}},"400":{"description":"Bad request response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}}}},"500":{"description":"Server error response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Server error response"}}}}}}},"/health":{"get":{"operationId":"health","summary":"Health check","tags":["health"],"description":"Health check endpoint","security":[{}],"responses":{"204":{"description":"No content response","content":{"application/json":{"schema":{"type":"object","properties":{},"additionalProperties":false,"description":"No content response"}}}}}}},"/internal/webhook-deliver":{"post":{"operationId":"deliver-webhook-internal","summary":"Deliver webhook (internal)","tags":["internal"],"description":"Internal Cloud Tasks delivery endpoint. Delivers a signed webhook payload to the registered URL. Must be called with a valid Cloud Tasks OIDC token.","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"webhookId":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"deliveryId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"eventType":{"type":"string"},"payload":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"Unique delivery ID for idempotency"},"type":{"type":"string","enum":["asset.created","asset.deleted","asset.liked","asset.moderated","asset.updated","comment.liked","comment.moderated","comment.new","comment.updated","external-auth.approved","member.added","member.removed","notification.new","org.created","org.deleted","org.invite","org.updated","product.created","product.deleted","product.updated","project.created","project.deleted","project.invite","project.updated"],"description":"Event type, e.g. asset.updated"},"timestamp":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","description":"ISO 8601 delivery timestamp"},"data":{"description":"Event-specific payload (same shape as SSE data for that event type)"},"context":{"type":"object","properties":{"orgName":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$","description":"The name of the organization"},"projectName":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$","description":"The name of the project"}},"required":["orgName"],"additionalProperties":false}},"required":["id","type","timestamp","data","context"],"additionalProperties":false}},"required":["webhookId","deliveryId","eventType","payload"],"additionalProperties":false}}},"required":true},"responses":{"204":{"description":"No content response","content":{"application/json":{"schema":{"type":"object","properties":{},"additionalProperties":false,"description":"No content response"}}}},"400":{"description":"Bad request response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}}}},"401":{"description":"Unauthorized response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Unauthorized response"}}}},"500":{"description":"Server error response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Server error response"}}}}}}},"/leads":{"get":{"operationId":"list-leads","summary":"List leads","tags":["internal"],"description":"List captured leads globally for super users or for a specific project when authorized.","parameters":[{"schema":{"type":"integer","minimum":0,"maximum":9007199254740991},"in":"query","name":"pageOffset","required":false,"description":"The number of items to skip before starting to return results. Must be 0 or greater."},{"schema":{"type":"integer","minimum":1,"maximum":1000},"in":"query","name":"pageSize","required":false,"description":"The maximum number of items to return. Must be between 1 and 1000."},{"schema":{"type":"string","enum":["createdAt","email","companyName","companySize","firstName","lastName","orgName","projectName"]},"in":"query","name":"sortBy","required":false,"description":"The field to sort by"},{"schema":{"type":"string","enum":["asc","desc"]},"in":"query","name":"sortDir","required":false,"description":"The direction to sort by"},{"schema":{"type":"string","maxLength":256},"in":"query","name":"searchText","required":false},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"query","name":"orgName","required":true,"description":"The name of the organization"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"query","name":"projectName","required":true,"description":"The name of the project"}],"security":[{"jwtToken":[]},{"secretToken":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"rows":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"projectId":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"orgName":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$","description":"The name of the organization"},"projectName":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$","description":"The name of the project"},"firstName":{"type":"string"},"lastName":{"type":"string"},"email":{"type":"string","format":"email","pattern":"^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"},"jobTitle":{"type":"string"},"phoneNumber":{"type":"string"},"companyName":{"type":"string"},"companySize":{"anyOf":[{"type":"number","enum":[1]},{"type":"number","enum":[10]},{"type":"number","enum":[50]},{"type":"number","enum":[200]},{"type":"number","enum":[500]},{"type":"number","enum":[1000]},{"type":"number","enum":[5000]},{"type":"number","enum":[10000]},{"type":"number","enum":[1000000]}]},"comments":{"type":["null","string"]},"privacyPolicyConsent":{"type":"boolean"},"userId":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"ipAddress":{"type":["null","string"]},"browserAgent":{"type":["null","string"]},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"}},"required":["id","projectId","orgName","projectName","firstName","lastName","email","jobTitle","phoneNumber","companyName","companySize","comments","privacyPolicyConsent","userId","ipAddress","browserAgent","createdAt"],"additionalProperties":false}},"rowCount":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["rows","rowCount"],"additionalProperties":false}}}},"400":{"description":"Bad request response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}}}},"401":{"description":"Unauthorized response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Unauthorized response"}}}},"403":{"description":"Forbidden response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Forbidden response"}}}},"404":{"description":"Not found response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Not found response"}}}}}},"post":{"operationId":"create-lead","summary":"Create lead","tags":["internal"],"description":"Submit a project-scoped sales inquiry lead from the contact form","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"firstName":{"type":"string","maxLength":255},"lastName":{"type":"string","maxLength":255},"email":{"type":"string","format":"email","pattern":"^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"},"jobTitle":{"type":"string","maxLength":255},"phoneNumber":{"type":"string","maxLength":50},"companyName":{"type":"string","maxLength":255},"companySize":{"anyOf":[{"type":"number","enum":[1]},{"type":"number","enum":[10]},{"type":"number","enum":[50]},{"type":"number","enum":[200]},{"type":"number","enum":[500]},{"type":"number","enum":[1000]},{"type":"number","enum":[5000]},{"type":"number","enum":[10000]},{"type":"number","enum":[1000000]}]},"comments":{"type":"string","maxLength":10240},"privacyPolicyConsent":{"type":"boolean","enum":[true]}},"required":["email","comments"],"additionalProperties":false}}},"required":true},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"query","name":"orgName","required":true,"description":"The name of the organization"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"query","name":"projectName","required":true,"description":"The name of the project"}],"security":[{"frontendToken":[]}],"responses":{"201":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["id"],"additionalProperties":false}}}},"400":{"description":"Bad request response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}}}},"401":{"description":"Unauthorized response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Unauthorized response"}}}},"403":{"description":"Forbidden response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Forbidden response"}}}},"404":{"description":"Not found response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Not found response"}}}},"429":{"description":"Too many requests response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Too many requests response"}}}}}}},"/member-invites":{"get":{"operationId":"list-member-invites","summary":"List member invites","tags":["member-invites"],"description":"List member invites for an organization, project, or user. Users can only view their own invites unless they are admins.","parameters":[{"schema":{"type":"integer","minimum":0,"maximum":9007199254740991},"in":"query","name":"pageOffset","required":false,"description":"The number of items to skip before starting to return results. Must be 0 or greater."},{"schema":{"type":"integer","minimum":1,"maximum":1000},"in":"query","name":"pageSize","required":false,"description":"The maximum number of items to return. Must be between 1 and 1000."},{"schema":{"type":"string","enum":["createdAt","status","role"]},"in":"query","name":"sortBy","required":false,"description":"The field to sort by"},{"schema":{"type":"string","enum":["asc","desc"]},"in":"query","name":"sortDir","required":false,"description":"The direction to sort by"},{"schema":{"type":"string","enum":["PENDING","ACCEPTED","REJECTED"]},"in":"query","name":"status","required":false},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"query","name":"orgName","required":true,"description":"The name of the organization"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"query","name":"projectName","required":false,"description":"The name of the project"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"query","name":"userName","required":true,"description":"The name of the user"}],"security":[{"jwtToken":[]},{"secretToken":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"rows":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"The ID of the member invite"},"role":{"type":"string","enum":["ADMIN","MEMBER","VIEWER"],"description":"The role of the member invite"},"status":{"type":"string","enum":["PENDING","ACCEPTED","REJECTED"],"description":"The status of the member invite"},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","description":"The date and time the member invite was created"},"updatedAt":{"description":"The date and time the member invite was updated","type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"invitedByUserId":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"The ID of the user who invited the member"},"inviteeUserId":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"The ID of the user who was invited"},"inviteeEmail":{"description":"The email of the user who was invited","type":["null","string"]},"memberId":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"The ID of the member who was invited"},"orgId":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"The ID of the organization"},"projectId":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"The ID of the project"},"orgName":{"description":"The name of the organization","type":["null","string"]},"projectName":{"description":"The name of the project","type":["null","string"]},"userAccountEmail":{"description":"The email of the user who was invited","type":["null","string"]},"userFullName":{"description":"The full name of the user who was invited","type":["null","string"]},"userName":{"description":"The username of the user who was invited","type":["null","string"]},"userPersonalOrgId":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"The ID of the personal organization of the user who was invited"}},"required":["id","role","status","createdAt","invitedByUserId","inviteeUserId","inviteeEmail","memberId","orgId","projectId","orgName","projectName","userAccountEmail","userFullName","userName","userPersonalOrgId"],"additionalProperties":false}},"rowCount":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["rows","rowCount"],"additionalProperties":false}}}},"400":{"description":"Bad request response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}}}},"401":{"description":"Unauthorized response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Unauthorized response"}}}},"403":{"description":"Forbidden response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Forbidden response"}}}},"404":{"description":"Not found response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Not found response"}}}}}},"post":{"operationId":"create-member-invite","summary":"Create member invite","tags":["member-invites"],"description":"Create a member invite for an organization or project. Only admins can create invites. Notifications or emails are sent to the invited user.","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"usernameOrEmail":{"type":"string","minLength":1,"maxLength":255,"description":"The username or email of the user to invite"},"role":{"type":"string","enum":["ADMIN","MEMBER","VIEWER"],"description":"The role to assign to the member"}},"required":["usernameOrEmail","role"],"additionalProperties":false}}},"required":true},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"query","name":"orgName","required":true,"description":"The name of the organization"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"query","name":"projectName","required":true,"description":"The name of the project"}],"security":[{"jwtToken":[]},{"secretToken":[]}],"responses":{"201":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"The ID of the member invite"},"role":{"type":"string","enum":["ADMIN","MEMBER","VIEWER"],"description":"The role of the member invite"},"status":{"type":"string","enum":["PENDING","ACCEPTED","REJECTED"],"description":"The status of the member invite"},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","description":"The date and time the member invite was created"},"updatedAt":{"description":"The date and time the member invite was updated","type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"invitedByUserId":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"The ID of the user who invited the member"},"inviteeUserId":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"The ID of the user who was invited"},"inviteeEmail":{"description":"The email of the user who was invited","type":["null","string"]},"memberId":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"The ID of the member who was invited"},"orgId":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"The ID of the organization"},"projectId":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"The ID of the project"},"orgName":{"description":"The name of the organization","type":["null","string"]},"projectName":{"description":"The name of the project","type":["null","string"]},"userAccountEmail":{"description":"The email of the user who was invited","type":["null","string"]},"userFullName":{"description":"The full name of the user who was invited","type":["null","string"]},"userName":{"description":"The username of the user who was invited","type":["null","string"]},"userPersonalOrgId":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"The ID of the personal organization of the user who was invited"}},"required":["id","role","status","createdAt","invitedByUserId","inviteeUserId","inviteeEmail","memberId","orgId","projectId","orgName","projectName","userAccountEmail","userFullName","userName","userPersonalOrgId"],"additionalProperties":false}}}},"400":{"description":"Bad request response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}}}},"401":{"description":"Unauthorized response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Unauthorized response"}}}},"403":{"description":"Forbidden response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Forbidden response"}}}},"404":{"description":"Not found response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Not found response"}}}}}}},"/members":{"delete":{"operationId":"delete-member","summary":"Remove member","tags":["members"],"description":"Remove a member from an organization or project. Users can remove themselves, or admins can remove any member.","parameters":[{"schema":{"type":"string","maxLength":100},"in":"query","name":"userName","required":true},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"query","name":"orgName","required":true,"description":"The name of the organization"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"query","name":"projectName","required":true,"description":"The name of the project"}],"security":[{"jwtToken":[]},{"secretToken":[]}],"responses":{"204":{"description":"No content response","content":{"application/json":{"schema":{"type":"object","properties":{},"additionalProperties":false,"description":"No content response"}}}},"400":{"description":"Bad request response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}}}},"401":{"description":"Unauthorized response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Unauthorized response"}}}},"403":{"description":"Forbidden response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Forbidden response"}}}},"404":{"description":"Not found response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Not found response"}}}}}},"get":{"operationId":"list-members","summary":"List members","tags":["members"],"description":"List members for an organization or project, with optional filtering by role.","parameters":[{"schema":{"type":"integer","minimum":0,"maximum":9007199254740991},"in":"query","name":"pageOffset","required":false,"description":"The number of items to skip before starting to return results. Must be 0 or greater."},{"schema":{"type":"integer","minimum":1,"maximum":1000},"in":"query","name":"pageSize","required":false,"description":"The maximum number of items to return. Must be between 1 and 1000."},{"schema":{"type":"string","enum":["createdAt","updatedAt","role"]},"in":"query","name":"sortBy","required":false,"description":"The field to sort by"},{"schema":{"type":"string","enum":["asc","desc"]},"in":"query","name":"sortDir","required":false,"description":"The direction to sort by"},{"schema":{"type":"string","enum":["ADMIN","MEMBER","VIEWER"]},"in":"query","name":"role","required":false,"description":"Filter by member role"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"query","name":"orgName","required":true,"description":"The name of the organization"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"query","name":"projectName","required":true,"description":"The name of the project"}],"security":[{"jwtToken":[]},{"secretToken":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"rows":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"The ID of the member"},"role":{"type":"string","enum":["ADMIN","MEMBER","VIEWER"],"description":"The role of the member"},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","description":"The date and time the member was created"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","description":"The date and time the member was updated"},"userId":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"The ID of the user who is a member"},"orgId":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"The ID of the organization"},"projectId":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"The ID of the project"},"userName":{"type":"string","description":"The username of the user who is a member"},"orgName":{"description":"The name of the organization","type":["null","string"]},"projectName":{"description":"The name of the project","type":["null","string"]},"projectOrgId":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"The ID of the project organization"},"projectOrgName":{"description":"The name of the project organization","type":["null","string"]}},"required":["id","role","createdAt","updatedAt","userId","orgId","projectId","userName","orgName","projectName","projectOrgId","projectOrgName"],"additionalProperties":false}},"rowCount":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["rows","rowCount"],"additionalProperties":false}}}},"400":{"description":"Bad request response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}}}},"401":{"description":"Unauthorized response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Unauthorized response"}}}},"403":{"description":"Forbidden response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Forbidden response"}}}},"404":{"description":"Not found response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Not found response"}}}}}},"patch":{"operationId":"update-member","summary":"Update member","tags":["members"],"description":"Update a member role in an organization or project. Only admins or super users can update member roles.","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"role":{"type":"string","enum":["ADMIN","MEMBER","VIEWER"]}},"required":["role"],"additionalProperties":false}}},"required":true},"parameters":[{"schema":{"type":"string","maxLength":100},"in":"query","name":"userName","required":true},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"query","name":"orgName","required":true,"description":"The name of the organization"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"query","name":"projectName","required":true,"description":"The name of the project"}],"security":[{"jwtToken":[]},{"secretToken":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"The ID of the member"},"role":{"type":"string","enum":["ADMIN","MEMBER","VIEWER"],"description":"The role of the member"},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","description":"The date and time the member was created"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","description":"The date and time the member was updated"},"userId":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"The ID of the user who is a member"},"orgId":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"The ID of the organization"},"projectId":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"The ID of the project"},"userName":{"type":"string","description":"The username of the user who is a member"},"orgName":{"description":"The name of the organization","type":["null","string"]},"projectName":{"description":"The name of the project","type":["null","string"]},"projectOrgId":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"The ID of the project organization"},"projectOrgName":{"description":"The name of the project organization","type":["null","string"]}},"required":["id","role","createdAt","updatedAt","userId","orgId","projectId","userName","orgName","projectName","projectOrgId","projectOrgName"],"additionalProperties":false}}}},"400":{"description":"Bad request response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}}}},"401":{"description":"Unauthorized response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Unauthorized response"}}}},"403":{"description":"Forbidden response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Forbidden response"}}}},"404":{"description":"Not found response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Not found response"}}}}}}},"/notifications":{"get":{"operationId":"list-notifications","summary":"List notifications","tags":["notifications"],"description":"List notifications for the authenticated user, with optional filtering by status and support for pagination and sorting.","parameters":[{"schema":{"type":"integer","minimum":0,"maximum":9007199254740991},"in":"query","name":"pageOffset","required":false,"description":"The number of items to skip before starting to return results. Must be 0 or greater."},{"schema":{"type":"integer","minimum":1,"maximum":1000},"in":"query","name":"pageSize","required":false,"description":"The maximum number of items to return. Must be between 1 and 1000."},{"schema":{"type":"string","enum":["createdAt","status"]},"in":"query","name":"sortBy","required":false,"description":"The field to sort by"},{"schema":{"type":"string","enum":["asc","desc"]},"in":"query","name":"sortDir","required":false,"description":"The direction to sort by"},{"schema":{"type":"string","enum":["UNREAD","READ"]},"in":"query","name":"status","required":false,"description":"Filter by status (UNREAD or READ)"}],"security":[{"jwtToken":[]},{"secretToken":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"rows":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"The ID of the notification"},"title":{"type":"string"},"body":{"type":"string","description":"The body of the notification"},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","description":"The date and time the notification was created"},"status":{"type":"string","enum":["UNREAD","READ"],"description":"The status of the notification"},"topic":{"type":"string","enum":["NEW_COMMENT","COMMENT_MODERATED","ASSET_MODERATED","PROJECT_INVITE","ORG_INVITE","ASSET_LIKED","COMMENT_LIKED","COMMENT_MENTIONED","EXTERNAL_AUTH_APPROVED","NEW_ASSET","NEW_ASSET_VERSION"],"description":"The topic/type of the notification"},"imageUrl":{"description":"The URL of the image in the notification","type":["null","string"]},"link":{"description":"The link in the notification","type":["null","string"]},"userId":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"The ID of the user who received the notification"},"userName":{"type":"string","description":"The username of the user who received the notification"}},"required":["id","title","body","createdAt","status","topic","imageUrl","link","userId","userName"],"additionalProperties":false}},"rowCount":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["rows","rowCount"],"additionalProperties":false}}}},"400":{"description":"Bad request response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}}}},"401":{"description":"Unauthorized response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Unauthorized response"}}}},"403":{"description":"Forbidden response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Forbidden response"}}}}}},"patch":{"operationId":"mark-all-notifications-as-read","summary":"Mark all notifications as read","tags":["notifications"],"description":"Mark all notifications as read for the authenticated user.","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["READ"]}},"required":["status"],"additionalProperties":false}}},"required":true},"security":[{"jwtToken":[]},{"secretToken":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"}},"required":["success"],"additionalProperties":false}}}},"400":{"description":"Bad request response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}}}},"401":{"description":"Unauthorized response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Unauthorized response"}}}},"403":{"description":"Forbidden response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Forbidden response"}}}}}}},"/orgs":{"get":{"operationId":"list-orgs","summary":"List organizations","tags":["orgs"],"description":"List organizations, optionally filtered by visibility or username.  Unauthenticated users can only see public organizations.","parameters":[{"schema":{"type":"integer","minimum":0,"maximum":9007199254740991},"in":"query","name":"pageOffset","required":false,"description":"The number of items to skip before starting to return results. Must be 0 or greater."},{"schema":{"type":"integer","minimum":1,"maximum":1000},"in":"query","name":"pageSize","required":false,"description":"The maximum number of items to return. Must be between 1 and 1000."},{"schema":{"type":"string","enum":["createdAt","updatedAt","name"]},"in":"query","name":"sortBy","required":false,"description":"The field to sort by"},{"schema":{"type":"string","enum":["asc","desc"]},"in":"query","name":"sortDir","required":false,"description":"The direction to sort by"},{"schema":{"type":"string","maxLength":100},"in":"query","name":"userName","required":false,"description":"Filter by username"},{"schema":{"type":"string","enum":["PRIVATE","PUBLIC"]},"in":"query","name":"visibility","required":false,"description":"Filter by visibility (PUBLIC or PRIVATE)"}],"security":[{"jwtToken":[]},{"secretToken":[]},{}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"rows":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"The ID of the organization"},"name":{"type":"string","description":"The name of the organization"},"description":{"type":"string","description":"The description of the organization"},"visibility":{"type":"string","enum":["PRIVATE","PUBLIC"],"description":"The visibility of the organization"},"location":{"type":"string","description":"The location of the organization"},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","description":"The date and time the organization was created"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","description":"The date and time the organization was updated"},"isPersonalOrg":{"type":"boolean","description":"Whether the organization is a personal organization"},"socialLinks":{"default":[],"description":"Social media links for the organization","type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["BLUESKY","FACEBOOK","GITHUB","INSTAGRAM","LINKEDIN","MASTODON","REDDIT","TIKTOK","YOUTUBE","TWITTER","CUSTOM"]},"url":{"type":"string","format":"uri"}},"required":["type","url"],"additionalProperties":false}}},"required":["id","name","description","visibility","location","createdAt","updatedAt","isPersonalOrg","socialLinks"],"additionalProperties":false}},"rowCount":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["rows","rowCount"],"additionalProperties":false}}}},"400":{"description":"Bad request response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}}}},"401":{"description":"Unauthorized response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Unauthorized response"}}}},"403":{"description":"Forbidden response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Forbidden response"}}}}}},"post":{"operationId":"create-org","summary":"Create organization","tags":["orgs"],"description":"Create a new organization. The authenticated user becomes an admin member of the created organization.","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$","description":"The name of the organization"},"description":{"description":"Optional description of the organization","type":"string","maxLength":10240},"visibility":{"type":"string","enum":["PRIVATE","PUBLIC"],"description":"Visibility level: PUBLIC (anyone can view) or PRIVATE (members only)"}},"required":["name","visibility"],"additionalProperties":false}}},"required":true},"security":[{"jwtToken":[]},{"secretToken":[]}],"responses":{"201":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"The ID of the organization"},"name":{"type":"string","description":"The name of the organization"},"description":{"type":"string","description":"The description of the organization"},"visibility":{"type":"string","enum":["PRIVATE","PUBLIC"],"description":"The visibility of the organization"},"location":{"type":"string","description":"The location of the organization"},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","description":"The date and time the organization was created"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","description":"The date and time the organization was updated"},"isPersonalOrg":{"type":"boolean","description":"Whether the organization is a personal organization"},"socialLinks":{"default":[],"description":"Social media links for the organization","type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["BLUESKY","FACEBOOK","GITHUB","INSTAGRAM","LINKEDIN","MASTODON","REDDIT","TIKTOK","YOUTUBE","TWITTER","CUSTOM"]},"url":{"type":"string","format":"uri"}},"required":["type","url"],"additionalProperties":false}}},"required":["id","name","description","visibility","location","createdAt","updatedAt","isPersonalOrg","socialLinks"],"additionalProperties":false}}}},"400":{"description":"Bad request response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}}}},"401":{"description":"Unauthorized response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Unauthorized response"}}}},"403":{"description":"Forbidden response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Forbidden response"}}}},"404":{"description":"Not found response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Not found response"}}}}}}},"/oembed":{"get":{"operationId":"get-oembed","summary":"Get oEmbed data","tags":["oembed"],"description":"Get oEmbed data for a URL. Returns structured metadata following the oEmbed specification. Only PUBLIC resources are accessible.","parameters":[{"schema":{"type":"string","format":"uri"},"in":"query","name":"url","required":true,"description":"The URL to generate oEmbed data for"},{"schema":{"default":"json","type":"string","enum":["json","xml"]},"in":"query","name":"format","required":true,"description":"Response format (only \"json\" is currently supported)"},{"schema":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"in":"query","name":"maxwidth","required":false,"description":"Maximum width for embedded content in pixels"},{"schema":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"in":"query","name":"maxheight","required":false,"description":"Maximum height for embedded content in pixels"}],"security":[{}],"responses":{"200":{"description":"oEmbed response following the oEmbed specification","content":{"application/json":{"schema":{"type":"object","properties":{"version":{"type":"string","description":"The oEmbed version number","enum":["1.0"]},"type":{"type":"string","enum":["photo","video","link","rich"],"description":"The resource type"},"provider_name":{"type":"string","description":"The name of the resource provider"},"provider_url":{"type":"string","format":"uri","description":"The URL of the resource provider"},"url":{"description":"The URL of the resource (for photo/video types)","type":"string","format":"uri"},"width":{"description":"The width in pixels","type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"height":{"description":"The height in pixels","type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"title":{"description":"The title of the resource","type":"string"},"author_name":{"description":"The name of the resource author","type":"string"},"author_url":{"description":"The URL of the resource author","type":"string","format":"uri"},"thumbnail_url":{"description":"The URL of a thumbnail image","type":"string","format":"uri"},"thumbnail_width":{"description":"The width of the thumbnail in pixels","type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"thumbnail_height":{"description":"The height of the thumbnail in pixels","type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"html":{"description":"The HTML required to embed the resource (for rich/video types)","type":"string"}},"required":["version","type","provider_name","provider_url"],"additionalProperties":false,"description":"oEmbed response following the oEmbed specification"}}}},"400":{"description":"Bad request response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}}}},"404":{"description":"Not found response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Not found response"}}}}}}},"/projects":{"get":{"operationId":"list-projects","summary":"List projects","tags":["projects"],"description":"List projects, optionally filtered by organization, user, or visibility. Unauthenticated users can only see public projects.","parameters":[{"schema":{"type":"integer","minimum":0,"maximum":9007199254740991},"in":"query","name":"pageOffset","required":false,"description":"The number of items to skip before starting to return results. Must be 0 or greater."},{"schema":{"type":"integer","minimum":1,"maximum":1000},"in":"query","name":"pageSize","required":false,"description":"The maximum number of items to return. Must be between 1 and 1000."},{"schema":{"type":"string","enum":["createdAt","updatedAt","name"]},"in":"query","name":"sortBy","required":false,"description":"The field to sort by"},{"schema":{"type":"string","enum":["asc","desc"]},"in":"query","name":"sortDir","required":false,"description":"The direction to sort by"},{"schema":{"type":"string","enum":["PRIVATE","PUBLIC"]},"in":"query","name":"visibility","required":false,"description":"Filter by visibility (PUBLIC or PRIVATE)"},{"schema":{"type":"string","maxLength":100},"in":"query","name":"userName","required":false,"description":"Filter by username"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"query","name":"orgName","required":false,"description":"Filter by organization name"}],"security":[{"jwtToken":[]},{"secretToken":[]},{}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"rows":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"The ID of the project"},"name":{"type":"string","description":"The name of the project"},"description":{"type":"string","description":"The description of the project"},"visibility":{"type":"string","enum":["PRIVATE","PUBLIC"],"description":"The visibility of the project"},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","description":"The date and time the project was created"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","description":"The date and time the project was updated"},"orgId":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"The ID of the organization"},"orgName":{"type":"string","description":"The name of the organization"}},"required":["id","name","description","visibility","createdAt","updatedAt","orgId","orgName"],"additionalProperties":false}},"rowCount":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["rows","rowCount"],"additionalProperties":false}}}},"400":{"description":"Bad request response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}}}},"401":{"description":"Unauthorized response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Unauthorized response"}}}},"403":{"description":"Forbidden response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Forbidden response"}}}},"404":{"description":"Not found response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Not found response"}}}}}}},"/server-events":{"get":{"responses":{"200":{"description":"Default Response"}}}},"/products":{"get":{"operationId":"list-products","summary":"List products","tags":["products"],"description":"List products in a project. Requires project read access. Products are private.","parameters":[{"schema":{"type":"integer","minimum":0,"maximum":9007199254740991},"in":"query","name":"pageOffset","required":false,"description":"The number of items to skip before starting to return results. Must be 0 or greater."},{"schema":{"type":"integer","minimum":1,"maximum":1000},"in":"query","name":"pageSize","required":false,"description":"The maximum number of items to return. Must be between 1 and 1000."},{"schema":{"type":"string","enum":["createdAt","updatedAt","code","name"]},"in":"query","name":"sortBy","required":false,"description":"The field to sort by"},{"schema":{"type":"string","enum":["asc","desc"]},"in":"query","name":"sortDir","required":false,"description":"The direction to sort by"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"query","name":"orgName","required":true,"description":"Organization name"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"query","name":"projectName","required":true,"description":"Project name"}],"security":[{"jwtToken":[]},{"secretToken":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"rows":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"code":{"type":"string"},"name":{"type":"string","maxLength":1024},"description":{"type":"string"},"projectId":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"projectName":{"type":"string"},"orgId":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"orgName":{"type":"string"},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"referenceImages":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"productId":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"description":{"type":"string"},"fileOid":{"type":"string"},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"}},"required":["id","productId","description","fileOid","createdAt","updatedAt"],"additionalProperties":false}},"firstReferenceImageOid":{"type":["null","string"]}},"required":["id","code","name","description","projectId","projectName","orgId","orgName","createdAt","updatedAt"],"additionalProperties":false}},"rowCount":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["rows","rowCount"],"additionalProperties":false}}}},"400":{"description":"Bad request response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}}}},"401":{"description":"Unauthorized response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Unauthorized response"}}}},"403":{"description":"Forbidden response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Forbidden response"}}}},"404":{"description":"Not found response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Not found response"}}}}}}},"/service-accounts":{"get":{"operationId":"list-service-accounts","summary":"List service accounts","tags":["service-accounts"],"description":"List service accounts for an organization or project, with pagination and sorting support.","parameters":[{"schema":{"type":"integer","minimum":0,"maximum":9007199254740991},"in":"query","name":"pageOffset","required":false,"description":"The number of items to skip before starting to return results. Must be 0 or greater."},{"schema":{"type":"integer","minimum":1,"maximum":1000},"in":"query","name":"pageSize","required":false,"description":"The maximum number of items to return. Must be between 1 and 1000."},{"schema":{"type":"string","enum":["createdAt","name"]},"in":"query","name":"sortBy","required":false,"description":"The field to sort by"},{"schema":{"type":"string","enum":["asc","desc"]},"in":"query","name":"sortDir","required":false,"description":"The direction to sort by"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"query","name":"orgName","required":true,"description":"The name of the organization"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"query","name":"projectName","required":true,"description":"The name of the project"}],"security":[{"jwtToken":[]},{"secretToken":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"rows":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"name":{"type":"string"},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"apiTokenCount":{"type":"number"},"role":{"type":"string","enum":["ADMIN","MEMBER","VIEWER"]}},"required":["id","name","createdAt","updatedAt","apiTokenCount","role"],"additionalProperties":false}},"rowCount":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["rows","rowCount"],"additionalProperties":false}}}},"400":{"description":"Bad request response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}}}},"401":{"description":"Unauthorized response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Unauthorized response"}}}},"403":{"description":"Forbidden response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Forbidden response"}}}},"404":{"description":"Not found response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Not found response"}}}}}},"post":{"operationId":"create-service-account","summary":"Create service account","tags":["service-accounts"],"description":"Create a service account for an organization or project. Only admins can create service accounts.","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":30,"allOf":[{"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},{"pattern":"^sa-"}],"description":"The name of the service account (must start with \"sa-\")"},"role":{"type":"string","enum":["ADMIN","MEMBER","VIEWER"],"description":"The role to assign to the service account"}},"required":["name","role"],"additionalProperties":false}}},"required":true},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"query","name":"orgName","required":true,"description":"The name of the organization"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"query","name":"projectName","required":true,"description":"The name of the project"}],"security":[{"jwtToken":[]},{"secretToken":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"name":{"type":"string"},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"apiTokenCount":{"type":"number"},"role":{"type":"string","enum":["ADMIN","MEMBER","VIEWER"]}},"required":["id","name","createdAt","updatedAt","apiTokenCount","role"],"additionalProperties":false}}}},"400":{"description":"Bad request response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}}}},"401":{"description":"Unauthorized response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Unauthorized response"}}}},"403":{"description":"Forbidden response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Forbidden response"}}}},"404":{"description":"Not found response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Not found response"}}}}}}},"/tasks":{"get":{"operationId":"list-all-tasks","summary":"List all tasks","tags":["tasks"],"description":"List all tasks (super user only).","parameters":[{"schema":{"type":"integer","minimum":0,"maximum":9007199254740991},"in":"query","name":"pageOffset","required":false,"description":"The number of items to skip before starting to return results. Must be 0 or greater."},{"schema":{"type":"integer","minimum":1,"maximum":1000},"in":"query","name":"pageSize","required":false,"description":"The maximum number of items to return. Must be between 1 and 1000."},{"schema":{"type":"string","enum":["createdAt","taskType","runner","latestRunStatus"]},"in":"query","name":"sortBy","required":false,"description":"The field to sort by"},{"schema":{"type":"string","enum":["asc","desc"]},"in":"query","name":"sortDir","required":false,"description":"The direction to sort by"}],"security":[{"jwtToken":[]},{"secretToken":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"rows":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"The ID of the task"},"taskType":{"type":"string","description":"The type of the task"},"runner":{"type":"string","description":"The runner that executes the task"},"parameters":{"description":"JSON string of task parameters","type":["null","string"]},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","description":"When the task was created"},"name":{"type":"string","description":"Human-readable task name"},"targetUrl":{"description":"Optional target URL","type":["null","string"]},"orgName":{"description":"Org name (owner of task or project)","type":["null","string"]},"projectName":{"description":"Project name if task is project-scoped","type":["null","string"]},"assetName":{"description":"Asset name if task is asset-scoped","type":["null","string"]},"createdByName":{"type":"string","description":"Display name of user who created the task"},"latestRunStatus":{"anyOf":[{"type":"string","enum":["RUNNING","SUCCESS","FAILED"]},{"type":"null"}],"description":"Latest run status"},"latestRunDuration":{"description":"Latest run duration in seconds","type":["null","number"]}},"required":["id","taskType","runner","parameters","createdAt","name","targetUrl","orgName","projectName","createdByName","latestRunStatus","latestRunDuration"],"additionalProperties":false}},"rowCount":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["rows","rowCount"],"additionalProperties":false}}}},"400":{"description":"Bad request response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}}}},"401":{"description":"Unauthorized response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Unauthorized response"}}}},"403":{"description":"Unauthorized response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Unauthorized response"}}}}}}},"/users":{"get":{"operationId":"list-users","summary":"List users","tags":["users"],"description":"List users. Only super users can list users.","parameters":[{"schema":{"type":"integer","minimum":0,"maximum":9007199254740991},"in":"query","name":"pageOffset","required":false,"description":"The number of items to skip before starting to return results. Must be 0 or greater."},{"schema":{"type":"integer","minimum":1,"maximum":1000},"in":"query","name":"pageSize","required":false,"description":"The maximum number of items to return. Must be between 1 and 1000."},{"schema":{"type":"string","enum":["createdAt","email","name","fullName"]},"in":"query","name":"sortBy","required":false,"description":"The field to sort by"},{"schema":{"type":"string","enum":["asc","desc"]},"in":"query","name":"sortDir","required":false,"description":"The direction to sort by"},{"schema":{"type":"string","maxLength":256},"in":"query","name":"searchText","required":false}],"security":[{"jwtToken":[]},{"secretToken":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"rows":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"name":{"type":"string"}},"required":["id","name"],"additionalProperties":false}},"rowCount":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["rows","rowCount"],"additionalProperties":false}}}},"400":{"description":"Bad request response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}}}},"401":{"description":"Unauthorized response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Unauthorized response"}}}},"403":{"description":"Forbidden response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Forbidden response"}}}}}}},"/webhooks":{"get":{"operationId":"list-webhooks","summary":"List webhooks","tags":["webhooks"],"description":"List webhooks for an org or project scope.","parameters":[{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"query","name":"orgName","required":true,"description":"The name of the organization"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"query","name":"projectName","required":true,"description":"The name of the project"}],"security":[{"jwtToken":[]},{"secretToken":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"webhooks":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991,"description":"Unique numeric ID of the webhook registration"},"url":{"type":"string","maxLength":1024,"description":"The URL webhooks are delivered to"},"events":{"type":"array","items":{"type":"string","enum":["asset.created","asset.deleted","asset.liked","asset.moderated","asset.updated","comment.liked","comment.moderated","comment.new","comment.updated","external-auth.approved","member.added","member.removed","notification.new","org.created","org.deleted","org.invite","org.updated","product.created","product.deleted","product.updated","project.created","project.deleted","project.invite","project.updated"]},"description":"Subscribed event types; empty array means all events"},"description":{"description":"Description of the webhook","type":["null","string"]},"active":{"type":"boolean","description":"Whether the webhook is active"},"scope":{"type":"string","enum":["org","project"],"description":"Scope of this webhook registration"},"orgName":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$","description":"Organization this webhook belongs to"},"projectName":{"description":"Project this webhook belongs to (project-scoped only)","type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"}},"required":["id","url","events","description","active","scope","orgName","createdAt","updatedAt"],"additionalProperties":false}}},"required":["webhooks"],"additionalProperties":false}}}},"400":{"description":"Bad request response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}}}},"401":{"description":"Unauthorized response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Unauthorized response"}}}},"403":{"description":"Forbidden response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Forbidden response"}}}},"404":{"description":"Not found response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Not found response"}}}}}},"post":{"operationId":"create-webhook","summary":"Create webhook","tags":["webhooks"],"description":"Create a webhook at org or project scope. Secret is returned only on create.","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","maxLength":1024,"format":"uri","description":"The URL to deliver webhook events to"},"events":{"type":"array","items":{"type":"string","enum":["asset.created","asset.deleted","asset.liked","asset.moderated","asset.updated","comment.liked","comment.moderated","comment.new","comment.updated","external-auth.approved","member.added","member.removed","notification.new","org.created","org.deleted","org.invite","org.updated","product.created","product.deleted","product.updated","project.created","project.deleted","project.invite","project.updated"]},"description":"Event types to subscribe to; empty array subscribes to all events"},"secret":{"description":"HMAC signing secret; if omitted, the server generates one","type":"string","minLength":16,"maxLength":256},"description":{"description":"Human-readable description of this webhook","type":"string","maxLength":1024},"active":{"default":true,"description":"Whether the webhook is active","type":"boolean"}},"required":["url","events","active"],"additionalProperties":false}}},"required":true},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"query","name":"orgName","required":true,"description":"The name of the organization"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"query","name":"projectName","required":true,"description":"The name of the project"}],"security":[{"jwtToken":[]},{"secretToken":[]}],"responses":{"201":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991,"description":"Unique numeric ID of the webhook registration"},"url":{"type":"string","maxLength":1024,"description":"The URL webhooks are delivered to"},"events":{"type":"array","items":{"type":"string","enum":["asset.created","asset.deleted","asset.liked","asset.moderated","asset.updated","comment.liked","comment.moderated","comment.new","comment.updated","external-auth.approved","member.added","member.removed","notification.new","org.created","org.deleted","org.invite","org.updated","product.created","product.deleted","product.updated","project.created","project.deleted","project.invite","project.updated"]},"description":"Subscribed event types; empty array means all events"},"secret":{"description":"HMAC secret, returned only on creation","type":"string"},"description":{"description":"Description of the webhook","type":["null","string"]},"active":{"type":"boolean","description":"Whether the webhook is active"},"scope":{"type":"string","enum":["org","project"],"description":"Scope of this webhook registration"},"orgName":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$","description":"Organization this webhook belongs to"},"projectName":{"description":"Project this webhook belongs to (project-scoped only)","type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"}},"required":["id","url","events","description","active","scope","orgName","createdAt","updatedAt"],"additionalProperties":false}}}},"400":{"description":"Bad request response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}}}},"401":{"description":"Unauthorized response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Unauthorized response"}}}},"403":{"description":"Forbidden response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Forbidden response"}}}},"404":{"description":"Not found response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Not found response"}}}}}}},"/api-tokens/{apiTokenName}":{"delete":{"operationId":"delete-api-token","summary":"Delete API token","tags":["api-tokens"],"description":"Delete an API token by name.","parameters":[{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"query","name":"orgName","required":true,"description":"The name of the organization"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"query","name":"projectName","required":true,"description":"The name of the project"},{"schema":{"type":"string","maxLength":255},"in":"path","name":"apiTokenName","required":true,"description":"The name of the API token to delete"}],"security":[{"jwtToken":[]},{"secretToken":[]}],"responses":{"204":{"description":"No content response","content":{"application/json":{"schema":{"type":"object","properties":{},"additionalProperties":false,"description":"No content response"}}}},"400":{"description":"Bad request response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}}}},"401":{"description":"Unauthorized response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Unauthorized response"}}}},"403":{"description":"Forbidden response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Forbidden response"}}}},"404":{"description":"Not found response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Not found response"}}}}}}},"/auth/login/request-code":{"post":{"operationId":"login-request-code","summary":"Request login code","tags":["auth"],"description":"Request login code (OTP) to be sent via email","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"emailOrUsername":{"type":"string","minLength":1},"redirectTo":{"type":"string"}},"required":["emailOrUsername"],"additionalProperties":false}}},"required":true},"security":[{"anonymous":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"codeVerificationToken":{"type":"string"}},"required":["codeVerificationToken"],"additionalProperties":false}}}},"400":{"description":"Bad request response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}}}},"409":{"description":"Conflict response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Conflict response"}}}},"429":{"description":"Too many requests response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Too many requests response"}}}}}}},"/auth/login/verify-code":{"post":{"operationId":"login-verify-code","summary":"Verify login code","tags":["auth"],"description":"Verify login code (OTP) and authenticate user","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"codeVerificationToken":{"type":"string"},"otpCode":{"type":"string","minLength":8,"maxLength":8,"pattern":"^[A-Za-z0-9]+$"}},"required":["codeVerificationToken","otpCode"],"additionalProperties":false}}},"required":true},"security":[{"anonymous":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"userSessionToken":{"type":"string"},"accessToken":{"type":"string"}},"required":["userSessionToken","accessToken"],"additionalProperties":false}}}},"400":{"description":"Bad request response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}}}},"401":{"description":"Unauthorized response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Unauthorized response"}}}},"429":{"description":"Too many requests response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Too many requests response"}}}}}}},"/auth/refresh-token/{token}":{"delete":{"operationId":"delete-refresh-token","summary":"Delete refresh token","tags":["auth"],"description":"Delete a refresh token (session) by invalidating it","parameters":[{"schema":{"type":"string"},"in":"path","name":"token","required":true,"description":"The refresh token to delete"}],"security":[{"sessionToken":[]},{"secretToken":[]}],"responses":{"204":{"description":"No content response","content":{"application/json":{"schema":{"type":"object","properties":{},"additionalProperties":false,"description":"No content response"}}}},"400":{"description":"Bad request response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}}}},"401":{"description":"Unauthorized response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Unauthorized response"}}}},"403":{"description":"Forbidden response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Forbidden response"}}}},"404":{"description":"Not found response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Not found response"}}}}}}},"/auth/signup/complete":{"post":{"operationId":"signup-complete","summary":"Complete signup","tags":["auth"],"description":"Complete signup by creating user with username and legal agreement acceptance","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"userRequestId":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"userName":{"type":"string","minLength":1,"maxLength":50,"pattern":"^[a-zA-Z0-9_-]+$"},"legalAgreementAccepted":{"type":"boolean"}},"required":["userRequestId","userName","legalAgreementAccepted"],"additionalProperties":false}}},"required":true},"security":[{"anonymous":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"userSessionToken":{"type":"string"},"accessToken":{"type":"string"}},"required":["userSessionToken","accessToken"],"additionalProperties":false}}}},"400":{"description":"Bad request response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}}}},"403":{"description":"Forbidden response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Forbidden response"}}}},"404":{"description":"Not found response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Not found response"}}}},"429":{"description":"Too many requests response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Too many requests response"}}}}}}},"/auth/signup/initiate":{"post":{"operationId":"signup-initiate","summary":"Initiate signup","tags":["auth"],"description":"Initiate email-based signup flow by creating a signup request and sending verification code","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string","format":"email","pattern":"^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"},"redirectTo":{"type":"string"}},"required":["email"],"additionalProperties":false}}},"required":true},"security":[{"anonymous":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"codeVerificationToken":{"type":"string"}},"required":["codeVerificationToken"],"additionalProperties":false}}}},"400":{"description":"Bad request response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}}}},"409":{"description":"Conflict response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Conflict response"}}}},"429":{"description":"Too many requests response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Too many requests response"}}}}}}},"/auth/signup/verify-email":{"post":{"operationId":"signup-verify-email","summary":"Verify signup email","tags":["auth"],"description":"Verify email code during signup flow","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"codeVerificationToken":{"type":"string"},"otpCode":{"type":"string","minLength":8,"maxLength":8,"pattern":"^[A-Za-z0-9]+$"}},"required":["codeVerificationToken","otpCode"],"additionalProperties":false}}},"required":true},"security":[{"anonymous":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"userRequestId":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"email":{"type":"string","format":"email","pattern":"^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"}},"required":["userRequestId","email"],"additionalProperties":false}}}},"400":{"description":"Bad request response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}}}},"401":{"description":"Unauthorized response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Unauthorized response"}}}},"429":{"description":"Too many requests response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Too many requests response"}}}}}}},"/email-pixel/{token}":{"get":{"operationId":"email-pixel","summary":"Email tracking pixel","tags":["email"],"description":"Email open tracking pixel. Returns a 1x1 transparent GIF and records the open event.","parameters":[{"schema":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"in":"path","name":"token","required":true}],"security":[],"responses":{"200":{"description":"Successful response","content":{"image/gif":{"schema":{"description":"Successful response","type":"string","format":"binary"}}}}}}},"/files/{oid}":{"get":{"operationId":"get-file","summary":"Get storage file","tags":["files"],"description":"Redirect to immutable object storage content. GCS negotiates gzip with the downloading client.","parameters":[{"schema":{"type":"string"},"in":"query","name":"name","required":false,"description":"Optional asset name to use in Content-Disposition header"},{"schema":{"type":"string","pattern":"^[a-f0-9]{64}$"},"in":"path","name":"oid","required":true,"description":"OID of the storage file"}],"responses":{"302":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"redirectUrl":{"type":"string"}},"required":["redirectUrl"],"additionalProperties":false}}}},"400":{"description":"Bad request response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}}}},"404":{"description":"Not found response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Not found response"}}}},"503":{"description":"Bad request response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}}}}}}},"/member-invites/{memberInviteId}":{"delete":{"operationId":"delete-member-invite","summary":"Delete member invite","tags":["member-invites"],"description":"Delete a member invite. Only admins of the organization or project can delete invites.","parameters":[{"schema":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"in":"path","name":"memberInviteId","required":true}],"security":[{"jwtToken":[]},{"secretToken":[]}],"responses":{"204":{"description":"No content response","content":{"application/json":{"schema":{"type":"object","properties":{},"additionalProperties":false,"description":"No content response"}}}},"400":{"description":"Bad request response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}}}},"401":{"description":"Unauthorized response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Unauthorized response"}}}},"403":{"description":"Forbidden response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Forbidden response"}}}},"404":{"description":"Not found response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Not found response"}}}}}},"get":{"operationId":"get-member-invite","summary":"Get member invite","tags":["member-invites"],"description":"Get a member invite by ID. Users can view their own invites, and admins can view invites for their organizations or projects.","parameters":[{"schema":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"in":"path","name":"memberInviteId","required":true}],"security":[{"jwtToken":[]},{"secretToken":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"The ID of the member invite"},"role":{"type":"string","enum":["ADMIN","MEMBER","VIEWER"],"description":"The role of the member invite"},"status":{"type":"string","enum":["PENDING","ACCEPTED","REJECTED"],"description":"The status of the member invite"},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","description":"The date and time the member invite was created"},"updatedAt":{"description":"The date and time the member invite was updated","type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"invitedByUserId":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"The ID of the user who invited the member"},"inviteeUserId":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"The ID of the user who was invited"},"inviteeEmail":{"description":"The email of the user who was invited","type":["null","string"]},"memberId":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"The ID of the member who was invited"},"orgId":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"The ID of the organization"},"projectId":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"The ID of the project"},"orgName":{"description":"The name of the organization","type":["null","string"]},"projectName":{"description":"The name of the project","type":["null","string"]},"userAccountEmail":{"description":"The email of the user who was invited","type":["null","string"]},"userFullName":{"description":"The full name of the user who was invited","type":["null","string"]},"userName":{"description":"The username of the user who was invited","type":["null","string"]},"userPersonalOrgId":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"The ID of the personal organization of the user who was invited"}},"required":["id","role","status","createdAt","invitedByUserId","inviteeUserId","inviteeEmail","memberId","orgId","projectId","orgName","projectName","userAccountEmail","userFullName","userName","userPersonalOrgId"],"additionalProperties":false}}}},"400":{"description":"Bad request response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}}}},"401":{"description":"Unauthorized response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Unauthorized response"}}}},"403":{"description":"Forbidden response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Forbidden response"}}}},"404":{"description":"Not found response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Not found response"}}}}}},"post":{"operationId":"respond-to-member-invite","summary":"Respond to member invite","tags":["member-invites"],"description":"Respond to a member invite by accepting or rejecting it. Only the invited user can respond to their own invites.","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["ACCEPT","REJECT"]}},"required":["status"],"additionalProperties":false}}},"required":true},"parameters":[{"schema":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"in":"path","name":"memberInviteId","required":true}],"security":[{"jwtToken":[]},{"secretToken":[]}],"responses":{"204":{"description":"No content response","content":{"application/json":{"schema":{"type":"object","properties":{},"additionalProperties":false,"description":"No content response"}}}},"400":{"description":"Bad request response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}}}},"401":{"description":"Unauthorized response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Unauthorized response"}}}},"403":{"description":"Forbidden response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Forbidden response"}}}},"404":{"description":"Not found response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Not found response"}}}}}}},"/member-invites/token":{"get":{"operationId":"get-member-invite-from-token","summary":"Get member invite from token","tags":["member-invites"],"description":"Get a member invite by invite token. This endpoint is public and used for invite links sent via email.","parameters":[{"schema":{"type":"string","maxLength":10240},"in":"query","name":"inviteToken","required":true,"description":"The JWT token"}],"security":[],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"invite":{"type":"object","properties":{"id":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"The ID of the member invite"},"role":{"type":"string","enum":["ADMIN","MEMBER","VIEWER"],"description":"The role of the member invite"},"status":{"type":"string","enum":["PENDING","ACCEPTED","REJECTED"],"description":"The status of the member invite"},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","description":"The date and time the member invite was created"},"updatedAt":{"description":"The date and time the member invite was updated","type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"invitedByUserId":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"The ID of the user who invited the member"},"inviteeUserId":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"The ID of the user who was invited"},"inviteeEmail":{"description":"The email of the user who was invited","type":["null","string"]},"memberId":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"The ID of the member who was invited"},"orgId":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"The ID of the organization"},"projectId":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"The ID of the project"},"orgName":{"description":"The name of the organization","type":["null","string"]},"projectName":{"description":"The name of the project","type":["null","string"]},"userAccountEmail":{"description":"The email of the user who was invited","type":["null","string"]},"userFullName":{"description":"The full name of the user who was invited","type":["null","string"]},"userName":{"description":"The username of the user who was invited","type":["null","string"]},"userPersonalOrgId":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"The ID of the personal organization of the user who was invited"}},"required":["id","role","status","createdAt","invitedByUserId","inviteeUserId","inviteeEmail","memberId","orgId","projectId","orgName","projectName","userAccountEmail","userFullName","userName","userPersonalOrgId"],"additionalProperties":false},"targetName":{"type":["null","string"]}},"required":["invite","targetName"],"additionalProperties":false}}}},"400":{"description":"Bad request response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}}}},"401":{"description":"Unauthorized response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Unauthorized response"}}}},"404":{"description":"Not found response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Not found response"}}}}}},"post":{"operationId":"respond-to-member-invite-token","summary":"Respond to member invite token","tags":["member-invites"],"description":"Respond to a member invite using an invite token by accepting or rejecting it. Used for invite links sent via email. Note: This endpoint intentionally does not verify that the authenticated user's email matches the invite email. This allows users with multiple email addresses to accept invites sent to an email that differs from their registered account email. The token itself serves as the authorization mechanism, having been delivered to the invitee's email address.","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["ACCEPT","REJECT"]}},"required":["status"],"additionalProperties":false}}},"required":true},"parameters":[{"schema":{"type":"string","maxLength":10240},"in":"query","name":"inviteToken","required":true,"description":"The JWT token"}],"security":[{"jwtToken":[]},{"secretToken":[]}],"responses":{"204":{"description":"No content response","content":{"application/json":{"schema":{"type":"object","properties":{},"additionalProperties":false,"description":"No content response"}}}},"400":{"description":"Bad request response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}}}},"401":{"description":"Unauthorized response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Unauthorized response"}}}},"403":{"description":"Forbidden response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Forbidden response"}}}},"404":{"description":"Not found response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Not found response"}}}}}}},"/notifications/{notificationId}":{"patch":{"operationId":"mark-notification-as-read","summary":"Mark notification as read","tags":["notifications"],"description":"Mark a specific notification as read for the authenticated user.","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["READ"]}},"required":["status"],"additionalProperties":false}}},"required":true},"parameters":[{"schema":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"in":"path","name":"notificationId","required":true}],"security":[{"jwtToken":[]},{"secretToken":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{}}}},"400":{"description":"Bad request response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}}}},"401":{"description":"Unauthorized response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Unauthorized response"}}}},"403":{"description":"Forbidden response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Forbidden response"}}}},"404":{"description":"Not found response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Not found response"}}}}}}},"/orgs/{orgName}":{"delete":{"operationId":"delete-org","summary":"Delete organization","tags":["orgs"],"description":"Delete an organization. The organization must not have any projects.","parameters":[{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"orgName","required":true,"description":"The name of the organization"}],"security":[{"jwtToken":[]},{"secretToken":[]}],"responses":{"204":{"description":"No content response","content":{"application/json":{"schema":{"type":"object","properties":{},"additionalProperties":false,"description":"No content response"}}}},"400":{"description":"Bad request response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}}}},"401":{"description":"Unauthorized response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Unauthorized response"}}}},"403":{"description":"Forbidden response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Forbidden response"}}}},"404":{"description":"Not found response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Not found response"}}}}}},"get":{"operationId":"get-org","summary":"Get organization","tags":["orgs"],"description":"Get organization details by organization name.","parameters":[{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"orgName","required":true,"description":"The name of the organization"}],"security":[{"jwtToken":[]},{"secretToken":[]},{"frontendToken":[]},{}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"The ID of the organization"},"name":{"type":"string","description":"The name of the organization"},"description":{"type":"string","description":"The description of the organization"},"visibility":{"type":"string","enum":["PRIVATE","PUBLIC"],"description":"The visibility of the organization"},"location":{"type":"string","description":"The location of the organization"},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","description":"The date and time the organization was created"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","description":"The date and time the organization was updated"},"isPersonalOrg":{"type":"boolean","description":"Whether the organization is a personal organization"},"socialLinks":{"default":[],"description":"Social media links for the organization","type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["BLUESKY","FACEBOOK","GITHUB","INSTAGRAM","LINKEDIN","MASTODON","REDDIT","TIKTOK","YOUTUBE","TWITTER","CUSTOM"]},"url":{"type":"string","format":"uri"}},"required":["type","url"],"additionalProperties":false}}},"required":["id","name","description","visibility","location","createdAt","updatedAt","isPersonalOrg","socialLinks"],"additionalProperties":false}}}},"400":{"description":"Bad request response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}}}},"401":{"description":"Unauthorized response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Unauthorized response"}}}},"403":{"description":"Forbidden response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Forbidden response"}}}},"404":{"description":"Not found response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Not found response"}}}}}},"patch":{"operationId":"update-org","summary":"Update organization","tags":["orgs"],"description":"Update organization profile and settings including name, description, location, and visibility.","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"description":"The new name for the organization","type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"description":{"description":"The new description for the organization","type":"string","maxLength":10240},"location":{"description":"The location of the organization","type":"string","maxLength":256},"visibility":{"description":"The new visibility level (PUBLIC or PRIVATE)","type":"string","enum":["PRIVATE","PUBLIC"]},"socialLinks":{"description":"Social media links for the organization","type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["BLUESKY","FACEBOOK","GITHUB","INSTAGRAM","LINKEDIN","MASTODON","REDDIT","TIKTOK","YOUTUBE","TWITTER","CUSTOM"]},"url":{"type":"string","format":"uri"}},"required":["type","url"],"additionalProperties":false}}},"additionalProperties":false}}}},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"orgName","required":true,"description":"The name of the organization"}],"security":[{"jwtToken":[]},{"secretToken":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"The ID of the organization"},"name":{"type":"string","description":"The name of the organization"},"description":{"type":"string","description":"The description of the organization"},"visibility":{"type":"string","enum":["PRIVATE","PUBLIC"],"description":"The visibility of the organization"},"location":{"type":"string","description":"The location of the organization"},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","description":"The date and time the organization was created"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","description":"The date and time the organization was updated"},"isPersonalOrg":{"type":"boolean","description":"Whether the organization is a personal organization"},"socialLinks":{"default":[],"description":"Social media links for the organization","type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["BLUESKY","FACEBOOK","GITHUB","INSTAGRAM","LINKEDIN","MASTODON","REDDIT","TIKTOK","YOUTUBE","TWITTER","CUSTOM"]},"url":{"type":"string","format":"uri"}},"required":["type","url"],"additionalProperties":false}}},"required":["id","name","description","visibility","location","createdAt","updatedAt","isPersonalOrg","socialLinks"],"additionalProperties":false}}}},"400":{"description":"Bad request response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}}}},"401":{"description":"Unauthorized response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Unauthorized response"}}}},"403":{"description":"Forbidden response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Forbidden response"}}}},"404":{"description":"Not found response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Not found response"}}}}}}},"/projects/{orgName}":{"post":{"operationId":"create-project","summary":"Create project","tags":["projects"],"description":"Create a new project in the specified organization.","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$","description":"The name of the project"},"description":{"description":"Optional description of the project","type":"string","maxLength":10240},"visibility":{"type":"string","enum":["PRIVATE","PUBLIC"],"description":"Visibility level: PUBLIC (anyone can view) or PRIVATE (members only)"}},"required":["name","visibility"],"additionalProperties":false}}},"required":true},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"orgName","required":true,"description":"The name of the organization"}],"security":[{"jwtToken":[]},{"secretToken":[]}],"responses":{"201":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"The ID of the project"},"name":{"type":"string","description":"The name of the project"},"description":{"type":"string","description":"The description of the project"},"visibility":{"type":"string","enum":["PRIVATE","PUBLIC"],"description":"The visibility of the project"},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","description":"The date and time the project was created"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","description":"The date and time the project was updated"},"orgId":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"The ID of the organization"},"orgName":{"type":"string","description":"The name of the organization"}},"required":["id","name","description","visibility","createdAt","updatedAt","orgId","orgName"],"additionalProperties":false}}}},"400":{"description":"Bad request response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}}}},"401":{"description":"Unauthorized response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Unauthorized response"}}}},"403":{"description":"Forbidden response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Forbidden response"}}}},"404":{"description":"Not found response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Not found response"}}}},"429":{"description":"Too many requests response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Too many requests response"}}}}}}},"/service-accounts/{serviceAccountName}":{"delete":{"operationId":"delete-service-account","summary":"Delete service account","tags":["service-accounts"],"description":"Delete a service account from an organization or project. Only admins can delete service accounts.","parameters":[{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"query","name":"orgName","required":true,"description":"The name of the organization"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"query","name":"projectName","required":true,"description":"The name of the project"},{"schema":{"type":"string","minLength":1,"maxLength":30,"allOf":[{"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},{"pattern":"^sa-"}]},"in":"path","name":"serviceAccountName","required":true,"description":"The name of the service account"}],"security":[{"jwtToken":[]},{"secretToken":[]}],"responses":{"204":{"description":"No content response","content":{"application/json":{"schema":{"type":"object","properties":{},"additionalProperties":false,"description":"No content response"}}}},"400":{"description":"Bad request response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}}}},"401":{"description":"Unauthorized response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Unauthorized response"}}}},"403":{"description":"Forbidden response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Forbidden response"}}}},"404":{"description":"Not found response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Not found response"}}}}}}},"/private/stripe/webhook":{"post":{"operationId":"stripe-webhook","summary":"Stripe webhook handler","tags":["health"],"description":"Stripe webhook endpoint for subscription events. Verifies webhook signatures and handles subscription lifecycle events. This is a private endpoint for Stripe webhooks only.","security":[],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"received":{"type":"boolean"}},"required":["received"],"additionalProperties":false}}}},"400":{"description":"Bad request response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}}}},"500":{"description":"Server error response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Server error response"}}}}}}},"/users/{userName}":{"delete":{"operationId":"delete-user","summary":"Delete user","tags":["users"],"description":"Delete a user account. Users cannot be deleted if they are admins of organizations or projects. The user is permanently deleted.","parameters":[{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"userName","required":true,"description":"The name of the user"}],"security":[{"jwtToken":[]},{"secretToken":[]}],"responses":{"204":{"description":"No content response","content":{"application/json":{"schema":{"type":"object","properties":{},"additionalProperties":false,"description":"No content response"}}}},"400":{"description":"Bad request response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}}}},"401":{"description":"Unauthorized response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Unauthorized response"}}}},"403":{"description":"Forbidden response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Forbidden response"}}}},"404":{"description":"Not found response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Not found response"}}}}}},"get":{"operationId":"get-user","summary":"Get user","tags":["users"],"description":"Get user details by username.","parameters":[{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"userName","required":true,"description":"The name of the user"}],"security":[{"jwtToken":[]},{"secretToken":[]},{"frontendToken":[]},{}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"name":{"type":"string"}},"required":["id","name"],"additionalProperties":false}}}},"400":{"description":"Bad request response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}}}},"401":{"description":"Unauthorized response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Unauthorized response"}}}},"403":{"description":"Forbidden response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Forbidden response"}}}},"404":{"description":"Not found response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Not found response"}}}}}},"patch":{"operationId":"update-user","summary":"Update user","tags":["users"],"description":"Update user profile including name, full name, location, role, contact information, and email notification preferences.","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$","description":"The name of the user"},"fullName":{"type":"string","maxLength":255},"country":{"anyOf":[{"type":"string","enum":["~","AD","AE","AF","AG","AI","AL","AM","AO","AQ","AR","AS","AT","AU","AW","AX","AZ","BA","BB","BD","BE","BF","BG","BH","BI","BJ","BL","BM","BN","BO","BQ","BR","BS","BT","BV","BW","BY","BZ","CA","CC","CD","CF","CG","CH","CI","CK","CL","CM","CN","CO","CR","CU","CV","CW","CX","CY","CZ","DE","DJ","DK","DM","DO","DZ","EC","EE","EG","EH","ER","ES","ET","FI","FJ","FK","FM","FO","FR","GA","GB","GD","GE","GF","GG","GH","GI","GL","GM","GN","GP","GQ","GR","GS","GT","GU","GW","GY","HK","HM","HN","HR","HT","HU","ID","IE","IL","IM","IN","IO","IQ","IR","IS","IT","JE","JM","JO","JP","KE","KG","KH","KI","KM","KN","KP","KR","KW","KY","KZ","LA","LB","LC","LI","LK","LR","LS","LT","LU","LV","LY","MA","MC","MD","ME","MF","MG","MH","MK","ML","MM","MN","MO","MP","MQ","MR","MS","MT","MU","MV","MW","MX","MY","MZ","NA","NC","NE","NF","NG","NI","NL","NO","NP","NR","NU","NZ","OM","PA","PE","PF","PG","PH","PK","PL","PM","PN","PR","PS","PT","PW","PY","QA","RE","RO","RS","RU","RW","SA","SB","SC","SD","SE","SG","SH","SI","SJ","SK","SL","SM","SN","SO","SR","SS","ST","SV","SY","SZ","TC","TD","TF","TG","TH","TJ","TK","TL","TM","TN","TO","TR","TT","TV","TW","TZ","UA","UG","UM","US","UY","UZ","VA","VC","VE","VG","VI","VN","VU","WF","WS","YE","ZM","ZW"]},{"type":"null"}]},"city":{"type":"string","maxLength":100},"role":{"type":"string","maxLength":255},"company":{"type":"string","maxLength":255},"phoneNumber":{"type":"string","maxLength":50},"emailNotifications":{"type":"boolean"},"emailNewsletterUpdates":{"type":"boolean"},"emailAssetLikeNotifications":{"type":"boolean"},"emailCommentLikeNotifications":{"type":"boolean"}},"additionalProperties":false}}}},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"userName","required":true,"description":"The name of the user"}],"security":[{"jwtToken":[]},{"secretToken":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"The ID of the user"},"name":{"type":"string","description":"The username of the user"},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","description":"The date and time the user was created"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","description":"The date and time the user was updated"},"email":{"type":"string","description":"The email of the user"},"fullName":{"type":"string","description":"The full name of the user"},"country":{"anyOf":[{"type":"string","enum":["~","AD","AE","AF","AG","AI","AL","AM","AO","AQ","AR","AS","AT","AU","AW","AX","AZ","BA","BB","BD","BE","BF","BG","BH","BI","BJ","BL","BM","BN","BO","BQ","BR","BS","BT","BV","BW","BY","BZ","CA","CC","CD","CF","CG","CH","CI","CK","CL","CM","CN","CO","CR","CU","CV","CW","CX","CY","CZ","DE","DJ","DK","DM","DO","DZ","EC","EE","EG","EH","ER","ES","ET","FI","FJ","FK","FM","FO","FR","GA","GB","GD","GE","GF","GG","GH","GI","GL","GM","GN","GP","GQ","GR","GS","GT","GU","GW","GY","HK","HM","HN","HR","HT","HU","ID","IE","IL","IM","IN","IO","IQ","IR","IS","IT","JE","JM","JO","JP","KE","KG","KH","KI","KM","KN","KP","KR","KW","KY","KZ","LA","LB","LC","LI","LK","LR","LS","LT","LU","LV","LY","MA","MC","MD","ME","MF","MG","MH","MK","ML","MM","MN","MO","MP","MQ","MR","MS","MT","MU","MV","MW","MX","MY","MZ","NA","NC","NE","NF","NG","NI","NL","NO","NP","NR","NU","NZ","OM","PA","PE","PF","PG","PH","PK","PL","PM","PN","PR","PS","PT","PW","PY","QA","RE","RO","RS","RU","RW","SA","SB","SC","SD","SE","SG","SH","SI","SJ","SK","SL","SM","SN","SO","SR","SS","ST","SV","SY","SZ","TC","TD","TF","TG","TH","TJ","TK","TL","TM","TN","TO","TR","TT","TV","TW","TZ","UA","UG","UM","US","UY","UZ","VA","VC","VE","VG","VI","VN","VU","WF","WS","YE","ZM","ZW"]},{"type":"null"}],"description":"The country of the user (null for service accounts)"},"company":{"type":"string","description":"The company of the user"},"city":{"type":"string","description":"The city of the user"},"role":{"type":"string","description":"The role of the user"},"phoneNumber":{"type":"string","description":"The phone number of the user"},"type":{"type":"string","enum":["STANDARD","SERVICE_ACCOUNT"],"description":"The type of the user"},"personalOrgId":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"The personal organization id of the user"},"emailNotifications":{"type":"boolean","description":"Whether the user receives email notifications"},"emailNewsletterUpdates":{"type":"boolean","description":"Whether the user receives email newsletter updates"},"emailAssetLikeNotifications":{"type":"boolean","description":"Whether the user receives email asset like notifications"},"emailCommentLikeNotifications":{"type":"boolean","description":"Whether the user receives email comment like notifications"}},"required":["id","name","createdAt","updatedAt","email","fullName","country","company","city","role","phoneNumber","type","personalOrgId","emailNotifications","emailNewsletterUpdates","emailAssetLikeNotifications","emailCommentLikeNotifications"],"additionalProperties":false}}}},"400":{"description":"Bad request response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}}}},"401":{"description":"Unauthorized response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Unauthorized response"}}}},"403":{"description":"Forbidden response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Forbidden response"}}}},"404":{"description":"Not found response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Not found response"}}}}}}},"/users/{userName}/private":{"get":{"operationId":"get-user-private","summary":"Get private user","tags":["users"],"description":"Get private user details by username. Users can only view their own private details unless they are super users.","parameters":[{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"userName","required":true,"description":"The name of the user"}],"security":[{"jwtToken":[]},{"secretToken":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"The ID of the user"},"name":{"type":"string","description":"The username of the user"},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","description":"The date and time the user was created"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","description":"The date and time the user was updated"},"email":{"type":"string","description":"The email of the user"},"fullName":{"type":"string","description":"The full name of the user"},"country":{"anyOf":[{"type":"string","enum":["~","AD","AE","AF","AG","AI","AL","AM","AO","AQ","AR","AS","AT","AU","AW","AX","AZ","BA","BB","BD","BE","BF","BG","BH","BI","BJ","BL","BM","BN","BO","BQ","BR","BS","BT","BV","BW","BY","BZ","CA","CC","CD","CF","CG","CH","CI","CK","CL","CM","CN","CO","CR","CU","CV","CW","CX","CY","CZ","DE","DJ","DK","DM","DO","DZ","EC","EE","EG","EH","ER","ES","ET","FI","FJ","FK","FM","FO","FR","GA","GB","GD","GE","GF","GG","GH","GI","GL","GM","GN","GP","GQ","GR","GS","GT","GU","GW","GY","HK","HM","HN","HR","HT","HU","ID","IE","IL","IM","IN","IO","IQ","IR","IS","IT","JE","JM","JO","JP","KE","KG","KH","KI","KM","KN","KP","KR","KW","KY","KZ","LA","LB","LC","LI","LK","LR","LS","LT","LU","LV","LY","MA","MC","MD","ME","MF","MG","MH","MK","ML","MM","MN","MO","MP","MQ","MR","MS","MT","MU","MV","MW","MX","MY","MZ","NA","NC","NE","NF","NG","NI","NL","NO","NP","NR","NU","NZ","OM","PA","PE","PF","PG","PH","PK","PL","PM","PN","PR","PS","PT","PW","PY","QA","RE","RO","RS","RU","RW","SA","SB","SC","SD","SE","SG","SH","SI","SJ","SK","SL","SM","SN","SO","SR","SS","ST","SV","SY","SZ","TC","TD","TF","TG","TH","TJ","TK","TL","TM","TN","TO","TR","TT","TV","TW","TZ","UA","UG","UM","US","UY","UZ","VA","VC","VE","VG","VI","VN","VU","WF","WS","YE","ZM","ZW"]},{"type":"null"}],"description":"The country of the user (null for service accounts)"},"company":{"type":"string","description":"The company of the user"},"city":{"type":"string","description":"The city of the user"},"role":{"type":"string","description":"The role of the user"},"phoneNumber":{"type":"string","description":"The phone number of the user"},"type":{"type":"string","enum":["STANDARD","SERVICE_ACCOUNT"],"description":"The type of the user"},"personalOrgId":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"The personal organization id of the user"},"emailNotifications":{"type":"boolean","description":"Whether the user receives email notifications"},"emailNewsletterUpdates":{"type":"boolean","description":"Whether the user receives email newsletter updates"},"emailAssetLikeNotifications":{"type":"boolean","description":"Whether the user receives email asset like notifications"},"emailCommentLikeNotifications":{"type":"boolean","description":"Whether the user receives email comment like notifications"}},"required":["id","name","createdAt","updatedAt","email","fullName","country","company","city","role","phoneNumber","type","personalOrgId","emailNotifications","emailNewsletterUpdates","emailAssetLikeNotifications","emailCommentLikeNotifications"],"additionalProperties":false}}}},"400":{"description":"Bad request response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}}}},"401":{"description":"Unauthorized response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Unauthorized response"}}}},"403":{"description":"Forbidden response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Forbidden response"}}}},"404":{"description":"Not found response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Not found response"}}}}}}},"/webhooks/{webhookId}":{"delete":{"operationId":"delete-webhook","summary":"Delete webhook","tags":["webhooks"],"description":"Delete a webhook by ID.","parameters":[{"schema":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"in":"path","name":"webhookId","required":true,"description":"The numeric ID of the webhook"}],"security":[{"jwtToken":[]},{"secretToken":[]}],"responses":{"204":{"description":"No content response","content":{"application/json":{"schema":{"type":"object","properties":{},"additionalProperties":false,"description":"No content response"}}}},"400":{"description":"Bad request response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}}}},"401":{"description":"Unauthorized response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Unauthorized response"}}}},"403":{"description":"Forbidden response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Forbidden response"}}}},"404":{"description":"Not found response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Not found response"}}}}}},"get":{"operationId":"get-webhook","summary":"Get webhook","tags":["webhooks"],"description":"Get a webhook by ID.","parameters":[{"schema":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"in":"path","name":"webhookId","required":true,"description":"The numeric ID of the webhook"}],"security":[{"jwtToken":[]},{"secretToken":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991,"description":"Unique numeric ID of the webhook registration"},"url":{"type":"string","maxLength":1024,"description":"The URL webhooks are delivered to"},"events":{"type":"array","items":{"type":"string","enum":["asset.created","asset.deleted","asset.liked","asset.moderated","asset.updated","comment.liked","comment.moderated","comment.new","comment.updated","external-auth.approved","member.added","member.removed","notification.new","org.created","org.deleted","org.invite","org.updated","product.created","product.deleted","product.updated","project.created","project.deleted","project.invite","project.updated"]},"description":"Subscribed event types; empty array means all events"},"description":{"description":"Description of the webhook","type":["null","string"]},"active":{"type":"boolean","description":"Whether the webhook is active"},"scope":{"type":"string","enum":["org","project"],"description":"Scope of this webhook registration"},"orgName":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$","description":"Organization this webhook belongs to"},"projectName":{"description":"Project this webhook belongs to (project-scoped only)","type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"}},"required":["id","url","events","description","active","scope","orgName","createdAt","updatedAt"],"additionalProperties":false}}}},"400":{"description":"Bad request response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}}}},"401":{"description":"Unauthorized response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Unauthorized response"}}}},"403":{"description":"Forbidden response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Forbidden response"}}}},"404":{"description":"Not found response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Not found response"}}}}}},"patch":{"operationId":"update-webhook","summary":"Update webhook","tags":["webhooks"],"description":"Update a webhook by ID.","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"description":"The URL to deliver webhook events to","type":"string","maxLength":1024,"format":"uri"},"events":{"description":"Event types to subscribe to; empty array subscribes to all events","type":"array","items":{"type":"string","enum":["asset.created","asset.deleted","asset.liked","asset.moderated","asset.updated","comment.liked","comment.moderated","comment.new","comment.updated","external-auth.approved","member.added","member.removed","notification.new","org.created","org.deleted","org.invite","org.updated","product.created","product.deleted","product.updated","project.created","project.deleted","project.invite","project.updated"]}},"active":{"description":"Whether the webhook is active","type":"boolean"},"description":{"description":"Human-readable description of this webhook","type":"string","maxLength":1024},"secret":{"description":"Rotate the HMAC signing secret; new secret replaces the old one","type":"string","minLength":16,"maxLength":256}},"additionalProperties":false}}}},"parameters":[{"schema":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"in":"path","name":"webhookId","required":true,"description":"The numeric ID of the webhook"}],"security":[{"jwtToken":[]},{"secretToken":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991,"description":"Unique numeric ID of the webhook registration"},"url":{"type":"string","maxLength":1024,"description":"The URL webhooks are delivered to"},"events":{"type":"array","items":{"type":"string","enum":["asset.created","asset.deleted","asset.liked","asset.moderated","asset.updated","comment.liked","comment.moderated","comment.new","comment.updated","external-auth.approved","member.added","member.removed","notification.new","org.created","org.deleted","org.invite","org.updated","product.created","product.deleted","product.updated","project.created","project.deleted","project.invite","project.updated"]},"description":"Subscribed event types; empty array means all events"},"secret":{"description":"HMAC secret, returned only on creation","type":"string"},"description":{"description":"Description of the webhook","type":["null","string"]},"active":{"type":"boolean","description":"Whether the webhook is active"},"scope":{"type":"string","enum":["org","project"],"description":"Scope of this webhook registration"},"orgName":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$","description":"Organization this webhook belongs to"},"projectName":{"description":"Project this webhook belongs to (project-scoped only)","type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"}},"required":["id","url","events","description","active","scope","orgName","createdAt","updatedAt"],"additionalProperties":false}}}},"400":{"description":"Bad request response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}}}},"401":{"description":"Unauthorized response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Unauthorized response"}}}},"403":{"description":"Forbidden response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Forbidden response"}}}},"404":{"description":"Not found response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Not found response"}}}}}}},"/assets/{orgName}/{projectName}":{"post":{"operationId":"create-asset","summary":"Create asset","tags":["assets"],"description":"Create a new asset in a project. Requires a prepared upload via the prepare-upload endpoint.","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"version":{"type":"string","pattern":"^(0|[1-9][0-9]*)\\.(0|[1-9][0-9]*)\\.(0|[1-9][0-9]*)$"},"name":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$","description":"The name of the asset"},"description":{"description":"Optional description of the asset","type":"string","maxLength":10240},"type":{"type":"string","enum":["MODEL","MATERIAL","IMAGE","SCENE","ENVMAP","CAD","LIGHT"],"description":"The type of asset"},"uploadToken":{"type":"string","description":"The upload token from prepareAssetUpload"},"visibility":{"type":"string","enum":["PRIVATE","UNLISTED","PUBLIC"],"description":"Visibility level: PUBLIC (anyone can view) or PRIVATE (members only)"},"shareLicense":{"type":"string","enum":["NONE","CC_0","CC_BY","CC_BY_SA","CC_BY_NC","CC_BY_NC_SA","CC_BY_ND","CC_BY_NC_ND"],"description":"The license for sharing the asset"},"aiUsage":{"description":"Optional AI usage policy","type":"string","enum":["UNDISCLOSED","AI_USED","AI_FREE"]},"commentMode":{"description":"Comment mode: ENABLED (default), MEMBERS_ONLY, or NONE","type":"string","enum":["ENABLED","MEMBERS_ONLY","NONE"]},"metadata":{"description":"Optional metadata as a string (max 10240 characters)","type":"string","maxLength":10240}},"required":["name","type","uploadToken","visibility","shareLicense"],"additionalProperties":false}}},"required":true},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"orgName","required":true,"description":"The name of the organization"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"projectName","required":true,"description":"The name of the project"}],"security":[{"jwtToken":[]},{"secretToken":[]}],"responses":{"201":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"name":{"type":"string"},"type":{"type":"string","enum":["MODEL","MATERIAL","IMAGE","SCENE","ENVMAP","CAD","LIGHT"]},"visibility":{"type":"string","enum":["PRIVATE","UNLISTED","PUBLIC"],"description":"The visibility of the asset"},"projectId":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"projectName":{"type":"string"},"orgId":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"orgName":{"type":"string"},"description":{"type":"string"},"keywords":{"type":"string"},"shareLicense":{"type":"string","enum":["NONE","CC_0","CC_BY","CC_BY_SA","CC_BY_NC","CC_BY_NC_SA","CC_BY_ND","CC_BY_NC_ND"]},"aiUsage":{"type":"string","enum":["UNDISCLOSED","AI_USED","AI_FREE"],"description":"The AI usage policy of the asset"},"commentMode":{"type":"string","enum":["ENABLED","MEMBERS_ONLY","NONE"]},"reported":{"type":"boolean"},"likeCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"shareCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"archived":{"type":"boolean"},"metadata":{"type":"string","maxLength":10240},"originalSize":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"width":{"type":["null","number"]},"height":{"type":["null","number"]},"depth":{"type":["null","number"]},"version":{"type":"string","pattern":"^(0|[1-9][0-9]*)\\.(0|[1-9][0-9]*)\\.(0|[1-9][0-9]*)$"},"latestVersion":{"type":"string","pattern":"^(0|[1-9][0-9]*)\\.(0|[1-9][0-9]*)\\.(0|[1-9][0-9]*)$"},"versionId":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"originalExtension":{"type":"string"},"fileOid":{"type":"string"},"thumbnailOid":{"type":["null","string"]},"analysis":{"anyOf":[{"type":"object","properties":{"schemaVersion":{"type":"number","enum":[1]},"sourceFileOid":{"type":"string","minLength":64,"maxLength":64,"pattern":"^[a-f0-9]+$"},"analyzerId":{"type":"string","minLength":1},"analyzerVersion":{"type":"string","minLength":1},"status":{"type":"string","enum":["pending","running","succeeded","failed","unsupported"]},"analyzedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]},"data":{"anyOf":[{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["model"]},"dimensions":{"anyOf":[{"type":"object","properties":{"widthMeters":{"type":"number","minimum":0},"depthMeters":{"type":"number","minimum":0},"heightMeters":{"type":"number","minimum":0},"unitSource":{"type":"string","enum":["format-defined","declared","assumed","unknown"]},"measurementBasis":{"type":"string"}},"required":["widthMeters","depthMeters","heightMeters","unitSource","measurementBasis"],"additionalProperties":false},{"type":"null"}]},"meshCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"geometryCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"triangleCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"vertexCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"materialCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"textureCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"textures":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"path":{"type":["string","null"]},"widthPixels":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"heightPixels":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"format":{"type":["string","null"]},"mimeType":{"type":["string","null"]},"byteSize":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"mipLevelCount":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"colorSpace":{"type":["string","null"]},"usages":{"type":"array","items":{"type":"string"}}},"required":["id","path","widthPixels","heightPixels","format","mimeType","byteSize"],"additionalProperties":false}}},"required":["kind","dimensions","meshCount","geometryCount","triangleCount","vertexCount","materialCount","textureCount","textures"],"additionalProperties":false},{"type":"object","properties":{"version":{"type":"string"},"colorspace":{"type":"string"},"materials":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"category":{"type":"string"}},"required":["category"],"additionalProperties":false}},"nodeGraphCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"topLevelNodeCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"referencedTextures":{"type":"array","items":{"type":"string"}},"warnings":{"type":"array","items":{"type":"string"}},"kind":{"type":"string","enum":["material"]},"nodeCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"textureCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"textures":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"path":{"type":["string","null"]},"widthPixels":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"heightPixels":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"format":{"type":["string","null"]},"mimeType":{"type":["string","null"]},"byteSize":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"mipLevelCount":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"colorSpace":{"type":["string","null"]},"usages":{"type":"array","items":{"type":"string"}}},"required":["id","path","widthPixels","heightPixels","format","mimeType","byteSize"],"additionalProperties":false}}},"required":["materials","nodeGraphCount","topLevelNodeCount","referencedTextures","warnings","kind","nodeCount","textureCount","textures"],"additionalProperties":false},{"type":"object","properties":{"version":{"type":"string"},"metadata":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}},"photometricType":{"type":"integer","minimum":1,"maximum":3},"photometricTypeName":{"type":"string","enum":["A","B","C"]},"photometry":{"type":"string","enum":["absolute","relative"]},"manufacturer":{"type":"string"},"luminaire":{"type":"string"},"lightSource":{"type":"string"},"lampCatalog":{"type":"string"},"lampCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"lumensPerLamp":{"type":"number"},"inputWatts":{"type":"number"},"peakCandela":{"type":"number"},"verticalAngles":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"horizontalAngles":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"units":{"type":"string","enum":["feet","meters"]},"dimensions":{"type":"object","properties":{"width":{"type":"number"},"length":{"type":"number"},"height":{"type":"number"}},"required":["width","length","height"],"additionalProperties":false},"hasTilt":{"type":"boolean"},"warnings":{"type":"array","items":{"type":"string"}},"kind":{"type":"string","enum":["light"]},"luminousFluxLumens":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"efficacyLumensPerWatt":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"beamAngleDegrees":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"fieldAngleDegrees":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"declaredLampFluxLumens":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"downwardFluxLumens":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"upwardFluxLumens":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"metricsTiltDegrees":{"type":"number"},"beamAngles":{"type":"array","items":{"type":"object","properties":{"horizontalDegrees":{"type":"number"},"peakDirectionDegrees":{"type":"number"},"peakCandela":{"type":"number","minimum":0},"beamAngleDegrees":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"fieldAngleDegrees":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"beamAngleStatus":{"type":"string","enum":["ok","no-light","no-crossing","multiple-lobes"]},"fieldAngleStatus":{"type":"string","enum":["ok","no-light","no-crossing","multiple-lobes"]}},"required":["horizontalDegrees","peakDirectionDegrees","peakCandela","beamAngleDegrees","fieldAngleDegrees","beamAngleStatus","fieldAngleStatus"],"additionalProperties":false}},"metricsStatus":{"type":"string","enum":["supported","unsupported","unavailable"]}},"required":["version","metadata","photometricType","photometricTypeName","photometry","manufacturer","luminaire","lightSource","lampCatalog","lampCount","lumensPerLamp","inputWatts","peakCandela","verticalAngles","horizontalAngles","units","dimensions","hasTilt","warnings","kind","luminousFluxLumens","efficacyLumensPerWatt","beamAngleDegrees","fieldAngleDegrees","metricsStatus"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","enum":["envmap"]},"widthPixels":{"type":"integer","minimum":0,"maximum":9007199254740991},"heightPixels":{"type":"integer","minimum":0,"maximum":9007199254740991},"format":{"type":"string"},"colorSpace":{"type":"string"},"projection":{"type":"string","enum":["equirectangular","unknown"]},"brightnessUnit":{"type":"string","enum":["relative","cd/m2"]},"calibration":{"type":["string","null"]},"minimumBrightness":{"type":"number","minimum":0},"maximumBrightness":{"type":"number","minimum":0},"averageBrightness":{"type":"number","minimum":0},"percentile01Brightness":{"type":"number","minimum":0},"percentile99Brightness":{"type":"number","minimum":0},"dynamicRangeStops":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]}},"required":["kind","widthPixels","heightPixels","format","colorSpace","projection","brightnessUnit","calibration","minimumBrightness","maximumBrightness","averageBrightness","percentile01Brightness","percentile99Brightness","dynamicRangeStops"],"additionalProperties":false}]},{"type":"null"}]},"validation":{"anyOf":[{"type":"object","properties":{"status":{"type":"string","enum":["valid","invalid","unassessed"]},"validator":{"type":"string"},"validatorVersion":{"type":"string"},"rules":{"type":"array","items":{"type":"string"}},"issues":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string"},"severity":{"type":"string","enum":["error","warning","info"]},"message":{"type":"string"},"location":{"type":"string"}},"required":["code","severity","message"],"additionalProperties":false}}},"required":["status","validator","validatorVersion","rules","issues"],"additionalProperties":false},{"type":"null"}]},"diagnostics":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string"},"severity":{"type":"string","enum":["error","warning","info"]},"message":{"type":"string"},"location":{"type":"string"}},"required":["code","severity","message"],"additionalProperties":false}}},"required":["schemaVersion","sourceFileOid","analyzerId","analyzerVersion","status","analyzedAt","data","validation","diagnostics"],"additionalProperties":false},{"type":"null"}]},"analysisSummary":{"anyOf":[{"type":"object","properties":{"schemaVersion":{"type":"number","enum":[1]},"sourceFileOid":{"type":"string","minLength":64,"maxLength":64,"pattern":"^[a-f0-9]+$"},"analyzerId":{"type":"string","minLength":1},"analyzerVersion":{"type":"string","minLength":1},"status":{"type":"string","enum":["pending","running","succeeded","failed","unsupported"]},"analyzedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]},"validationStatus":{"anyOf":[{"type":"string","enum":["valid","invalid","unassessed"]},{"type":"null"}]},"errorCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"warningCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"data":{"anyOf":[{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["model"]},"dimensions":{"anyOf":[{"type":"object","properties":{"widthMeters":{"type":"number","minimum":0},"depthMeters":{"type":"number","minimum":0},"heightMeters":{"type":"number","minimum":0},"unitSource":{"type":"string","enum":["format-defined","declared","assumed","unknown"]},"measurementBasis":{"type":"string"}},"required":["widthMeters","depthMeters","heightMeters","unitSource","measurementBasis"],"additionalProperties":false},{"type":"null"}]},"meshCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"geometryCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"triangleCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"vertexCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"materialCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"textureCount":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["kind","dimensions","meshCount","geometryCount","triangleCount","vertexCount","materialCount","textureCount"],"additionalProperties":false},{"type":"object","properties":{"version":{"type":"string"},"colorspace":{"type":"string"},"nodeGraphCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"topLevelNodeCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"kind":{"type":"string","enum":["material"]},"nodeCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"textureCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"materialCount":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["nodeGraphCount","topLevelNodeCount","kind","nodeCount","textureCount","materialCount"],"additionalProperties":false},{"type":"object","properties":{"version":{"type":"string"},"photometricType":{"type":"integer","minimum":1,"maximum":3},"photometricTypeName":{"type":"string","enum":["A","B","C"]},"photometry":{"type":"string","enum":["absolute","relative"]},"manufacturer":{"type":"string"},"luminaire":{"type":"string"},"lightSource":{"type":"string"},"lampCatalog":{"type":"string"},"lampCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"lumensPerLamp":{"type":"number"},"inputWatts":{"type":"number"},"peakCandela":{"type":"number"},"verticalAngles":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"horizontalAngles":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"units":{"type":"string","enum":["feet","meters"]},"dimensions":{"type":"object","properties":{"width":{"type":"number"},"length":{"type":"number"},"height":{"type":"number"}},"required":["width","length","height"],"additionalProperties":false},"hasTilt":{"type":"boolean"},"kind":{"type":"string","enum":["light"]},"luminousFluxLumens":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"efficacyLumensPerWatt":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"beamAngleDegrees":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"fieldAngleDegrees":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"declaredLampFluxLumens":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"downwardFluxLumens":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"upwardFluxLumens":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"metricsTiltDegrees":{"type":"number"},"metricsStatus":{"type":"string","enum":["supported","unsupported","unavailable"]}},"required":["version","photometricType","photometricTypeName","photometry","manufacturer","luminaire","lightSource","lampCatalog","lampCount","lumensPerLamp","inputWatts","peakCandela","verticalAngles","horizontalAngles","units","dimensions","hasTilt","kind","luminousFluxLumens","efficacyLumensPerWatt","beamAngleDegrees","fieldAngleDegrees","metricsStatus"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","enum":["envmap"]},"widthPixels":{"type":"integer","minimum":0,"maximum":9007199254740991},"heightPixels":{"type":"integer","minimum":0,"maximum":9007199254740991},"format":{"type":"string"},"colorSpace":{"type":"string"},"projection":{"type":"string","enum":["equirectangular","unknown"]},"brightnessUnit":{"type":"string","enum":["relative","cd/m2"]},"calibration":{"type":["string","null"]},"minimumBrightness":{"type":"number","minimum":0},"maximumBrightness":{"type":"number","minimum":0},"averageBrightness":{"type":"number","minimum":0},"percentile01Brightness":{"type":"number","minimum":0},"percentile99Brightness":{"type":"number","minimum":0},"dynamicRangeStops":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]}},"required":["kind","widthPixels","heightPixels","format","colorSpace","projection","brightnessUnit","calibration","minimumBrightness","maximumBrightness","averageBrightness","percentile01Brightness","percentile99Brightness","dynamicRangeStops"],"additionalProperties":false}]},{"type":"null"}]}},"required":["schemaVersion","sourceFileOid","analyzerId","analyzerVersion","status","analyzedAt","validationStatus","errorCount","warningCount","data"],"additionalProperties":false},{"type":"null"}]},"materialInfo":{"type":"object","properties":{"version":{"type":"string"},"colorspace":{"type":"string"},"materials":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"category":{"type":"string"}},"required":["category"],"additionalProperties":false}},"nodeGraphCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"topLevelNodeCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"referencedTextures":{"type":"array","items":{"type":"string"}},"warnings":{"type":"array","items":{"type":"string"}}},"required":["materials","nodeGraphCount","topLevelNodeCount","referencedTextures","warnings"],"additionalProperties":false},"lightInfo":{"type":"object","properties":{"version":{"type":"string"},"metadata":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}},"photometricType":{"type":"integer","minimum":1,"maximum":3},"photometricTypeName":{"type":"string","enum":["A","B","C"]},"photometry":{"type":"string","enum":["absolute","relative"]},"manufacturer":{"type":"string"},"luminaire":{"type":"string"},"lightSource":{"type":"string"},"lampCatalog":{"type":"string"},"lampCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"lumensPerLamp":{"type":"number"},"inputWatts":{"type":"number"},"peakCandela":{"type":"number"},"verticalAngles":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"horizontalAngles":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"units":{"type":"string","enum":["feet","meters"]},"dimensions":{"type":"object","properties":{"width":{"type":"number"},"length":{"type":"number"},"height":{"type":"number"}},"required":["width","length","height"],"additionalProperties":false},"hasTilt":{"type":"boolean"},"warnings":{"type":"array","items":{"type":"string"}}},"required":["version","metadata","photometricType","photometricTypeName","photometry","manufacturer","luminaire","lightSource","lampCatalog","lampCount","lumensPerLamp","inputWatts","peakCandela","verticalAngles","horizontalAngles","units","dimensions","hasTilt","warnings"],"additionalProperties":false}},"required":["id","name","type","visibility","projectId","projectName","orgId","orgName","description","keywords","shareLicense","aiUsage","commentMode","reported","likeCount","shareCount","createdAt","updatedAt","archived","metadata","version","latestVersion","versionId","originalExtension","fileOid"],"additionalProperties":false}}}},"400":{"description":"Bad request response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}}}},"401":{"description":"Unauthorized response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Unauthorized response"}}}},"403":{"description":"Forbidden response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Forbidden response"}}}},"404":{"description":"Not found response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Not found response"}}}},"429":{"description":"Too many requests response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Too many requests response"}}}}}}},"/assets/{orgName}/{projectName}/prepare-upload":{"post":{"operationId":"prepare-asset-upload","summary":"Prepare asset upload","tags":["assets"],"description":"Prepare an asset upload by creating a temporary user upload record and signed URL for direct upload to storage.","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"filename":{"type":"string","minLength":1,"maxLength":255,"description":"The filename of the asset"},"contentType":{"type":"string","minLength":1,"maxLength":255,"description":"The content type of the asset"},"size":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991,"description":"The size of the asset"}},"required":["filename","contentType","size"],"additionalProperties":false}}},"required":true},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"orgName","required":true,"description":"The name of the organization"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"projectName","required":true,"description":"The name of the project"}],"security":[{"jwtToken":[]},{"secretToken":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"uploadUrl":{"type":"string","format":"uri"},"uploadToken":{"type":"string"}},"required":["uploadUrl","uploadToken"],"additionalProperties":false}}}},"400":{"description":"Bad request response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}}}},"401":{"description":"Unauthorized response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Unauthorized response"}}}},"403":{"description":"Forbidden response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Forbidden response"}}}},"413":{"description":"Bad request response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}}}}}}},"/auth/oauth/google/callback":{"post":{"operationId":"oauth-google-callback","summary":"Handle Google OAuth callback","tags":["auth"],"description":"Handle Google OAuth callback and authenticate user or create signup request","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string"},"state":{"type":"string"},"flow":{"type":"string","enum":["signup","login"]},"redirectTo":{"type":"string"}},"required":["code","state","flow"],"additionalProperties":false}}},"required":true},"security":[{"anonymous":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string","enum":["login","signup"]},"userSessionToken":{"type":"string"},"accessToken":{"type":"string"},"userRequestId":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"email":{"type":"string","format":"email","pattern":"^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"},"fullName":{"type":"string"},"redirectTo":{"type":"string"}},"required":["type"],"additionalProperties":false}}}},"400":{"description":"Bad request response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}}}},"401":{"description":"Unauthorized response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Unauthorized response"}}}}}}},"/auth/oauth/google/initiate":{"post":{"operationId":"oauth-google-initiate","summary":"Initiate Google OAuth","tags":["auth"],"description":"Initiate Google OAuth flow for signup or login","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"flow":{"type":"string","enum":["signup","login"]},"redirectTo":{"type":"string"}},"required":["flow"],"additionalProperties":false}}},"required":true},"security":[{"anonymous":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"authorizationUrl":{"type":"string","format":"uri"},"state":{"type":"string"}},"required":["authorizationUrl","state"],"additionalProperties":false}}}},"400":{"description":"Bad request response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}}}}}}},"/auth/passkeys/authentication/options":{"post":{"operationId":"passkey-authentication-options","summary":"Generate passkey authentication options","tags":["auth"],"description":"Generate passkey authentication options for discovery mode (no user identification required)","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{},"additionalProperties":false}}}},"security":[{"anonymous":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"options":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"authenticationToken":{"type":"string"}},"required":["options","authenticationToken"],"additionalProperties":false}}}},"400":{"description":"Bad request response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}}}}}}},"/auth/passkeys/authentication/verify":{"post":{"operationId":"passkey-authentication-verify","summary":"Verify passkey authentication","tags":["auth"],"description":"Verify passkey authentication and authenticate user","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"authenticationToken":{"type":"string"},"authenticationResponse":{"type":"object","properties":{"id":{"type":"string"},"rawId":{"type":"string"},"response":{"type":"object","properties":{"clientDataJSON":{"type":"string"},"authenticatorData":{"type":"string"},"signature":{"type":"string"},"userHandle":{"type":"string"}},"required":["clientDataJSON","authenticatorData","signature"],"additionalProperties":false},"type":{"type":"string","enum":["public-key"]},"clientExtensionResults":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["id","rawId","response","type"],"additionalProperties":false}},"required":["authenticationToken","authenticationResponse"],"additionalProperties":false}}},"required":true},"security":[{"anonymous":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"userSessionToken":{"type":"string"},"accessToken":{"type":"string"}},"required":["userSessionToken","accessToken"],"additionalProperties":false}}}},"400":{"description":"Bad request response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}}}},"401":{"description":"Unauthorized response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Unauthorized response"}}}},"429":{"description":"Too many requests response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Too many requests response"}}}}}}},"/projects/{orgName}/{projectName}":{"delete":{"operationId":"delete-project","summary":"Delete project","tags":["projects"],"description":"Delete a project. The project must not have any assets.","parameters":[{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"orgName","required":true,"description":"The name of the organization"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"projectName","required":true,"description":"The name of the project"}],"security":[{"jwtToken":[]},{"secretToken":[]}],"responses":{"204":{"description":"No content response","content":{"application/json":{"schema":{"type":"object","properties":{},"additionalProperties":false,"description":"No content response"}}}},"400":{"description":"Bad request response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}}}},"401":{"description":"Unauthorized response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Unauthorized response"}}}},"403":{"description":"Forbidden response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Forbidden response"}}}},"404":{"description":"Not found response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Not found response"}}}}}},"get":{"operationId":"get-project","summary":"Get project","tags":["projects"],"description":"Get project details by organization and project name.","parameters":[{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"orgName","required":true,"description":"The name of the organization"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"projectName","required":true,"description":"The name of the project"}],"security":[{"jwtToken":[]},{"secretToken":[]},{"frontendToken":[]},{}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"The ID of the project"},"name":{"type":"string","description":"The name of the project"},"description":{"type":"string","description":"The description of the project"},"visibility":{"type":"string","enum":["PRIVATE","PUBLIC"],"description":"The visibility of the project"},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","description":"The date and time the project was created"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","description":"The date and time the project was updated"},"orgId":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"The ID of the organization"},"orgName":{"type":"string","description":"The name of the organization"}},"required":["id","name","description","visibility","createdAt","updatedAt","orgId","orgName"],"additionalProperties":false}}}},"400":{"description":"Bad request response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}}}},"401":{"description":"Unauthorized response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Unauthorized response"}}}},"403":{"description":"Forbidden response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Forbidden response"}}}},"404":{"description":"Not found response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Not found response"}}}}}},"patch":{"operationId":"update-project","summary":"Update project","tags":["projects"],"description":"Update project metadata including name, description, and visibility. Can also transfer projects between organizations.","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"description":"The new name for the project","type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"description":{"description":"The new description for the project","type":"string","maxLength":10240},"visibility":{"description":"The new visibility level (PUBLIC or PRIVATE)","type":"string","enum":["PRIVATE","PUBLIC"]},"orgName":{"description":"The new organization name (for moving projects)","type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"}},"additionalProperties":false}}}},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"orgName","required":true,"description":"The name of the organization"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"projectName","required":true,"description":"The name of the project"}],"security":[{"jwtToken":[]},{"secretToken":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"The ID of the project"},"name":{"type":"string","description":"The name of the project"},"description":{"type":"string","description":"The description of the project"},"visibility":{"type":"string","enum":["PRIVATE","PUBLIC"],"description":"The visibility of the project"},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","description":"The date and time the project was created"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","description":"The date and time the project was updated"},"orgId":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"The ID of the organization"},"orgName":{"type":"string","description":"The name of the organization"}},"required":["id","name","description","visibility","createdAt","updatedAt","orgId","orgName"],"additionalProperties":false}}}},"400":{"description":"Bad request response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}}}},"401":{"description":"Unauthorized response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Unauthorized response"}}}},"403":{"description":"Forbidden response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Forbidden response"}}}},"404":{"description":"Not found response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Not found response"}}}},"429":{"description":"Too many requests response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Too many requests response"}}}}}}},"/products/{orgName}/{projectName}":{"post":{"operationId":"create-product","summary":"Create product","tags":["products"],"description":"Create a new product in a project. Requires project update access.","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$","description":"The code of the product (unique within project)"},"name":{"type":"string","maxLength":1024,"description":"The display name of the product"},"description":{"description":"Optional description of the product","type":"string","maxLength":10240}},"required":["code","name"],"additionalProperties":false}}},"required":true},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"orgName","required":true,"description":"The name of the organization"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"projectName","required":true,"description":"The name of the project"}],"security":[{"jwtToken":[]},{"secretToken":[]}],"responses":{"201":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"code":{"type":"string"},"name":{"type":"string","maxLength":1024},"description":{"type":"string"},"projectId":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"projectName":{"type":"string"},"orgId":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"orgName":{"type":"string"},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"referenceImages":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"productId":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"description":{"type":"string"},"fileOid":{"type":"string"},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"}},"required":["id","productId","description","fileOid","createdAt","updatedAt"],"additionalProperties":false}},"firstReferenceImageOid":{"type":["null","string"]}},"required":["id","code","name","description","projectId","projectName","orgId","orgName","createdAt","updatedAt"],"additionalProperties":false}}}},"400":{"description":"Bad request response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}}}},"401":{"description":"Unauthorized response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Unauthorized response"}}}},"403":{"description":"Forbidden response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Forbidden response"}}}},"404":{"description":"Not found response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Not found response"}}}}}}},"/tasks/{orgName}/{projectName}":{"get":{"operationId":"list-project-tasks","summary":"List project tasks","tags":["tasks"],"description":"List tasks for a project. Requires project read access.","parameters":[{"schema":{"type":"integer","minimum":0,"maximum":9007199254740991},"in":"query","name":"pageOffset","required":false,"description":"The number of items to skip before starting to return results. Must be 0 or greater."},{"schema":{"type":"integer","minimum":1,"maximum":1000},"in":"query","name":"pageSize","required":false,"description":"The maximum number of items to return. Must be between 1 and 1000."},{"schema":{"type":"string","enum":["createdAt","taskType","runner","latestRunStatus"]},"in":"query","name":"sortBy","required":false,"description":"The field to sort by"},{"schema":{"type":"string","enum":["asc","desc"]},"in":"query","name":"sortDir","required":false,"description":"The direction to sort by"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"orgName","required":true,"description":"The name of the organization"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"projectName","required":true,"description":"The name of the project"}],"security":[{"jwtToken":[]},{"secretToken":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"rows":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"The ID of the task"},"taskType":{"type":"string","description":"The type of the task"},"runner":{"type":"string","description":"The runner that executes the task"},"parameters":{"description":"JSON string of task parameters","type":["null","string"]},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","description":"When the task was created"},"name":{"type":"string","description":"Human-readable task name"},"targetUrl":{"description":"Optional target URL","type":["null","string"]},"orgName":{"description":"Org name (owner of task or project)","type":["null","string"]},"projectName":{"description":"Project name if task is project-scoped","type":["null","string"]},"assetName":{"description":"Asset name if task is asset-scoped","type":["null","string"]},"createdByName":{"type":"string","description":"Display name of user who created the task"},"latestRunStatus":{"anyOf":[{"type":"string","enum":["RUNNING","SUCCESS","FAILED"]},{"type":"null"}],"description":"Latest run status"},"latestRunDuration":{"description":"Latest run duration in seconds","type":["null","number"]}},"required":["id","taskType","runner","parameters","createdAt","name","targetUrl","orgName","projectName","createdByName","latestRunStatus","latestRunDuration"],"additionalProperties":false}},"rowCount":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["rows","rowCount"],"additionalProperties":false}}}},"400":{"description":"Bad request response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}}}},"401":{"description":"Unauthorized response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Unauthorized response"}}}},"403":{"description":"Forbidden response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Forbidden response"}}}},"404":{"description":"Not found response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Not found response"}}}},"500":{"description":"Server error response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Server error response"}}}}}},"post":{"operationId":"create-project-task","summary":"Create or get project task","tags":["tasks"],"description":"Create or get an existing task for the project (async only). If a task with the same type, version, and parameters exists, returns it immediately. Otherwise creates and queues the task.","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"taskType":{"type":"string","enum":["ANALYZE_ASSET","WEB_PAGE_SCREENSHOT","BLEND_THUMBNAIL","FREECAD_THUMBNAIL","MATERIAL_THUMBNAIL","LIGHT_THUMBNAIL","TRANSFORM_GLTF","IMAGE_TRANSFORM","ENVMAP_FORMAT_CONVERT","BLENDER_MODEL_FORMAT_CONVERT","FREECAD_EXPORT_MODEL","FREECAD_EXTRACT_PARAMS","FREECAD_EXPORT_DRAWING","BLENDER_EXPORT","BLENDER_RENDER","AI_COMMENT_REVIEW","BLENDER_HEALTH","CHROMIUM_HEALTH","FREECAD_HEALTH","SIMPLE_HEALTH"],"description":"The task type (name)"},"name":{"type":"string","minLength":1,"maxLength":255,"description":"Human-readable task name"},"parameters":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{},"description":"Task parameters (validated by task type schema)"},"targetUrl":{"description":"Optional target URL","type":"string","maxLength":1024,"format":"uri"}},"required":["taskType","name","parameters"],"additionalProperties":false}}},"required":true},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"orgName","required":true,"description":"The name of the organization"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"projectName","required":true,"description":"The name of the project"}],"security":[{"jwtToken":[]},{"secretToken":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"task":{"type":"object","properties":{"id":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"The ID of the task"},"taskType":{"type":"string","description":"The type of the task"},"runner":{"type":"string","description":"The runner that executes the task"},"parameters":{"description":"JSON string of task parameters","type":["null","string"]},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","description":"When the task was created"},"name":{"type":"string","description":"Human-readable task name"},"targetUrl":{"description":"Optional target URL","type":["null","string"]},"orgName":{"description":"Org name (owner of task or project)","type":["null","string"]},"projectName":{"description":"Project name if task is project-scoped","type":["null","string"]},"assetName":{"description":"Asset name if task is asset-scoped","type":["null","string"]},"createdByName":{"type":"string","description":"Display name of user who created the task"},"latestRunStatus":{"anyOf":[{"type":"string","enum":["RUNNING","SUCCESS","FAILED"]},{"type":"null"}],"description":"Latest run status"},"latestRunDuration":{"description":"Latest run duration in seconds","type":["null","number"]}},"required":["id","taskType","runner","parameters","createdAt","name","targetUrl","orgName","projectName","createdByName","latestRunStatus","latestRunDuration"],"additionalProperties":false,"description":"The task record"},"status":{"type":"string","enum":["QUEUED","RUNNING","SUCCESS","FAILED"],"description":"Current task status"},"results":{"description":"Task results if status is SUCCESS"}},"required":["task","status"],"additionalProperties":false}}}},"400":{"description":"Bad request response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}}}},"401":{"description":"Unauthorized response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Unauthorized response"}}}},"403":{"description":"Forbidden response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Forbidden response"}}}},"404":{"description":"Not found response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Not found response"}}}},"500":{"description":"Server error response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Server error response"}}}}}}},"/users/{userName}/sessions/{sessionId}":{"delete":{"operationId":"end-user-session","summary":"End user session","tags":["users"],"description":"End a user session by marking it as deleted. Users can only end their own sessions.","parameters":[{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"userName","required":true,"description":"The name of the user"},{"schema":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"in":"path","name":"sessionId","required":true}],"security":[{"jwtToken":[]},{"secretToken":[]}],"responses":{"204":{"description":"No content response","content":{"application/json":{"schema":{"type":"object","properties":{},"additionalProperties":false,"description":"No content response"}}}},"401":{"description":"Unauthorized response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Unauthorized response"}}}},"403":{"description":"Forbidden response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Forbidden response"}}}},"404":{"description":"Not found response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Not found response"}}}}}}},"/users/{userName}/sessions":{"get":{"operationId":"list-user-sessions","summary":"List user sessions","tags":["users"],"description":"List active user sessions for a user with pagination and sorting. Only returns sessions that are not deleted and not expired.","parameters":[{"schema":{"type":"integer","minimum":0,"maximum":9007199254740991},"in":"query","name":"pageOffset","required":false,"description":"The number of items to skip before starting to return results. Must be 0 or greater."},{"schema":{"type":"integer","minimum":1,"maximum":1000},"in":"query","name":"pageSize","required":false,"description":"The maximum number of items to return. Must be between 1 and 1000."},{"schema":{"type":"string","enum":["createdAt","lastUsedAt","expiresAt","ipAddress"]},"in":"query","name":"sortBy","required":false,"description":"The field to sort by"},{"schema":{"type":"string","enum":["asc","desc"]},"in":"query","name":"sortDir","required":false,"description":"The direction to sort by"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"userName","required":true,"description":"The name of the user"}],"security":[{"jwtToken":[]},{"secretToken":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"rows":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"ipAddress":{"type":"string"},"browser":{"type":["null","string"]},"os":{"type":["null","string"]},"client":{"type":["null","string"]},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"lastUsedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"expiresAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"}},"required":["id","ipAddress","browser","os","client","createdAt","lastUsedAt","expiresAt"],"additionalProperties":false}},"rowCount":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["rows","rowCount"],"additionalProperties":false}}}},"400":{"description":"Bad request response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}}}},"401":{"description":"Unauthorized response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Unauthorized response"}}}},"403":{"description":"Forbidden response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Forbidden response"}}}},"404":{"description":"Not found response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Not found response"}}}}}}},"/assets/{orgName}/{projectName}/{assetName}":{"delete":{"operationId":"delete-asset","summary":"Delete asset","tags":["assets"],"description":"Delete an asset.","parameters":[{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"orgName","required":true,"description":"The name of the organization"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"projectName","required":true,"description":"The name of the project"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"assetName","required":true,"description":"The name of the asset"}],"security":[{"jwtToken":[]},{"secretToken":[]}],"responses":{"204":{"description":"No content response","content":{"application/json":{"schema":{"type":"object","properties":{},"additionalProperties":false,"description":"No content response"}}}},"400":{"description":"Bad request response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}}}},"401":{"description":"Unauthorized response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Unauthorized response"}}}},"403":{"description":"Forbidden response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Forbidden response"}}}},"404":{"description":"Not found response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Not found response"}}}}}},"get":{"operationId":"get-asset","summary":"Get asset","tags":["assets"],"description":"Get asset details by organization, project, and asset name.","parameters":[{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"orgName","required":true,"description":"The name of the organization"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"projectName","required":true,"description":"The name of the project"},{"schema":{"type":"string"},"in":"path","name":"assetName","required":true}],"security":[{"jwtToken":[]},{"secretToken":[]},{"frontendToken":[]},{}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"name":{"type":"string"},"type":{"type":"string","enum":["MODEL","MATERIAL","IMAGE","SCENE","ENVMAP","CAD","LIGHT"]},"visibility":{"type":"string","enum":["PRIVATE","UNLISTED","PUBLIC"],"description":"The visibility of the asset"},"projectId":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"projectName":{"type":"string"},"orgId":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"orgName":{"type":"string"},"description":{"type":"string"},"keywords":{"type":"string"},"shareLicense":{"type":"string","enum":["NONE","CC_0","CC_BY","CC_BY_SA","CC_BY_NC","CC_BY_NC_SA","CC_BY_ND","CC_BY_NC_ND"]},"aiUsage":{"type":"string","enum":["UNDISCLOSED","AI_USED","AI_FREE"],"description":"The AI usage policy of the asset"},"commentMode":{"type":"string","enum":["ENABLED","MEMBERS_ONLY","NONE"]},"reported":{"type":"boolean"},"likeCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"shareCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"archived":{"type":"boolean"},"metadata":{"type":"string","maxLength":10240},"originalSize":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"width":{"type":["null","number"]},"height":{"type":["null","number"]},"depth":{"type":["null","number"]},"version":{"type":"string","pattern":"^(0|[1-9][0-9]*)\\.(0|[1-9][0-9]*)\\.(0|[1-9][0-9]*)$"},"latestVersion":{"type":"string","pattern":"^(0|[1-9][0-9]*)\\.(0|[1-9][0-9]*)\\.(0|[1-9][0-9]*)$"},"versionId":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"originalExtension":{"type":"string"},"fileOid":{"type":"string"},"thumbnailOid":{"type":["null","string"]},"analysis":{"anyOf":[{"type":"object","properties":{"schemaVersion":{"type":"number","enum":[1]},"sourceFileOid":{"type":"string","minLength":64,"maxLength":64,"pattern":"^[a-f0-9]+$"},"analyzerId":{"type":"string","minLength":1},"analyzerVersion":{"type":"string","minLength":1},"status":{"type":"string","enum":["pending","running","succeeded","failed","unsupported"]},"analyzedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]},"data":{"anyOf":[{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["model"]},"dimensions":{"anyOf":[{"type":"object","properties":{"widthMeters":{"type":"number","minimum":0},"depthMeters":{"type":"number","minimum":0},"heightMeters":{"type":"number","minimum":0},"unitSource":{"type":"string","enum":["format-defined","declared","assumed","unknown"]},"measurementBasis":{"type":"string"}},"required":["widthMeters","depthMeters","heightMeters","unitSource","measurementBasis"],"additionalProperties":false},{"type":"null"}]},"meshCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"geometryCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"triangleCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"vertexCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"materialCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"textureCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"textures":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"path":{"type":["string","null"]},"widthPixels":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"heightPixels":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"format":{"type":["string","null"]},"mimeType":{"type":["string","null"]},"byteSize":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"mipLevelCount":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"colorSpace":{"type":["string","null"]},"usages":{"type":"array","items":{"type":"string"}}},"required":["id","path","widthPixels","heightPixels","format","mimeType","byteSize"],"additionalProperties":false}}},"required":["kind","dimensions","meshCount","geometryCount","triangleCount","vertexCount","materialCount","textureCount","textures"],"additionalProperties":false},{"type":"object","properties":{"version":{"type":"string"},"colorspace":{"type":"string"},"materials":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"category":{"type":"string"}},"required":["category"],"additionalProperties":false}},"nodeGraphCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"topLevelNodeCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"referencedTextures":{"type":"array","items":{"type":"string"}},"warnings":{"type":"array","items":{"type":"string"}},"kind":{"type":"string","enum":["material"]},"nodeCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"textureCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"textures":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"path":{"type":["string","null"]},"widthPixels":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"heightPixels":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"format":{"type":["string","null"]},"mimeType":{"type":["string","null"]},"byteSize":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"mipLevelCount":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"colorSpace":{"type":["string","null"]},"usages":{"type":"array","items":{"type":"string"}}},"required":["id","path","widthPixels","heightPixels","format","mimeType","byteSize"],"additionalProperties":false}}},"required":["materials","nodeGraphCount","topLevelNodeCount","referencedTextures","warnings","kind","nodeCount","textureCount","textures"],"additionalProperties":false},{"type":"object","properties":{"version":{"type":"string"},"metadata":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}},"photometricType":{"type":"integer","minimum":1,"maximum":3},"photometricTypeName":{"type":"string","enum":["A","B","C"]},"photometry":{"type":"string","enum":["absolute","relative"]},"manufacturer":{"type":"string"},"luminaire":{"type":"string"},"lightSource":{"type":"string"},"lampCatalog":{"type":"string"},"lampCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"lumensPerLamp":{"type":"number"},"inputWatts":{"type":"number"},"peakCandela":{"type":"number"},"verticalAngles":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"horizontalAngles":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"units":{"type":"string","enum":["feet","meters"]},"dimensions":{"type":"object","properties":{"width":{"type":"number"},"length":{"type":"number"},"height":{"type":"number"}},"required":["width","length","height"],"additionalProperties":false},"hasTilt":{"type":"boolean"},"warnings":{"type":"array","items":{"type":"string"}},"kind":{"type":"string","enum":["light"]},"luminousFluxLumens":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"efficacyLumensPerWatt":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"beamAngleDegrees":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"fieldAngleDegrees":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"declaredLampFluxLumens":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"downwardFluxLumens":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"upwardFluxLumens":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"metricsTiltDegrees":{"type":"number"},"beamAngles":{"type":"array","items":{"type":"object","properties":{"horizontalDegrees":{"type":"number"},"peakDirectionDegrees":{"type":"number"},"peakCandela":{"type":"number","minimum":0},"beamAngleDegrees":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"fieldAngleDegrees":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"beamAngleStatus":{"type":"string","enum":["ok","no-light","no-crossing","multiple-lobes"]},"fieldAngleStatus":{"type":"string","enum":["ok","no-light","no-crossing","multiple-lobes"]}},"required":["horizontalDegrees","peakDirectionDegrees","peakCandela","beamAngleDegrees","fieldAngleDegrees","beamAngleStatus","fieldAngleStatus"],"additionalProperties":false}},"metricsStatus":{"type":"string","enum":["supported","unsupported","unavailable"]}},"required":["version","metadata","photometricType","photometricTypeName","photometry","manufacturer","luminaire","lightSource","lampCatalog","lampCount","lumensPerLamp","inputWatts","peakCandela","verticalAngles","horizontalAngles","units","dimensions","hasTilt","warnings","kind","luminousFluxLumens","efficacyLumensPerWatt","beamAngleDegrees","fieldAngleDegrees","metricsStatus"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","enum":["envmap"]},"widthPixels":{"type":"integer","minimum":0,"maximum":9007199254740991},"heightPixels":{"type":"integer","minimum":0,"maximum":9007199254740991},"format":{"type":"string"},"colorSpace":{"type":"string"},"projection":{"type":"string","enum":["equirectangular","unknown"]},"brightnessUnit":{"type":"string","enum":["relative","cd/m2"]},"calibration":{"type":["string","null"]},"minimumBrightness":{"type":"number","minimum":0},"maximumBrightness":{"type":"number","minimum":0},"averageBrightness":{"type":"number","minimum":0},"percentile01Brightness":{"type":"number","minimum":0},"percentile99Brightness":{"type":"number","minimum":0},"dynamicRangeStops":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]}},"required":["kind","widthPixels","heightPixels","format","colorSpace","projection","brightnessUnit","calibration","minimumBrightness","maximumBrightness","averageBrightness","percentile01Brightness","percentile99Brightness","dynamicRangeStops"],"additionalProperties":false}]},{"type":"null"}]},"validation":{"anyOf":[{"type":"object","properties":{"status":{"type":"string","enum":["valid","invalid","unassessed"]},"validator":{"type":"string"},"validatorVersion":{"type":"string"},"rules":{"type":"array","items":{"type":"string"}},"issues":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string"},"severity":{"type":"string","enum":["error","warning","info"]},"message":{"type":"string"},"location":{"type":"string"}},"required":["code","severity","message"],"additionalProperties":false}}},"required":["status","validator","validatorVersion","rules","issues"],"additionalProperties":false},{"type":"null"}]},"diagnostics":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string"},"severity":{"type":"string","enum":["error","warning","info"]},"message":{"type":"string"},"location":{"type":"string"}},"required":["code","severity","message"],"additionalProperties":false}}},"required":["schemaVersion","sourceFileOid","analyzerId","analyzerVersion","status","analyzedAt","data","validation","diagnostics"],"additionalProperties":false},{"type":"null"}]},"analysisSummary":{"anyOf":[{"type":"object","properties":{"schemaVersion":{"type":"number","enum":[1]},"sourceFileOid":{"type":"string","minLength":64,"maxLength":64,"pattern":"^[a-f0-9]+$"},"analyzerId":{"type":"string","minLength":1},"analyzerVersion":{"type":"string","minLength":1},"status":{"type":"string","enum":["pending","running","succeeded","failed","unsupported"]},"analyzedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]},"validationStatus":{"anyOf":[{"type":"string","enum":["valid","invalid","unassessed"]},{"type":"null"}]},"errorCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"warningCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"data":{"anyOf":[{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["model"]},"dimensions":{"anyOf":[{"type":"object","properties":{"widthMeters":{"type":"number","minimum":0},"depthMeters":{"type":"number","minimum":0},"heightMeters":{"type":"number","minimum":0},"unitSource":{"type":"string","enum":["format-defined","declared","assumed","unknown"]},"measurementBasis":{"type":"string"}},"required":["widthMeters","depthMeters","heightMeters","unitSource","measurementBasis"],"additionalProperties":false},{"type":"null"}]},"meshCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"geometryCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"triangleCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"vertexCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"materialCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"textureCount":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["kind","dimensions","meshCount","geometryCount","triangleCount","vertexCount","materialCount","textureCount"],"additionalProperties":false},{"type":"object","properties":{"version":{"type":"string"},"colorspace":{"type":"string"},"nodeGraphCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"topLevelNodeCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"kind":{"type":"string","enum":["material"]},"nodeCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"textureCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"materialCount":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["nodeGraphCount","topLevelNodeCount","kind","nodeCount","textureCount","materialCount"],"additionalProperties":false},{"type":"object","properties":{"version":{"type":"string"},"photometricType":{"type":"integer","minimum":1,"maximum":3},"photometricTypeName":{"type":"string","enum":["A","B","C"]},"photometry":{"type":"string","enum":["absolute","relative"]},"manufacturer":{"type":"string"},"luminaire":{"type":"string"},"lightSource":{"type":"string"},"lampCatalog":{"type":"string"},"lampCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"lumensPerLamp":{"type":"number"},"inputWatts":{"type":"number"},"peakCandela":{"type":"number"},"verticalAngles":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"horizontalAngles":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"units":{"type":"string","enum":["feet","meters"]},"dimensions":{"type":"object","properties":{"width":{"type":"number"},"length":{"type":"number"},"height":{"type":"number"}},"required":["width","length","height"],"additionalProperties":false},"hasTilt":{"type":"boolean"},"kind":{"type":"string","enum":["light"]},"luminousFluxLumens":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"efficacyLumensPerWatt":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"beamAngleDegrees":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"fieldAngleDegrees":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"declaredLampFluxLumens":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"downwardFluxLumens":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"upwardFluxLumens":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"metricsTiltDegrees":{"type":"number"},"metricsStatus":{"type":"string","enum":["supported","unsupported","unavailable"]}},"required":["version","photometricType","photometricTypeName","photometry","manufacturer","luminaire","lightSource","lampCatalog","lampCount","lumensPerLamp","inputWatts","peakCandela","verticalAngles","horizontalAngles","units","dimensions","hasTilt","kind","luminousFluxLumens","efficacyLumensPerWatt","beamAngleDegrees","fieldAngleDegrees","metricsStatus"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","enum":["envmap"]},"widthPixels":{"type":"integer","minimum":0,"maximum":9007199254740991},"heightPixels":{"type":"integer","minimum":0,"maximum":9007199254740991},"format":{"type":"string"},"colorSpace":{"type":"string"},"projection":{"type":"string","enum":["equirectangular","unknown"]},"brightnessUnit":{"type":"string","enum":["relative","cd/m2"]},"calibration":{"type":["string","null"]},"minimumBrightness":{"type":"number","minimum":0},"maximumBrightness":{"type":"number","minimum":0},"averageBrightness":{"type":"number","minimum":0},"percentile01Brightness":{"type":"number","minimum":0},"percentile99Brightness":{"type":"number","minimum":0},"dynamicRangeStops":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]}},"required":["kind","widthPixels","heightPixels","format","colorSpace","projection","brightnessUnit","calibration","minimumBrightness","maximumBrightness","averageBrightness","percentile01Brightness","percentile99Brightness","dynamicRangeStops"],"additionalProperties":false}]},{"type":"null"}]}},"required":["schemaVersion","sourceFileOid","analyzerId","analyzerVersion","status","analyzedAt","validationStatus","errorCount","warningCount","data"],"additionalProperties":false},{"type":"null"}]},"materialInfo":{"type":"object","properties":{"version":{"type":"string"},"colorspace":{"type":"string"},"materials":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"category":{"type":"string"}},"required":["category"],"additionalProperties":false}},"nodeGraphCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"topLevelNodeCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"referencedTextures":{"type":"array","items":{"type":"string"}},"warnings":{"type":"array","items":{"type":"string"}}},"required":["materials","nodeGraphCount","topLevelNodeCount","referencedTextures","warnings"],"additionalProperties":false},"lightInfo":{"type":"object","properties":{"version":{"type":"string"},"metadata":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}},"photometricType":{"type":"integer","minimum":1,"maximum":3},"photometricTypeName":{"type":"string","enum":["A","B","C"]},"photometry":{"type":"string","enum":["absolute","relative"]},"manufacturer":{"type":"string"},"luminaire":{"type":"string"},"lightSource":{"type":"string"},"lampCatalog":{"type":"string"},"lampCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"lumensPerLamp":{"type":"number"},"inputWatts":{"type":"number"},"peakCandela":{"type":"number"},"verticalAngles":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"horizontalAngles":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"units":{"type":"string","enum":["feet","meters"]},"dimensions":{"type":"object","properties":{"width":{"type":"number"},"length":{"type":"number"},"height":{"type":"number"}},"required":["width","length","height"],"additionalProperties":false},"hasTilt":{"type":"boolean"},"warnings":{"type":"array","items":{"type":"string"}}},"required":["version","metadata","photometricType","photometricTypeName","photometry","manufacturer","luminaire","lightSource","lampCatalog","lampCount","lumensPerLamp","inputWatts","peakCandela","verticalAngles","horizontalAngles","units","dimensions","hasTilt","warnings"],"additionalProperties":false}},"required":["id","name","type","visibility","projectId","projectName","orgId","orgName","description","keywords","shareLicense","aiUsage","commentMode","reported","likeCount","shareCount","createdAt","updatedAt","archived","metadata","version","latestVersion","versionId","originalExtension","fileOid"],"additionalProperties":false}}}},"400":{"description":"Bad request response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}}}},"401":{"description":"Unauthorized response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Unauthorized response"}}}},"403":{"description":"Forbidden response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Forbidden response"}}}},"404":{"description":"Not found response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Not found response"}}}}}},"patch":{"operationId":"update-asset","summary":"Update asset","tags":["assets"],"description":"Update asset metadata including name, description, keywords, visibility, license, and AI usage settings. Can also transfer assets between projects.","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"description":"Optional name of the asset, to rename asset","type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"description":{"description":"Optional description of the asset","type":"string","maxLength":10240},"keywords":{"description":"Optional keywords of the asset","type":"string","maxLength":10240},"visibility":{"description":"Optional visibility of the asset","type":"string","enum":["PRIVATE","UNLISTED","PUBLIC"]},"shareLicense":{"description":"Optional share license of the asset","type":"string","enum":["NONE","CC_0","CC_BY","CC_BY_SA","CC_BY_NC","CC_BY_NC_SA","CC_BY_ND","CC_BY_NC_ND"]},"aiUsage":{"description":"Optional AI usage policy of the asset","type":"string","enum":["UNDISCLOSED","AI_USED","AI_FREE"]},"commentMode":{"description":"Optional comment mode: ENABLED, MEMBERS_ONLY, or NONE","type":"string","enum":["ENABLED","MEMBERS_ONLY","NONE"]},"projectName":{"description":"Optional project name of the asset, to transfer asset to a different project/organization","type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"orgName":{"description":"Optional organization name of the asset, to transfer asset to a different project/organization","type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"archived":{"description":"Optional archived status (true to archive, false to unarchive)","type":"boolean"},"metadata":{"description":"Optional metadata as a string (max 10240 characters)","type":"string","maxLength":10240}},"additionalProperties":false}}}},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"orgName","required":true,"description":"The name of the organization"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"projectName","required":true,"description":"The name of the project"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"assetName","required":true,"description":"The name of the asset"}],"security":[{"jwtToken":[]},{"secretToken":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"name":{"type":"string"},"type":{"type":"string","enum":["MODEL","MATERIAL","IMAGE","SCENE","ENVMAP","CAD","LIGHT"]},"visibility":{"type":"string","enum":["PRIVATE","UNLISTED","PUBLIC"],"description":"The visibility of the asset"},"projectId":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"projectName":{"type":"string"},"orgId":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"orgName":{"type":"string"},"description":{"type":"string"},"keywords":{"type":"string"},"shareLicense":{"type":"string","enum":["NONE","CC_0","CC_BY","CC_BY_SA","CC_BY_NC","CC_BY_NC_SA","CC_BY_ND","CC_BY_NC_ND"]},"aiUsage":{"type":"string","enum":["UNDISCLOSED","AI_USED","AI_FREE"],"description":"The AI usage policy of the asset"},"commentMode":{"type":"string","enum":["ENABLED","MEMBERS_ONLY","NONE"]},"reported":{"type":"boolean"},"likeCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"shareCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"archived":{"type":"boolean"},"metadata":{"type":"string","maxLength":10240},"originalSize":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"width":{"type":["null","number"]},"height":{"type":["null","number"]},"depth":{"type":["null","number"]},"version":{"type":"string","pattern":"^(0|[1-9][0-9]*)\\.(0|[1-9][0-9]*)\\.(0|[1-9][0-9]*)$"},"latestVersion":{"type":"string","pattern":"^(0|[1-9][0-9]*)\\.(0|[1-9][0-9]*)\\.(0|[1-9][0-9]*)$"},"versionId":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"originalExtension":{"type":"string"},"fileOid":{"type":"string"},"thumbnailOid":{"type":["null","string"]},"analysis":{"anyOf":[{"type":"object","properties":{"schemaVersion":{"type":"number","enum":[1]},"sourceFileOid":{"type":"string","minLength":64,"maxLength":64,"pattern":"^[a-f0-9]+$"},"analyzerId":{"type":"string","minLength":1},"analyzerVersion":{"type":"string","minLength":1},"status":{"type":"string","enum":["pending","running","succeeded","failed","unsupported"]},"analyzedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]},"data":{"anyOf":[{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["model"]},"dimensions":{"anyOf":[{"type":"object","properties":{"widthMeters":{"type":"number","minimum":0},"depthMeters":{"type":"number","minimum":0},"heightMeters":{"type":"number","minimum":0},"unitSource":{"type":"string","enum":["format-defined","declared","assumed","unknown"]},"measurementBasis":{"type":"string"}},"required":["widthMeters","depthMeters","heightMeters","unitSource","measurementBasis"],"additionalProperties":false},{"type":"null"}]},"meshCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"geometryCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"triangleCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"vertexCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"materialCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"textureCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"textures":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"path":{"type":["string","null"]},"widthPixels":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"heightPixels":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"format":{"type":["string","null"]},"mimeType":{"type":["string","null"]},"byteSize":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"mipLevelCount":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"colorSpace":{"type":["string","null"]},"usages":{"type":"array","items":{"type":"string"}}},"required":["id","path","widthPixels","heightPixels","format","mimeType","byteSize"],"additionalProperties":false}}},"required":["kind","dimensions","meshCount","geometryCount","triangleCount","vertexCount","materialCount","textureCount","textures"],"additionalProperties":false},{"type":"object","properties":{"version":{"type":"string"},"colorspace":{"type":"string"},"materials":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"category":{"type":"string"}},"required":["category"],"additionalProperties":false}},"nodeGraphCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"topLevelNodeCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"referencedTextures":{"type":"array","items":{"type":"string"}},"warnings":{"type":"array","items":{"type":"string"}},"kind":{"type":"string","enum":["material"]},"nodeCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"textureCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"textures":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"path":{"type":["string","null"]},"widthPixels":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"heightPixels":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"format":{"type":["string","null"]},"mimeType":{"type":["string","null"]},"byteSize":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"mipLevelCount":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"colorSpace":{"type":["string","null"]},"usages":{"type":"array","items":{"type":"string"}}},"required":["id","path","widthPixels","heightPixels","format","mimeType","byteSize"],"additionalProperties":false}}},"required":["materials","nodeGraphCount","topLevelNodeCount","referencedTextures","warnings","kind","nodeCount","textureCount","textures"],"additionalProperties":false},{"type":"object","properties":{"version":{"type":"string"},"metadata":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}},"photometricType":{"type":"integer","minimum":1,"maximum":3},"photometricTypeName":{"type":"string","enum":["A","B","C"]},"photometry":{"type":"string","enum":["absolute","relative"]},"manufacturer":{"type":"string"},"luminaire":{"type":"string"},"lightSource":{"type":"string"},"lampCatalog":{"type":"string"},"lampCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"lumensPerLamp":{"type":"number"},"inputWatts":{"type":"number"},"peakCandela":{"type":"number"},"verticalAngles":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"horizontalAngles":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"units":{"type":"string","enum":["feet","meters"]},"dimensions":{"type":"object","properties":{"width":{"type":"number"},"length":{"type":"number"},"height":{"type":"number"}},"required":["width","length","height"],"additionalProperties":false},"hasTilt":{"type":"boolean"},"warnings":{"type":"array","items":{"type":"string"}},"kind":{"type":"string","enum":["light"]},"luminousFluxLumens":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"efficacyLumensPerWatt":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"beamAngleDegrees":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"fieldAngleDegrees":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"declaredLampFluxLumens":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"downwardFluxLumens":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"upwardFluxLumens":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"metricsTiltDegrees":{"type":"number"},"beamAngles":{"type":"array","items":{"type":"object","properties":{"horizontalDegrees":{"type":"number"},"peakDirectionDegrees":{"type":"number"},"peakCandela":{"type":"number","minimum":0},"beamAngleDegrees":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"fieldAngleDegrees":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"beamAngleStatus":{"type":"string","enum":["ok","no-light","no-crossing","multiple-lobes"]},"fieldAngleStatus":{"type":"string","enum":["ok","no-light","no-crossing","multiple-lobes"]}},"required":["horizontalDegrees","peakDirectionDegrees","peakCandela","beamAngleDegrees","fieldAngleDegrees","beamAngleStatus","fieldAngleStatus"],"additionalProperties":false}},"metricsStatus":{"type":"string","enum":["supported","unsupported","unavailable"]}},"required":["version","metadata","photometricType","photometricTypeName","photometry","manufacturer","luminaire","lightSource","lampCatalog","lampCount","lumensPerLamp","inputWatts","peakCandela","verticalAngles","horizontalAngles","units","dimensions","hasTilt","warnings","kind","luminousFluxLumens","efficacyLumensPerWatt","beamAngleDegrees","fieldAngleDegrees","metricsStatus"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","enum":["envmap"]},"widthPixels":{"type":"integer","minimum":0,"maximum":9007199254740991},"heightPixels":{"type":"integer","minimum":0,"maximum":9007199254740991},"format":{"type":"string"},"colorSpace":{"type":"string"},"projection":{"type":"string","enum":["equirectangular","unknown"]},"brightnessUnit":{"type":"string","enum":["relative","cd/m2"]},"calibration":{"type":["string","null"]},"minimumBrightness":{"type":"number","minimum":0},"maximumBrightness":{"type":"number","minimum":0},"averageBrightness":{"type":"number","minimum":0},"percentile01Brightness":{"type":"number","minimum":0},"percentile99Brightness":{"type":"number","minimum":0},"dynamicRangeStops":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]}},"required":["kind","widthPixels","heightPixels","format","colorSpace","projection","brightnessUnit","calibration","minimumBrightness","maximumBrightness","averageBrightness","percentile01Brightness","percentile99Brightness","dynamicRangeStops"],"additionalProperties":false}]},{"type":"null"}]},"validation":{"anyOf":[{"type":"object","properties":{"status":{"type":"string","enum":["valid","invalid","unassessed"]},"validator":{"type":"string"},"validatorVersion":{"type":"string"},"rules":{"type":"array","items":{"type":"string"}},"issues":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string"},"severity":{"type":"string","enum":["error","warning","info"]},"message":{"type":"string"},"location":{"type":"string"}},"required":["code","severity","message"],"additionalProperties":false}}},"required":["status","validator","validatorVersion","rules","issues"],"additionalProperties":false},{"type":"null"}]},"diagnostics":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string"},"severity":{"type":"string","enum":["error","warning","info"]},"message":{"type":"string"},"location":{"type":"string"}},"required":["code","severity","message"],"additionalProperties":false}}},"required":["schemaVersion","sourceFileOid","analyzerId","analyzerVersion","status","analyzedAt","data","validation","diagnostics"],"additionalProperties":false},{"type":"null"}]},"analysisSummary":{"anyOf":[{"type":"object","properties":{"schemaVersion":{"type":"number","enum":[1]},"sourceFileOid":{"type":"string","minLength":64,"maxLength":64,"pattern":"^[a-f0-9]+$"},"analyzerId":{"type":"string","minLength":1},"analyzerVersion":{"type":"string","minLength":1},"status":{"type":"string","enum":["pending","running","succeeded","failed","unsupported"]},"analyzedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]},"validationStatus":{"anyOf":[{"type":"string","enum":["valid","invalid","unassessed"]},{"type":"null"}]},"errorCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"warningCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"data":{"anyOf":[{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["model"]},"dimensions":{"anyOf":[{"type":"object","properties":{"widthMeters":{"type":"number","minimum":0},"depthMeters":{"type":"number","minimum":0},"heightMeters":{"type":"number","minimum":0},"unitSource":{"type":"string","enum":["format-defined","declared","assumed","unknown"]},"measurementBasis":{"type":"string"}},"required":["widthMeters","depthMeters","heightMeters","unitSource","measurementBasis"],"additionalProperties":false},{"type":"null"}]},"meshCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"geometryCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"triangleCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"vertexCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"materialCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"textureCount":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["kind","dimensions","meshCount","geometryCount","triangleCount","vertexCount","materialCount","textureCount"],"additionalProperties":false},{"type":"object","properties":{"version":{"type":"string"},"colorspace":{"type":"string"},"nodeGraphCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"topLevelNodeCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"kind":{"type":"string","enum":["material"]},"nodeCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"textureCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"materialCount":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["nodeGraphCount","topLevelNodeCount","kind","nodeCount","textureCount","materialCount"],"additionalProperties":false},{"type":"object","properties":{"version":{"type":"string"},"photometricType":{"type":"integer","minimum":1,"maximum":3},"photometricTypeName":{"type":"string","enum":["A","B","C"]},"photometry":{"type":"string","enum":["absolute","relative"]},"manufacturer":{"type":"string"},"luminaire":{"type":"string"},"lightSource":{"type":"string"},"lampCatalog":{"type":"string"},"lampCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"lumensPerLamp":{"type":"number"},"inputWatts":{"type":"number"},"peakCandela":{"type":"number"},"verticalAngles":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"horizontalAngles":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"units":{"type":"string","enum":["feet","meters"]},"dimensions":{"type":"object","properties":{"width":{"type":"number"},"length":{"type":"number"},"height":{"type":"number"}},"required":["width","length","height"],"additionalProperties":false},"hasTilt":{"type":"boolean"},"kind":{"type":"string","enum":["light"]},"luminousFluxLumens":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"efficacyLumensPerWatt":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"beamAngleDegrees":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"fieldAngleDegrees":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"declaredLampFluxLumens":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"downwardFluxLumens":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"upwardFluxLumens":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"metricsTiltDegrees":{"type":"number"},"metricsStatus":{"type":"string","enum":["supported","unsupported","unavailable"]}},"required":["version","photometricType","photometricTypeName","photometry","manufacturer","luminaire","lightSource","lampCatalog","lampCount","lumensPerLamp","inputWatts","peakCandela","verticalAngles","horizontalAngles","units","dimensions","hasTilt","kind","luminousFluxLumens","efficacyLumensPerWatt","beamAngleDegrees","fieldAngleDegrees","metricsStatus"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","enum":["envmap"]},"widthPixels":{"type":"integer","minimum":0,"maximum":9007199254740991},"heightPixels":{"type":"integer","minimum":0,"maximum":9007199254740991},"format":{"type":"string"},"colorSpace":{"type":"string"},"projection":{"type":"string","enum":["equirectangular","unknown"]},"brightnessUnit":{"type":"string","enum":["relative","cd/m2"]},"calibration":{"type":["string","null"]},"minimumBrightness":{"type":"number","minimum":0},"maximumBrightness":{"type":"number","minimum":0},"averageBrightness":{"type":"number","minimum":0},"percentile01Brightness":{"type":"number","minimum":0},"percentile99Brightness":{"type":"number","minimum":0},"dynamicRangeStops":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]}},"required":["kind","widthPixels","heightPixels","format","colorSpace","projection","brightnessUnit","calibration","minimumBrightness","maximumBrightness","averageBrightness","percentile01Brightness","percentile99Brightness","dynamicRangeStops"],"additionalProperties":false}]},{"type":"null"}]}},"required":["schemaVersion","sourceFileOid","analyzerId","analyzerVersion","status","analyzedAt","validationStatus","errorCount","warningCount","data"],"additionalProperties":false},{"type":"null"}]},"materialInfo":{"type":"object","properties":{"version":{"type":"string"},"colorspace":{"type":"string"},"materials":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"category":{"type":"string"}},"required":["category"],"additionalProperties":false}},"nodeGraphCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"topLevelNodeCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"referencedTextures":{"type":"array","items":{"type":"string"}},"warnings":{"type":"array","items":{"type":"string"}}},"required":["materials","nodeGraphCount","topLevelNodeCount","referencedTextures","warnings"],"additionalProperties":false},"lightInfo":{"type":"object","properties":{"version":{"type":"string"},"metadata":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}},"photometricType":{"type":"integer","minimum":1,"maximum":3},"photometricTypeName":{"type":"string","enum":["A","B","C"]},"photometry":{"type":"string","enum":["absolute","relative"]},"manufacturer":{"type":"string"},"luminaire":{"type":"string"},"lightSource":{"type":"string"},"lampCatalog":{"type":"string"},"lampCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"lumensPerLamp":{"type":"number"},"inputWatts":{"type":"number"},"peakCandela":{"type":"number"},"verticalAngles":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"horizontalAngles":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"units":{"type":"string","enum":["feet","meters"]},"dimensions":{"type":"object","properties":{"width":{"type":"number"},"length":{"type":"number"},"height":{"type":"number"}},"required":["width","length","height"],"additionalProperties":false},"hasTilt":{"type":"boolean"},"warnings":{"type":"array","items":{"type":"string"}}},"required":["version","metadata","photometricType","photometricTypeName","photometry","manufacturer","luminaire","lightSource","lampCatalog","lampCount","lumensPerLamp","inputWatts","peakCandela","verticalAngles","horizontalAngles","units","dimensions","hasTilt","warnings"],"additionalProperties":false}},"required":["id","name","type","visibility","projectId","projectName","orgId","orgName","description","keywords","shareLicense","aiUsage","commentMode","reported","likeCount","shareCount","createdAt","updatedAt","archived","metadata","version","latestVersion","versionId","originalExtension","fileOid"],"additionalProperties":false}}}},"400":{"description":"Bad request response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}}}},"401":{"description":"Unauthorized response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Unauthorized response"}}}},"403":{"description":"Forbidden response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Forbidden response"}}}},"404":{"description":"Not found response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Not found response"}}}},"429":{"description":"Too many requests response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Too many requests response"}}}}}}},"/comments/{orgName}/{projectName}/{assetName}":{"get":{"operationId":"list-comments","summary":"List comments","tags":["comments"],"description":"List comments for an asset, addressed by org, project, and asset name.","parameters":[{"schema":{"type":"integer","minimum":0,"maximum":9007199254740991},"in":"query","name":"pageOffset","required":false,"description":"The number of items to skip before starting to return results. Must be 0 or greater."},{"schema":{"type":"integer","minimum":1,"maximum":1000},"in":"query","name":"pageSize","required":false,"description":"The maximum number of items to return. Must be between 1 and 1000."},{"schema":{"type":"string","enum":["createdAt"]},"in":"query","name":"sortBy","required":false,"description":"The field to sort by"},{"schema":{"type":"string","enum":["asc","desc"]},"in":"query","name":"sortDir","required":false,"description":"The direction to sort by"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"orgName","required":true,"description":"The name of the organization"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"projectName","required":true,"description":"The name of the project"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"assetName","required":true,"description":"The name of the asset"}],"security":[{"jwtToken":[]},{"secretToken":[]},{}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"rows":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"text":{"type":"string","minLength":1,"maxLength":10240,"description":"The text of the comment"},"likeCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"moderatedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]},"moderationReason":{"type":["null","string"]},"createdByUserId":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"createdByName":{"type":"string"},"likeId":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]}},"required":["id","text","likeCount","createdAt","moderatedAt","moderationReason","createdByUserId","createdByName","likeId"],"additionalProperties":false}},"rowCount":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["rows","rowCount"],"additionalProperties":false}}}},"400":{"description":"Bad request response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}}}},"401":{"description":"Unauthorized response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Unauthorized response"}}}},"403":{"description":"Forbidden response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Forbidden response"}}}},"404":{"description":"Not found response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Not found response"}}}}}},"post":{"operationId":"create-comment","summary":"Create comment","tags":["comments"],"description":"Create a comment on an asset, addressed by org, project, and asset name.","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","minLength":1,"maxLength":10240,"description":"The comment text"}},"required":["text"],"additionalProperties":false}}},"required":true},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"orgName","required":true,"description":"The name of the organization"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"projectName","required":true,"description":"The name of the project"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"assetName","required":true,"description":"The name of the asset"}],"security":[{"jwtToken":[]},{"secretToken":[]}],"responses":{"201":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"text":{"type":"string","minLength":1,"maxLength":10240,"description":"The text of the comment"},"likeCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"moderatedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]},"moderationReason":{"type":["null","string"]},"createdByUserId":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"createdByName":{"type":"string"},"likeId":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]}},"required":["id","text","likeCount","createdAt","moderatedAt","moderationReason","createdByUserId","createdByName","likeId"],"additionalProperties":false}}}},"400":{"description":"Bad request response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}}}},"401":{"description":"Unauthorized response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Unauthorized response"}}}},"403":{"description":"Forbidden response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Forbidden response"}}}},"404":{"description":"Not found response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Not found response"}}}}}}},"/media/{orgName}/{projectName}/{assetName}@{version}.blend":{"get":{"operationId":"get-media-v2-model-blend","summary":"Get asset Blend (media v2)","tags":["assets"],"description":"Get asset as Blend model (read-only). Redirects if cached or already Blend; 404 otherwise. Does not start tasks.","parameters":[{"schema":{"type":"boolean"},"in":"query","name":"download","required":false},{"schema":{"type":"boolean"},"in":"query","name":"original","required":false},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"orgName","required":true,"description":"The name of the organization"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"projectName","required":true,"description":"The name of the project"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"assetName","required":true,"description":"The name of the asset"},{"schema":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[a-zA-Z0-9][a-zA-Z0-9._+-]*$"},"in":"path","name":"version","required":true}],"security":[{"jwtToken":[]},{"secretToken":[]},{"frontendToken":[]},{}],"responses":{"302":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"redirectUrl":{"type":"string"}},"required":["redirectUrl"],"additionalProperties":false}}}},"400":{"description":"Bad request response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}}}},"403":{"description":"Forbidden response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Forbidden response"}}}},"404":{"description":"Not found response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Not found response"}}}}}},"post":{"operationId":"post-media-v2-model-blend","summary":"POST asset Blend (media v2)","tags":["assets"],"description":"Start or return existing Blend conversion task. Always returns 202 task status payload.","parameters":[{"schema":{"type":"boolean"},"in":"query","name":"download","required":false},{"schema":{"type":"boolean"},"in":"query","name":"original","required":false},{"schema":{"type":"boolean"},"in":"query","name":"cache","required":false},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"orgName","required":true,"description":"The name of the organization"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"projectName","required":true,"description":"The name of the project"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"assetName","required":true,"description":"The name of the asset"},{"schema":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[a-zA-Z0-9][a-zA-Z0-9._+-]*$"},"in":"path","name":"version","required":true}],"security":[{"jwtToken":[]},{"secretToken":[]},{"frontendToken":[]},{}],"responses":{"202":{"description":"Task status; poll taskUrl or subscribe to eventsUrl","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["QUEUED","RUNNING","SUCCESS","FAILED"],"description":"Current task status"},"taskId":{"description":"Task ID for polling, when a task exists","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"taskUrl":{"description":"URL to poll task status (GET), when a task exists","type":"string","format":"uri"},"eventsUrl":{"description":"URL for task events SSE stream, when a task exists","type":"string","format":"uri"}},"required":["status"],"additionalProperties":false,"description":"Task status; poll taskUrl or subscribe to eventsUrl"}}}},"400":{"description":"Bad request response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}}}},"403":{"description":"Forbidden response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Forbidden response"}}}},"404":{"description":"Not found response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Not found response"}}}}}}},"/media/{orgName}/{projectName}/{assetName}.blend":{"get":{"operationId":"get-media-v2-model-blend-optional-1","summary":"Get asset Blend (media v2)","tags":["assets"],"description":"Get asset as Blend model (read-only). Redirects if cached or already Blend; 404 otherwise. Does not start tasks.","parameters":[{"schema":{"type":"boolean"},"in":"query","name":"download","required":false},{"schema":{"type":"boolean"},"in":"query","name":"original","required":false},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"orgName","required":true,"description":"The name of the organization"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"projectName","required":true,"description":"The name of the project"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"assetName","required":true,"description":"The name of the asset"}],"security":[{"jwtToken":[]},{"secretToken":[]},{"frontendToken":[]},{}],"responses":{"302":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"redirectUrl":{"type":"string"}},"required":["redirectUrl"],"additionalProperties":false}}}},"400":{"description":"Bad request response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}}}},"403":{"description":"Forbidden response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Forbidden response"}}}},"404":{"description":"Not found response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Not found response"}}}}}},"post":{"operationId":"post-media-v2-model-blend-optional-1","summary":"POST asset Blend (media v2)","tags":["assets"],"description":"Start or return existing Blend conversion task. Always returns 202 task status payload.","parameters":[{"schema":{"type":"boolean"},"in":"query","name":"download","required":false},{"schema":{"type":"boolean"},"in":"query","name":"original","required":false},{"schema":{"type":"boolean"},"in":"query","name":"cache","required":false},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"orgName","required":true,"description":"The name of the organization"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"projectName","required":true,"description":"The name of the project"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"assetName","required":true,"description":"The name of the asset"}],"security":[{"jwtToken":[]},{"secretToken":[]},{"frontendToken":[]},{}],"responses":{"202":{"description":"Task status; poll taskUrl or subscribe to eventsUrl","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["QUEUED","RUNNING","SUCCESS","FAILED"],"description":"Current task status"},"taskId":{"description":"Task ID for polling, when a task exists","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"taskUrl":{"description":"URL to poll task status (GET), when a task exists","type":"string","format":"uri"},"eventsUrl":{"description":"URL for task events SSE stream, when a task exists","type":"string","format":"uri"}},"required":["status"],"additionalProperties":false,"description":"Task status; poll taskUrl or subscribe to eventsUrl"}}}},"400":{"description":"Bad request response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}}}},"403":{"description":"Forbidden response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Forbidden response"}}}},"404":{"description":"Not found response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Not found response"}}}}}}},"/media/{orgName}/{projectName}/{assetName}@{version}.exr":{"get":{"operationId":"get-media-v2-image-exr","summary":"Get asset EXR (media v2)","tags":["assets"],"description":"Get asset as EXR environment map (read-only). Redirects if cached; 404 otherwise. ENVMAP only.","parameters":[{"schema":{"type":"boolean"},"in":"query","name":"download","required":false},{"schema":{"type":"boolean"},"in":"query","name":"original","required":false},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"orgName","required":true,"description":"The name of the organization"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"projectName","required":true,"description":"The name of the project"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"assetName","required":true,"description":"The name of the asset"},{"schema":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[a-zA-Z0-9][a-zA-Z0-9._+-]*$"},"in":"path","name":"version","required":true}],"security":[{"jwtToken":[]},{"secretToken":[]},{"frontendToken":[]},{}],"responses":{"302":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"redirectUrl":{"type":"string"}},"required":["redirectUrl"],"additionalProperties":false}}}},"400":{"description":"Bad request response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}}}},"403":{"description":"Forbidden response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Forbidden response"}}}},"404":{"description":"Not found response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Not found response"}}}}}},"post":{"operationId":"post-media-v2-image-exr","summary":"POST asset EXR (media v2)","tags":["assets"],"description":"Start or return existing EXR conversion task. ENVMAP only. 302 if done, 202 with task URLs otherwise.","parameters":[{"schema":{"type":"boolean"},"in":"query","name":"download","required":false},{"schema":{"type":"boolean"},"in":"query","name":"original","required":false},{"schema":{"type":"boolean"},"in":"query","name":"cache","required":false},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"orgName","required":true,"description":"The name of the organization"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"projectName","required":true,"description":"The name of the project"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"assetName","required":true,"description":"The name of the asset"},{"schema":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[a-zA-Z0-9][a-zA-Z0-9._+-]*$"},"in":"path","name":"version","required":true}],"security":[{"jwtToken":[]},{"secretToken":[]},{"frontendToken":[]},{}],"responses":{"202":{"description":"Task status; poll taskUrl or subscribe to eventsUrl","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["QUEUED","RUNNING","SUCCESS","FAILED"],"description":"Current task status"},"taskId":{"description":"Task ID for polling, when a task exists","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"taskUrl":{"description":"URL to poll task status (GET), when a task exists","type":"string","format":"uri"},"eventsUrl":{"description":"URL for task events SSE stream, when a task exists","type":"string","format":"uri"}},"required":["status"],"additionalProperties":false,"description":"Task status; poll taskUrl or subscribe to eventsUrl"}}}},"302":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"redirectUrl":{"type":"string"}},"required":["redirectUrl"],"additionalProperties":false}}}},"400":{"description":"Bad request response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}}}},"403":{"description":"Forbidden response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Forbidden response"}}}},"404":{"description":"Not found response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Not found response"}}}}}}},"/media/{orgName}/{projectName}/{assetName}.exr":{"get":{"operationId":"get-media-v2-image-exr-optional-1","summary":"Get asset EXR (media v2)","tags":["assets"],"description":"Get asset as EXR environment map (read-only). Redirects if cached; 404 otherwise. ENVMAP only.","parameters":[{"schema":{"type":"boolean"},"in":"query","name":"download","required":false},{"schema":{"type":"boolean"},"in":"query","name":"original","required":false},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"orgName","required":true,"description":"The name of the organization"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"projectName","required":true,"description":"The name of the project"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"assetName","required":true,"description":"The name of the asset"}],"security":[{"jwtToken":[]},{"secretToken":[]},{"frontendToken":[]},{}],"responses":{"302":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"redirectUrl":{"type":"string"}},"required":["redirectUrl"],"additionalProperties":false}}}},"400":{"description":"Bad request response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}}}},"403":{"description":"Forbidden response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Forbidden response"}}}},"404":{"description":"Not found response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Not found response"}}}}}},"post":{"operationId":"post-media-v2-image-exr-optional-1","summary":"POST asset EXR (media v2)","tags":["assets"],"description":"Start or return existing EXR conversion task. ENVMAP only. 302 if done, 202 with task URLs otherwise.","parameters":[{"schema":{"type":"boolean"},"in":"query","name":"download","required":false},{"schema":{"type":"boolean"},"in":"query","name":"original","required":false},{"schema":{"type":"boolean"},"in":"query","name":"cache","required":false},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"orgName","required":true,"description":"The name of the organization"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"projectName","required":true,"description":"The name of the project"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"assetName","required":true,"description":"The name of the asset"}],"security":[{"jwtToken":[]},{"secretToken":[]},{"frontendToken":[]},{}],"responses":{"202":{"description":"Task status; poll taskUrl or subscribe to eventsUrl","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["QUEUED","RUNNING","SUCCESS","FAILED"],"description":"Current task status"},"taskId":{"description":"Task ID for polling, when a task exists","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"taskUrl":{"description":"URL to poll task status (GET), when a task exists","type":"string","format":"uri"},"eventsUrl":{"description":"URL for task events SSE stream, when a task exists","type":"string","format":"uri"}},"required":["status"],"additionalProperties":false,"description":"Task status; poll taskUrl or subscribe to eventsUrl"}}}},"302":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"redirectUrl":{"type":"string"}},"required":["redirectUrl"],"additionalProperties":false}}}},"400":{"description":"Bad request response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}}}},"403":{"description":"Forbidden response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Forbidden response"}}}},"404":{"description":"Not found response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Not found response"}}}}}}},"/media/{orgName}/{projectName}/{assetName}@{version}.fbx":{"get":{"operationId":"get-media-v2-model-fbx","summary":"Get asset FBX (media v2)","tags":["assets"],"description":"Get asset as FBX model (read-only). Redirects if cached or already FBX; 404 otherwise. Does not start tasks.","parameters":[{"schema":{"type":"boolean"},"in":"query","name":"download","required":false},{"schema":{"type":"boolean"},"in":"query","name":"original","required":false},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"orgName","required":true,"description":"The name of the organization"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"projectName","required":true,"description":"The name of the project"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"assetName","required":true,"description":"The name of the asset"},{"schema":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[a-zA-Z0-9][a-zA-Z0-9._+-]*$"},"in":"path","name":"version","required":true}],"security":[{"jwtToken":[]},{"secretToken":[]},{"frontendToken":[]},{}],"responses":{"302":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"redirectUrl":{"type":"string"}},"required":["redirectUrl"],"additionalProperties":false}}}},"400":{"description":"Bad request response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}}}},"403":{"description":"Forbidden response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Forbidden response"}}}},"404":{"description":"Not found response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Not found response"}}}}}},"post":{"operationId":"post-media-v2-model-fbx","summary":"POST asset FBX (media v2)","tags":["assets"],"description":"Start or return existing FBX conversion task. Always returns 202 task status payload.","parameters":[{"schema":{"type":"boolean"},"in":"query","name":"download","required":false},{"schema":{"type":"boolean"},"in":"query","name":"original","required":false},{"schema":{"type":"boolean"},"in":"query","name":"cache","required":false},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"orgName","required":true,"description":"The name of the organization"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"projectName","required":true,"description":"The name of the project"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"assetName","required":true,"description":"The name of the asset"},{"schema":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[a-zA-Z0-9][a-zA-Z0-9._+-]*$"},"in":"path","name":"version","required":true}],"security":[{"jwtToken":[]},{"secretToken":[]},{"frontendToken":[]},{}],"responses":{"202":{"description":"Task status; poll taskUrl or subscribe to eventsUrl","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["QUEUED","RUNNING","SUCCESS","FAILED"],"description":"Current task status"},"taskId":{"description":"Task ID for polling, when a task exists","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"taskUrl":{"description":"URL to poll task status (GET), when a task exists","type":"string","format":"uri"},"eventsUrl":{"description":"URL for task events SSE stream, when a task exists","type":"string","format":"uri"}},"required":["status"],"additionalProperties":false,"description":"Task status; poll taskUrl or subscribe to eventsUrl"}}}},"400":{"description":"Bad request response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}}}},"403":{"description":"Forbidden response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Forbidden response"}}}},"404":{"description":"Not found response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Not found response"}}}}}}},"/media/{orgName}/{projectName}/{assetName}.fbx":{"get":{"operationId":"get-media-v2-model-fbx-optional-1","summary":"Get asset FBX (media v2)","tags":["assets"],"description":"Get asset as FBX model (read-only). Redirects if cached or already FBX; 404 otherwise. Does not start tasks.","parameters":[{"schema":{"type":"boolean"},"in":"query","name":"download","required":false},{"schema":{"type":"boolean"},"in":"query","name":"original","required":false},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"orgName","required":true,"description":"The name of the organization"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"projectName","required":true,"description":"The name of the project"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"assetName","required":true,"description":"The name of the asset"}],"security":[{"jwtToken":[]},{"secretToken":[]},{"frontendToken":[]},{}],"responses":{"302":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"redirectUrl":{"type":"string"}},"required":["redirectUrl"],"additionalProperties":false}}}},"400":{"description":"Bad request response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}}}},"403":{"description":"Forbidden response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Forbidden response"}}}},"404":{"description":"Not found response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Not found response"}}}}}},"post":{"operationId":"post-media-v2-model-fbx-optional-1","summary":"POST asset FBX (media v2)","tags":["assets"],"description":"Start or return existing FBX conversion task. Always returns 202 task status payload.","parameters":[{"schema":{"type":"boolean"},"in":"query","name":"download","required":false},{"schema":{"type":"boolean"},"in":"query","name":"original","required":false},{"schema":{"type":"boolean"},"in":"query","name":"cache","required":false},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"orgName","required":true,"description":"The name of the organization"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"projectName","required":true,"description":"The name of the project"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"assetName","required":true,"description":"The name of the asset"}],"security":[{"jwtToken":[]},{"secretToken":[]},{"frontendToken":[]},{}],"responses":{"202":{"description":"Task status; poll taskUrl or subscribe to eventsUrl","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["QUEUED","RUNNING","SUCCESS","FAILED"],"description":"Current task status"},"taskId":{"description":"Task ID for polling, when a task exists","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"taskUrl":{"description":"URL to poll task status (GET), when a task exists","type":"string","format":"uri"},"eventsUrl":{"description":"URL for task events SSE stream, when a task exists","type":"string","format":"uri"}},"required":["status"],"additionalProperties":false,"description":"Task status; poll taskUrl or subscribe to eventsUrl"}}}},"400":{"description":"Bad request response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}}}},"403":{"description":"Forbidden response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Forbidden response"}}}},"404":{"description":"Not found response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Not found response"}}}}}}},"/media/{orgName}/{projectName}/{assetName}@{version}.fcstd":{"get":{"operationId":"get-media-v2-cad-fcstd","summary":"Get asset FCStd CAD (media v2)","tags":["assets"],"description":"Get asset as FCStd CAD file (read-only). Redirects if cached or already FCStd; 404 otherwise. Does not start tasks.","parameters":[{"schema":{"type":"boolean"},"in":"query","name":"download","required":false},{"schema":{"type":"boolean"},"in":"query","name":"original","required":false},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"orgName","required":true,"description":"The name of the organization"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"projectName","required":true,"description":"The name of the project"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"assetName","required":true,"description":"The name of the asset"},{"schema":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[a-zA-Z0-9][a-zA-Z0-9._+-]*$"},"in":"path","name":"version","required":true}],"security":[{"jwtToken":[]},{"secretToken":[]},{"frontendToken":[]},{}],"responses":{"302":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"redirectUrl":{"type":"string"}},"required":["redirectUrl"],"additionalProperties":false}}}},"400":{"description":"Bad request response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}}}},"403":{"description":"Forbidden response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Forbidden response"}}}},"404":{"description":"Not found response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Not found response"}}}}}},"post":{"operationId":"post-media-v2-cad-fcstd","summary":"POST asset FCStd CAD (media v2)","tags":["assets"],"description":"Start or return existing FCStd CAD conversion task. Always returns 202 task status payload.","parameters":[{"schema":{"type":"boolean"},"in":"query","name":"download","required":false},{"schema":{"type":"boolean"},"in":"query","name":"original","required":false},{"schema":{"type":"boolean"},"in":"query","name":"cache","required":false},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"orgName","required":true,"description":"The name of the organization"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"projectName","required":true,"description":"The name of the project"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"assetName","required":true,"description":"The name of the asset"},{"schema":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[a-zA-Z0-9][a-zA-Z0-9._+-]*$"},"in":"path","name":"version","required":true}],"security":[{"jwtToken":[]},{"secretToken":[]},{"frontendToken":[]},{}],"responses":{"202":{"description":"Task status; poll taskUrl or subscribe to eventsUrl","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["QUEUED","RUNNING","SUCCESS","FAILED"],"description":"Current task status"},"taskId":{"description":"Task ID for polling, when a task exists","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"taskUrl":{"description":"URL to poll task status (GET), when a task exists","type":"string","format":"uri"},"eventsUrl":{"description":"URL for task events SSE stream, when a task exists","type":"string","format":"uri"}},"required":["status"],"additionalProperties":false,"description":"Task status; poll taskUrl or subscribe to eventsUrl"}}}},"400":{"description":"Bad request response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}}}},"403":{"description":"Forbidden response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Forbidden response"}}}},"404":{"description":"Not found response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Not found response"}}}}}}},"/media/{orgName}/{projectName}/{assetName}.fcstd":{"get":{"operationId":"get-media-v2-cad-fcstd-optional-1","summary":"Get asset FCStd CAD (media v2)","tags":["assets"],"description":"Get asset as FCStd CAD file (read-only). Redirects if cached or already FCStd; 404 otherwise. Does not start tasks.","parameters":[{"schema":{"type":"boolean"},"in":"query","name":"download","required":false},{"schema":{"type":"boolean"},"in":"query","name":"original","required":false},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"orgName","required":true,"description":"The name of the organization"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"projectName","required":true,"description":"The name of the project"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"assetName","required":true,"description":"The name of the asset"}],"security":[{"jwtToken":[]},{"secretToken":[]},{"frontendToken":[]},{}],"responses":{"302":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"redirectUrl":{"type":"string"}},"required":["redirectUrl"],"additionalProperties":false}}}},"400":{"description":"Bad request response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}}}},"403":{"description":"Forbidden response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Forbidden response"}}}},"404":{"description":"Not found response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Not found response"}}}}}},"post":{"operationId":"post-media-v2-cad-fcstd-optional-1","summary":"POST asset FCStd CAD (media v2)","tags":["assets"],"description":"Start or return existing FCStd CAD conversion task. Always returns 202 task status payload.","parameters":[{"schema":{"type":"boolean"},"in":"query","name":"download","required":false},{"schema":{"type":"boolean"},"in":"query","name":"original","required":false},{"schema":{"type":"boolean"},"in":"query","name":"cache","required":false},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"orgName","required":true,"description":"The name of the organization"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"projectName","required":true,"description":"The name of the project"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"assetName","required":true,"description":"The name of the asset"}],"security":[{"jwtToken":[]},{"secretToken":[]},{"frontendToken":[]},{}],"responses":{"202":{"description":"Task status; poll taskUrl or subscribe to eventsUrl","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["QUEUED","RUNNING","SUCCESS","FAILED"],"description":"Current task status"},"taskId":{"description":"Task ID for polling, when a task exists","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"taskUrl":{"description":"URL to poll task status (GET), when a task exists","type":"string","format":"uri"},"eventsUrl":{"description":"URL for task events SSE stream, when a task exists","type":"string","format":"uri"}},"required":["status"],"additionalProperties":false,"description":"Task status; poll taskUrl or subscribe to eventsUrl"}}}},"400":{"description":"Bad request response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}}}},"403":{"description":"Forbidden response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Forbidden response"}}}},"404":{"description":"Not found response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Not found response"}}}}}}},"/media/{orgName}/{projectName}/{assetName}@{version}.glb":{"get":{"operationId":"get-media-v2-model-glb","summary":"Get asset GLB (media v2)","tags":["assets"],"description":"Get asset as GLB model (read-only). Redirects if cached or already GLB; 404 otherwise. Does not start tasks.","parameters":[{"schema":{"type":"boolean"},"in":"query","name":"original","required":false},{"schema":{"type":"boolean"},"in":"query","name":"download","required":false},{"schema":{"type":"string","enum":["draco","meshopt","quantize"]},"in":"query","name":"meshCompress","required":false},{"schema":{"type":"string","enum":["ktx2","webp","avif","auto"]},"in":"query","name":"textureCompress","required":false},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"orgName","required":true,"description":"The name of the organization"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"projectName","required":true,"description":"The name of the project"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"assetName","required":true,"description":"The name of the asset"},{"schema":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[a-zA-Z0-9][a-zA-Z0-9._+-]*$"},"in":"path","name":"version","required":true}],"security":[{"jwtToken":[]},{"secretToken":[]},{"frontendToken":[]},{}],"responses":{"302":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"redirectUrl":{"type":"string"}},"required":["redirectUrl"],"additionalProperties":false}}}},"400":{"description":"Bad request response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}}}},"403":{"description":"Forbidden response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Forbidden response"}}}},"404":{"description":"Not found response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Not found response"}}}}}},"post":{"operationId":"post-media-v2-model-glb","summary":"POST asset GLB (media v2)","tags":["assets"],"description":"Start or return existing GLB conversion/optimization task. Always returns 202 task status payload.","parameters":[{"schema":{"type":"boolean"},"in":"query","name":"original","required":false},{"schema":{"type":"boolean"},"in":"query","name":"download","required":false},{"schema":{"type":"string","enum":["draco","meshopt","quantize"]},"in":"query","name":"meshCompress","required":false},{"schema":{"type":"string","enum":["ktx2","webp","avif","auto"]},"in":"query","name":"textureCompress","required":false},{"schema":{"type":"boolean"},"in":"query","name":"cache","required":false},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"orgName","required":true,"description":"The name of the organization"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"projectName","required":true,"description":"The name of the project"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"assetName","required":true,"description":"The name of the asset"},{"schema":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[a-zA-Z0-9][a-zA-Z0-9._+-]*$"},"in":"path","name":"version","required":true}],"security":[{"jwtToken":[]},{"secretToken":[]},{"frontendToken":[]},{}],"responses":{"202":{"description":"Task status; poll taskUrl or subscribe to eventsUrl","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["QUEUED","RUNNING","SUCCESS","FAILED"],"description":"Current task status"},"taskId":{"description":"Task ID for polling, when a task exists","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"taskUrl":{"description":"URL to poll task status (GET), when a task exists","type":"string","format":"uri"},"eventsUrl":{"description":"URL for task events SSE stream, when a task exists","type":"string","format":"uri"}},"required":["status"],"additionalProperties":false,"description":"Task status; poll taskUrl or subscribe to eventsUrl"}}}},"400":{"description":"Bad request response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}}}},"403":{"description":"Forbidden response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Forbidden response"}}}},"404":{"description":"Not found response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Not found response"}}}}}}},"/media/{orgName}/{projectName}/{assetName}.glb":{"get":{"operationId":"get-media-v2-model-glb-optional-1","summary":"Get asset GLB (media v2)","tags":["assets"],"description":"Get asset as GLB model (read-only). Redirects if cached or already GLB; 404 otherwise. Does not start tasks.","parameters":[{"schema":{"type":"boolean"},"in":"query","name":"original","required":false},{"schema":{"type":"boolean"},"in":"query","name":"download","required":false},{"schema":{"type":"string","enum":["draco","meshopt","quantize"]},"in":"query","name":"meshCompress","required":false},{"schema":{"type":"string","enum":["ktx2","webp","avif","auto"]},"in":"query","name":"textureCompress","required":false},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"orgName","required":true,"description":"The name of the organization"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"projectName","required":true,"description":"The name of the project"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"assetName","required":true,"description":"The name of the asset"}],"security":[{"jwtToken":[]},{"secretToken":[]},{"frontendToken":[]},{}],"responses":{"302":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"redirectUrl":{"type":"string"}},"required":["redirectUrl"],"additionalProperties":false}}}},"400":{"description":"Bad request response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}}}},"403":{"description":"Forbidden response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Forbidden response"}}}},"404":{"description":"Not found response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Not found response"}}}}}},"post":{"operationId":"post-media-v2-model-glb-optional-1","summary":"POST asset GLB (media v2)","tags":["assets"],"description":"Start or return existing GLB conversion/optimization task. Always returns 202 task status payload.","parameters":[{"schema":{"type":"boolean"},"in":"query","name":"original","required":false},{"schema":{"type":"boolean"},"in":"query","name":"download","required":false},{"schema":{"type":"string","enum":["draco","meshopt","quantize"]},"in":"query","name":"meshCompress","required":false},{"schema":{"type":"string","enum":["ktx2","webp","avif","auto"]},"in":"query","name":"textureCompress","required":false},{"schema":{"type":"boolean"},"in":"query","name":"cache","required":false},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"orgName","required":true,"description":"The name of the organization"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"projectName","required":true,"description":"The name of the project"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"assetName","required":true,"description":"The name of the asset"}],"security":[{"jwtToken":[]},{"secretToken":[]},{"frontendToken":[]},{}],"responses":{"202":{"description":"Task status; poll taskUrl or subscribe to eventsUrl","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["QUEUED","RUNNING","SUCCESS","FAILED"],"description":"Current task status"},"taskId":{"description":"Task ID for polling, when a task exists","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"taskUrl":{"description":"URL to poll task status (GET), when a task exists","type":"string","format":"uri"},"eventsUrl":{"description":"URL for task events SSE stream, when a task exists","type":"string","format":"uri"}},"required":["status"],"additionalProperties":false,"description":"Task status; poll taskUrl or subscribe to eventsUrl"}}}},"400":{"description":"Bad request response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}}}},"403":{"description":"Forbidden response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Forbidden response"}}}},"404":{"description":"Not found response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Not found response"}}}}}}},"/media/{orgName}/{projectName}/{assetName}@{version}.hdr":{"get":{"operationId":"get-media-v2-image-hdr","summary":"Get asset HDR (media v2)","tags":["assets"],"description":"Get asset as HDR environment map (read-only). Redirects if cached; 404 otherwise. ENVMAP only.","parameters":[{"schema":{"type":"boolean"},"in":"query","name":"download","required":false},{"schema":{"type":"boolean"},"in":"query","name":"original","required":false},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"orgName","required":true,"description":"The name of the organization"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"projectName","required":true,"description":"The name of the project"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"assetName","required":true,"description":"The name of the asset"},{"schema":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[a-zA-Z0-9][a-zA-Z0-9._+-]*$"},"in":"path","name":"version","required":true}],"security":[{"jwtToken":[]},{"secretToken":[]},{"frontendToken":[]},{}],"responses":{"302":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"redirectUrl":{"type":"string"}},"required":["redirectUrl"],"additionalProperties":false}}}},"400":{"description":"Bad request response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}}}},"403":{"description":"Forbidden response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Forbidden response"}}}},"404":{"description":"Not found response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Not found response"}}}}}},"post":{"operationId":"post-media-v2-image-hdr","summary":"POST asset HDR (media v2)","tags":["assets"],"description":"Start or return existing HDR conversion task. ENVMAP only. 302 if done, 202 with task URLs otherwise.","parameters":[{"schema":{"type":"boolean"},"in":"query","name":"download","required":false},{"schema":{"type":"boolean"},"in":"query","name":"original","required":false},{"schema":{"type":"boolean"},"in":"query","name":"cache","required":false},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"orgName","required":true,"description":"The name of the organization"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"projectName","required":true,"description":"The name of the project"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"assetName","required":true,"description":"The name of the asset"},{"schema":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[a-zA-Z0-9][a-zA-Z0-9._+-]*$"},"in":"path","name":"version","required":true}],"security":[{"jwtToken":[]},{"secretToken":[]},{"frontendToken":[]},{}],"responses":{"202":{"description":"Task status; poll taskUrl or subscribe to eventsUrl","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["QUEUED","RUNNING","SUCCESS","FAILED"],"description":"Current task status"},"taskId":{"description":"Task ID for polling, when a task exists","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"taskUrl":{"description":"URL to poll task status (GET), when a task exists","type":"string","format":"uri"},"eventsUrl":{"description":"URL for task events SSE stream, when a task exists","type":"string","format":"uri"}},"required":["status"],"additionalProperties":false,"description":"Task status; poll taskUrl or subscribe to eventsUrl"}}}},"302":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"redirectUrl":{"type":"string"}},"required":["redirectUrl"],"additionalProperties":false}}}},"400":{"description":"Bad request response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}}}},"403":{"description":"Forbidden response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Forbidden response"}}}},"404":{"description":"Not found response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Not found response"}}}}}}},"/media/{orgName}/{projectName}/{assetName}.hdr":{"get":{"operationId":"get-media-v2-image-hdr-optional-1","summary":"Get asset HDR (media v2)","tags":["assets"],"description":"Get asset as HDR environment map (read-only). Redirects if cached; 404 otherwise. ENVMAP only.","parameters":[{"schema":{"type":"boolean"},"in":"query","name":"download","required":false},{"schema":{"type":"boolean"},"in":"query","name":"original","required":false},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"orgName","required":true,"description":"The name of the organization"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"projectName","required":true,"description":"The name of the project"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"assetName","required":true,"description":"The name of the asset"}],"security":[{"jwtToken":[]},{"secretToken":[]},{"frontendToken":[]},{}],"responses":{"302":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"redirectUrl":{"type":"string"}},"required":["redirectUrl"],"additionalProperties":false}}}},"400":{"description":"Bad request response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}}}},"403":{"description":"Forbidden response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Forbidden response"}}}},"404":{"description":"Not found response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Not found response"}}}}}},"post":{"operationId":"post-media-v2-image-hdr-optional-1","summary":"POST asset HDR (media v2)","tags":["assets"],"description":"Start or return existing HDR conversion task. ENVMAP only. 302 if done, 202 with task URLs otherwise.","parameters":[{"schema":{"type":"boolean"},"in":"query","name":"download","required":false},{"schema":{"type":"boolean"},"in":"query","name":"original","required":false},{"schema":{"type":"boolean"},"in":"query","name":"cache","required":false},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"orgName","required":true,"description":"The name of the organization"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"projectName","required":true,"description":"The name of the project"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"assetName","required":true,"description":"The name of the asset"}],"security":[{"jwtToken":[]},{"secretToken":[]},{"frontendToken":[]},{}],"responses":{"202":{"description":"Task status; poll taskUrl or subscribe to eventsUrl","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["QUEUED","RUNNING","SUCCESS","FAILED"],"description":"Current task status"},"taskId":{"description":"Task ID for polling, when a task exists","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"taskUrl":{"description":"URL to poll task status (GET), when a task exists","type":"string","format":"uri"},"eventsUrl":{"description":"URL for task events SSE stream, when a task exists","type":"string","format":"uri"}},"required":["status"],"additionalProperties":false,"description":"Task status; poll taskUrl or subscribe to eventsUrl"}}}},"302":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"redirectUrl":{"type":"string"}},"required":["redirectUrl"],"additionalProperties":false}}}},"400":{"description":"Bad request response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}}}},"403":{"description":"Forbidden response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Forbidden response"}}}},"404":{"description":"Not found response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Not found response"}}}}}}},"/media/{orgName}/{projectName}/{assetName}@{version}.iges":{"get":{"operationId":"get-media-v2-cad-iges","summary":"Get asset IGES CAD (media v2)","tags":["assets"],"description":"Get asset as IGES CAD file (read-only). Redirects if cached or already IGES; 404 otherwise. Does not start tasks.","parameters":[{"schema":{"type":"boolean"},"in":"query","name":"download","required":false},{"schema":{"type":"boolean"},"in":"query","name":"original","required":false},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"orgName","required":true,"description":"The name of the organization"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"projectName","required":true,"description":"The name of the project"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"assetName","required":true,"description":"The name of the asset"},{"schema":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[a-zA-Z0-9][a-zA-Z0-9._+-]*$"},"in":"path","name":"version","required":true}],"security":[{"jwtToken":[]},{"secretToken":[]},{"frontendToken":[]},{}],"responses":{"302":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"redirectUrl":{"type":"string"}},"required":["redirectUrl"],"additionalProperties":false}}}},"400":{"description":"Bad request response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}}}},"403":{"description":"Forbidden response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Forbidden response"}}}},"404":{"description":"Not found response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Not found response"}}}}}},"post":{"operationId":"post-media-v2-cad-iges","summary":"POST asset IGES CAD (media v2)","tags":["assets"],"description":"Start or return existing IGES CAD conversion task. Always returns 202 task status payload.","parameters":[{"schema":{"type":"boolean"},"in":"query","name":"download","required":false},{"schema":{"type":"boolean"},"in":"query","name":"original","required":false},{"schema":{"type":"boolean"},"in":"query","name":"cache","required":false},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"orgName","required":true,"description":"The name of the organization"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"projectName","required":true,"description":"The name of the project"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"assetName","required":true,"description":"The name of the asset"},{"schema":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[a-zA-Z0-9][a-zA-Z0-9._+-]*$"},"in":"path","name":"version","required":true}],"security":[{"jwtToken":[]},{"secretToken":[]},{"frontendToken":[]},{}],"responses":{"202":{"description":"Task status; poll taskUrl or subscribe to eventsUrl","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["QUEUED","RUNNING","SUCCESS","FAILED"],"description":"Current task status"},"taskId":{"description":"Task ID for polling, when a task exists","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"taskUrl":{"description":"URL to poll task status (GET), when a task exists","type":"string","format":"uri"},"eventsUrl":{"description":"URL for task events SSE stream, when a task exists","type":"string","format":"uri"}},"required":["status"],"additionalProperties":false,"description":"Task status; poll taskUrl or subscribe to eventsUrl"}}}},"400":{"description":"Bad request response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}}}},"403":{"description":"Forbidden response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Forbidden response"}}}},"404":{"description":"Not found response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Not found response"}}}}}}},"/media/{orgName}/{projectName}/{assetName}.iges":{"get":{"operationId":"get-media-v2-cad-iges-optional-1","summary":"Get asset IGES CAD (media v2)","tags":["assets"],"description":"Get asset as IGES CAD file (read-only). Redirects if cached or already IGES; 404 otherwise. Does not start tasks.","parameters":[{"schema":{"type":"boolean"},"in":"query","name":"download","required":false},{"schema":{"type":"boolean"},"in":"query","name":"original","required":false},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"orgName","required":true,"description":"The name of the organization"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"projectName","required":true,"description":"The name of the project"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"assetName","required":true,"description":"The name of the asset"}],"security":[{"jwtToken":[]},{"secretToken":[]},{"frontendToken":[]},{}],"responses":{"302":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"redirectUrl":{"type":"string"}},"required":["redirectUrl"],"additionalProperties":false}}}},"400":{"description":"Bad request response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}}}},"403":{"description":"Forbidden response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Forbidden response"}}}},"404":{"description":"Not found response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Not found response"}}}}}},"post":{"operationId":"post-media-v2-cad-iges-optional-1","summary":"POST asset IGES CAD (media v2)","tags":["assets"],"description":"Start or return existing IGES CAD conversion task. Always returns 202 task status payload.","parameters":[{"schema":{"type":"boolean"},"in":"query","name":"download","required":false},{"schema":{"type":"boolean"},"in":"query","name":"original","required":false},{"schema":{"type":"boolean"},"in":"query","name":"cache","required":false},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"orgName","required":true,"description":"The name of the organization"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"projectName","required":true,"description":"The name of the project"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"assetName","required":true,"description":"The name of the asset"}],"security":[{"jwtToken":[]},{"secretToken":[]},{"frontendToken":[]},{}],"responses":{"202":{"description":"Task status; poll taskUrl or subscribe to eventsUrl","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["QUEUED","RUNNING","SUCCESS","FAILED"],"description":"Current task status"},"taskId":{"description":"Task ID for polling, when a task exists","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"taskUrl":{"description":"URL to poll task status (GET), when a task exists","type":"string","format":"uri"},"eventsUrl":{"description":"URL for task events SSE stream, when a task exists","type":"string","format":"uri"}},"required":["status"],"additionalProperties":false,"description":"Task status; poll taskUrl or subscribe to eventsUrl"}}}},"400":{"description":"Bad request response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}}}},"403":{"description":"Forbidden response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Forbidden response"}}}},"404":{"description":"Not found response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Not found response"}}}}}}},"/media/{orgName}/{projectName}/{assetName}@{version}.step":{"get":{"operationId":"get-media-v2-cad-step","summary":"Get asset STEP CAD (media v2)","tags":["assets"],"description":"Get asset as STEP CAD file (read-only). Redirects if cached or already STEP; 404 otherwise. Does not start tasks.","parameters":[{"schema":{"type":"boolean"},"in":"query","name":"download","required":false},{"schema":{"type":"boolean"},"in":"query","name":"original","required":false},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"orgName","required":true,"description":"The name of the organization"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"projectName","required":true,"description":"The name of the project"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"assetName","required":true,"description":"The name of the asset"},{"schema":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[a-zA-Z0-9][a-zA-Z0-9._+-]*$"},"in":"path","name":"version","required":true}],"security":[{"jwtToken":[]},{"secretToken":[]},{"frontendToken":[]},{}],"responses":{"302":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"redirectUrl":{"type":"string"}},"required":["redirectUrl"],"additionalProperties":false}}}},"400":{"description":"Bad request response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}}}},"403":{"description":"Forbidden response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Forbidden response"}}}},"404":{"description":"Not found response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Not found response"}}}}}},"post":{"operationId":"post-media-v2-cad-step","summary":"POST asset STEP CAD (media v2)","tags":["assets"],"description":"Start or return existing STEP CAD conversion task. Always returns 202 task status payload.","parameters":[{"schema":{"type":"boolean"},"in":"query","name":"download","required":false},{"schema":{"type":"boolean"},"in":"query","name":"original","required":false},{"schema":{"type":"boolean"},"in":"query","name":"cache","required":false},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"orgName","required":true,"description":"The name of the organization"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"projectName","required":true,"description":"The name of the project"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"assetName","required":true,"description":"The name of the asset"},{"schema":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[a-zA-Z0-9][a-zA-Z0-9._+-]*$"},"in":"path","name":"version","required":true}],"security":[{"jwtToken":[]},{"secretToken":[]},{"frontendToken":[]},{}],"responses":{"202":{"description":"Task status; poll taskUrl or subscribe to eventsUrl","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["QUEUED","RUNNING","SUCCESS","FAILED"],"description":"Current task status"},"taskId":{"description":"Task ID for polling, when a task exists","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"taskUrl":{"description":"URL to poll task status (GET), when a task exists","type":"string","format":"uri"},"eventsUrl":{"description":"URL for task events SSE stream, when a task exists","type":"string","format":"uri"}},"required":["status"],"additionalProperties":false,"description":"Task status; poll taskUrl or subscribe to eventsUrl"}}}},"400":{"description":"Bad request response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}}}},"403":{"description":"Forbidden response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Forbidden response"}}}},"404":{"description":"Not found response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Not found response"}}}}}}},"/media/{orgName}/{projectName}/{assetName}.step":{"get":{"operationId":"get-media-v2-cad-step-optional-1","summary":"Get asset STEP CAD (media v2)","tags":["assets"],"description":"Get asset as STEP CAD file (read-only). Redirects if cached or already STEP; 404 otherwise. Does not start tasks.","parameters":[{"schema":{"type":"boolean"},"in":"query","name":"download","required":false},{"schema":{"type":"boolean"},"in":"query","name":"original","required":false},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"orgName","required":true,"description":"The name of the organization"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"projectName","required":true,"description":"The name of the project"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"assetName","required":true,"description":"The name of the asset"}],"security":[{"jwtToken":[]},{"secretToken":[]},{"frontendToken":[]},{}],"responses":{"302":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"redirectUrl":{"type":"string"}},"required":["redirectUrl"],"additionalProperties":false}}}},"400":{"description":"Bad request response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}}}},"403":{"description":"Forbidden response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Forbidden response"}}}},"404":{"description":"Not found response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Not found response"}}}}}},"post":{"operationId":"post-media-v2-cad-step-optional-1","summary":"POST asset STEP CAD (media v2)","tags":["assets"],"description":"Start or return existing STEP CAD conversion task. Always returns 202 task status payload.","parameters":[{"schema":{"type":"boolean"},"in":"query","name":"download","required":false},{"schema":{"type":"boolean"},"in":"query","name":"original","required":false},{"schema":{"type":"boolean"},"in":"query","name":"cache","required":false},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"orgName","required":true,"description":"The name of the organization"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"projectName","required":true,"description":"The name of the project"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"assetName","required":true,"description":"The name of the asset"}],"security":[{"jwtToken":[]},{"secretToken":[]},{"frontendToken":[]},{}],"responses":{"202":{"description":"Task status; poll taskUrl or subscribe to eventsUrl","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["QUEUED","RUNNING","SUCCESS","FAILED"],"description":"Current task status"},"taskId":{"description":"Task ID for polling, when a task exists","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"taskUrl":{"description":"URL to poll task status (GET), when a task exists","type":"string","format":"uri"},"eventsUrl":{"description":"URL for task events SSE stream, when a task exists","type":"string","format":"uri"}},"required":["status"],"additionalProperties":false,"description":"Task status; poll taskUrl or subscribe to eventsUrl"}}}},"400":{"description":"Bad request response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}}}},"403":{"description":"Forbidden response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Forbidden response"}}}},"404":{"description":"Not found response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Not found response"}}}}}}},"/media/{orgName}/{projectName}/{assetName}@{version}.ultrahdr.jpg":{"get":{"operationId":"get-media-v2-image-ultrahdr","summary":"Get asset UltraHDR (media v2)","tags":["assets"],"description":"Get asset as UltraHDR image (read-only). Redirects if cached; 404 otherwise. ENVMAP only.","parameters":[{"schema":{"type":"boolean"},"in":"query","name":"download","required":false},{"schema":{"type":"boolean"},"in":"query","name":"original","required":false},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"orgName","required":true,"description":"The name of the organization"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"projectName","required":true,"description":"The name of the project"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"assetName","required":true,"description":"The name of the asset"},{"schema":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[a-zA-Z0-9][a-zA-Z0-9._+-]*$"},"in":"path","name":"version","required":true}],"security":[{"jwtToken":[]},{"secretToken":[]},{"frontendToken":[]},{}],"responses":{"302":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"redirectUrl":{"type":"string"}},"required":["redirectUrl"],"additionalProperties":false}}}},"400":{"description":"Bad request response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}}}},"403":{"description":"Forbidden response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Forbidden response"}}}},"404":{"description":"Not found response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Not found response"}}}}}},"post":{"operationId":"post-media-v2-image-ultrahdr","summary":"POST asset UltraHDR (media v2)","tags":["assets"],"description":"Start or return existing UltraHDR conversion task. ENVMAP only. 302 if done, 202 with task URLs otherwise.","parameters":[{"schema":{"type":"boolean"},"in":"query","name":"download","required":false},{"schema":{"type":"boolean"},"in":"query","name":"original","required":false},{"schema":{"type":"boolean"},"in":"query","name":"cache","required":false},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"orgName","required":true,"description":"The name of the organization"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"projectName","required":true,"description":"The name of the project"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"assetName","required":true,"description":"The name of the asset"},{"schema":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[a-zA-Z0-9][a-zA-Z0-9._+-]*$"},"in":"path","name":"version","required":true}],"security":[{"jwtToken":[]},{"secretToken":[]},{"frontendToken":[]},{}],"responses":{"202":{"description":"Task status; poll taskUrl or subscribe to eventsUrl","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["QUEUED","RUNNING","SUCCESS","FAILED"],"description":"Current task status"},"taskId":{"description":"Task ID for polling, when a task exists","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"taskUrl":{"description":"URL to poll task status (GET), when a task exists","type":"string","format":"uri"},"eventsUrl":{"description":"URL for task events SSE stream, when a task exists","type":"string","format":"uri"}},"required":["status"],"additionalProperties":false,"description":"Task status; poll taskUrl or subscribe to eventsUrl"}}}},"302":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"redirectUrl":{"type":"string"}},"required":["redirectUrl"],"additionalProperties":false}}}},"400":{"description":"Bad request response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}}}},"403":{"description":"Forbidden response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Forbidden response"}}}},"404":{"description":"Not found response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Not found response"}}}}}}},"/media/{orgName}/{projectName}/{assetName}.ultrahdr.jpg":{"get":{"operationId":"get-media-v2-image-ultrahdr-optional-1","summary":"Get asset UltraHDR (media v2)","tags":["assets"],"description":"Get asset as UltraHDR image (read-only). Redirects if cached; 404 otherwise. ENVMAP only.","parameters":[{"schema":{"type":"boolean"},"in":"query","name":"download","required":false},{"schema":{"type":"boolean"},"in":"query","name":"original","required":false},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"orgName","required":true,"description":"The name of the organization"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"projectName","required":true,"description":"The name of the project"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"assetName","required":true,"description":"The name of the asset"}],"security":[{"jwtToken":[]},{"secretToken":[]},{"frontendToken":[]},{}],"responses":{"302":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"redirectUrl":{"type":"string"}},"required":["redirectUrl"],"additionalProperties":false}}}},"400":{"description":"Bad request response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}}}},"403":{"description":"Forbidden response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Forbidden response"}}}},"404":{"description":"Not found response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Not found response"}}}}}},"post":{"operationId":"post-media-v2-image-ultrahdr-optional-1","summary":"POST asset UltraHDR (media v2)","tags":["assets"],"description":"Start or return existing UltraHDR conversion task. ENVMAP only. 302 if done, 202 with task URLs otherwise.","parameters":[{"schema":{"type":"boolean"},"in":"query","name":"download","required":false},{"schema":{"type":"boolean"},"in":"query","name":"original","required":false},{"schema":{"type":"boolean"},"in":"query","name":"cache","required":false},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"orgName","required":true,"description":"The name of the organization"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"projectName","required":true,"description":"The name of the project"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"assetName","required":true,"description":"The name of the asset"}],"security":[{"jwtToken":[]},{"secretToken":[]},{"frontendToken":[]},{}],"responses":{"202":{"description":"Task status; poll taskUrl or subscribe to eventsUrl","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["QUEUED","RUNNING","SUCCESS","FAILED"],"description":"Current task status"},"taskId":{"description":"Task ID for polling, when a task exists","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"taskUrl":{"description":"URL to poll task status (GET), when a task exists","type":"string","format":"uri"},"eventsUrl":{"description":"URL for task events SSE stream, when a task exists","type":"string","format":"uri"}},"required":["status"],"additionalProperties":false,"description":"Task status; poll taskUrl or subscribe to eventsUrl"}}}},"302":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"redirectUrl":{"type":"string"}},"required":["redirectUrl"],"additionalProperties":false}}}},"400":{"description":"Bad request response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}}}},"403":{"description":"Forbidden response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Forbidden response"}}}},"404":{"description":"Not found response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Not found response"}}}}}}},"/media/{orgName}/{projectName}/{assetName}@{version}.usdz":{"get":{"operationId":"get-media-v2-model-usdz","summary":"Get asset USDZ (media v2)","tags":["assets"],"description":"Get asset as USDZ model (read-only). Redirects if cached or already USDZ; 404 otherwise. Does not start tasks.","parameters":[{"schema":{"type":"boolean"},"in":"query","name":"download","required":false},{"schema":{"type":"boolean"},"in":"query","name":"original","required":false},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"orgName","required":true,"description":"The name of the organization"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"projectName","required":true,"description":"The name of the project"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"assetName","required":true,"description":"The name of the asset"},{"schema":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[a-zA-Z0-9][a-zA-Z0-9._+-]*$"},"in":"path","name":"version","required":true}],"security":[{"jwtToken":[]},{"secretToken":[]},{"frontendToken":[]},{}],"responses":{"302":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"redirectUrl":{"type":"string"}},"required":["redirectUrl"],"additionalProperties":false}}}},"400":{"description":"Bad request response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}}}},"403":{"description":"Forbidden response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Forbidden response"}}}},"404":{"description":"Not found response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Not found response"}}}}}},"post":{"operationId":"post-media-v2-model-usdz","summary":"POST asset USDZ (media v2)","tags":["assets"],"description":"Start or return existing USDZ conversion task. Always returns 202 task status payload.","parameters":[{"schema":{"type":"boolean"},"in":"query","name":"download","required":false},{"schema":{"type":"boolean"},"in":"query","name":"original","required":false},{"schema":{"type":"boolean"},"in":"query","name":"cache","required":false},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"orgName","required":true,"description":"The name of the organization"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"projectName","required":true,"description":"The name of the project"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"assetName","required":true,"description":"The name of the asset"},{"schema":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[a-zA-Z0-9][a-zA-Z0-9._+-]*$"},"in":"path","name":"version","required":true}],"security":[{"jwtToken":[]},{"secretToken":[]},{"frontendToken":[]},{}],"responses":{"202":{"description":"Task status; poll taskUrl or subscribe to eventsUrl","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["QUEUED","RUNNING","SUCCESS","FAILED"],"description":"Current task status"},"taskId":{"description":"Task ID for polling, when a task exists","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"taskUrl":{"description":"URL to poll task status (GET), when a task exists","type":"string","format":"uri"},"eventsUrl":{"description":"URL for task events SSE stream, when a task exists","type":"string","format":"uri"}},"required":["status"],"additionalProperties":false,"description":"Task status; poll taskUrl or subscribe to eventsUrl"}}}},"400":{"description":"Bad request response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}}}},"403":{"description":"Forbidden response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Forbidden response"}}}},"404":{"description":"Not found response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Not found response"}}}}}}},"/media/{orgName}/{projectName}/{assetName}.usdz":{"get":{"operationId":"get-media-v2-model-usdz-optional-1","summary":"Get asset USDZ (media v2)","tags":["assets"],"description":"Get asset as USDZ model (read-only). Redirects if cached or already USDZ; 404 otherwise. Does not start tasks.","parameters":[{"schema":{"type":"boolean"},"in":"query","name":"download","required":false},{"schema":{"type":"boolean"},"in":"query","name":"original","required":false},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"orgName","required":true,"description":"The name of the organization"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"projectName","required":true,"description":"The name of the project"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"assetName","required":true,"description":"The name of the asset"}],"security":[{"jwtToken":[]},{"secretToken":[]},{"frontendToken":[]},{}],"responses":{"302":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"redirectUrl":{"type":"string"}},"required":["redirectUrl"],"additionalProperties":false}}}},"400":{"description":"Bad request response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}}}},"403":{"description":"Forbidden response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Forbidden response"}}}},"404":{"description":"Not found response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Not found response"}}}}}},"post":{"operationId":"post-media-v2-model-usdz-optional-1","summary":"POST asset USDZ (media v2)","tags":["assets"],"description":"Start or return existing USDZ conversion task. Always returns 202 task status payload.","parameters":[{"schema":{"type":"boolean"},"in":"query","name":"download","required":false},{"schema":{"type":"boolean"},"in":"query","name":"original","required":false},{"schema":{"type":"boolean"},"in":"query","name":"cache","required":false},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"orgName","required":true,"description":"The name of the organization"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"projectName","required":true,"description":"The name of the project"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"assetName","required":true,"description":"The name of the asset"}],"security":[{"jwtToken":[]},{"secretToken":[]},{"frontendToken":[]},{}],"responses":{"202":{"description":"Task status; poll taskUrl or subscribe to eventsUrl","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["QUEUED","RUNNING","SUCCESS","FAILED"],"description":"Current task status"},"taskId":{"description":"Task ID for polling, when a task exists","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"taskUrl":{"description":"URL to poll task status (GET), when a task exists","type":"string","format":"uri"},"eventsUrl":{"description":"URL for task events SSE stream, when a task exists","type":"string","format":"uri"}},"required":["status"],"additionalProperties":false,"description":"Task status; poll taskUrl or subscribe to eventsUrl"}}}},"400":{"description":"Bad request response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}}}},"403":{"description":"Forbidden response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Forbidden response"}}}},"404":{"description":"Not found response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Not found response"}}}}}}},"/media/{orgName}/{projectName}/{assetName}@{version}.webp":{"get":{"operationId":"get-media-v2-image-webp","summary":"Get asset WebP (media v2)","tags":["assets"],"description":"Get asset as WebP image (read-only). Redirects to file if a cached result exists; 404 otherwise. Does not start tasks.","parameters":[{"schema":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"in":"query","name":"width","required":false,"description":"The width of the resized image"},{"schema":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"in":"query","name":"height","required":false,"description":"The height of the resized image"},{"schema":{"type":"integer","minimum":1,"maximum":100},"in":"query","name":"quality","required":false,"description":"The quality of the resized image"},{"schema":{"type":"boolean"},"in":"query","name":"download","required":false},{"schema":{"type":"boolean"},"in":"query","name":"original","required":false},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"orgName","required":true,"description":"The name of the organization"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"projectName","required":true,"description":"The name of the project"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"assetName","required":true,"description":"The name of the asset"},{"schema":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[a-zA-Z0-9][a-zA-Z0-9._+-]*$"},"in":"path","name":"version","required":true}],"security":[{"jwtToken":[]},{"secretToken":[]},{"frontendToken":[]},{}],"responses":{"302":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"redirectUrl":{"type":"string"}},"required":["redirectUrl"],"additionalProperties":false}}}},"400":{"description":"Bad request response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}}}},"403":{"description":"Forbidden response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Forbidden response"}}}},"404":{"description":"Not found response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Not found response"}}}}}},"post":{"operationId":"post-media-v2-image-webp","summary":"POST asset WebP (media v2)","tags":["assets"],"description":"Start or return existing WebP image/thumbnail task. Returns 302 if already complete, 202 with task URLs otherwise.","parameters":[{"schema":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"in":"query","name":"width","required":false,"description":"The width of the resized image"},{"schema":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"in":"query","name":"height","required":false,"description":"The height of the resized image"},{"schema":{"type":"integer","minimum":1,"maximum":100},"in":"query","name":"quality","required":false,"description":"The quality of the resized image"},{"schema":{"type":"boolean"},"in":"query","name":"download","required":false},{"schema":{"type":"boolean"},"in":"query","name":"original","required":false},{"schema":{"type":"boolean"},"in":"query","name":"cache","required":false},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"orgName","required":true,"description":"The name of the organization"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"projectName","required":true,"description":"The name of the project"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"assetName","required":true,"description":"The name of the asset"},{"schema":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[a-zA-Z0-9][a-zA-Z0-9._+-]*$"},"in":"path","name":"version","required":true}],"security":[{"jwtToken":[]},{"secretToken":[]},{"frontendToken":[]},{}],"responses":{"202":{"description":"Task status; poll taskUrl or subscribe to eventsUrl","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["QUEUED","RUNNING","SUCCESS","FAILED"],"description":"Current task status"},"taskId":{"description":"Task ID for polling, when a task exists","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"taskUrl":{"description":"URL to poll task status (GET), when a task exists","type":"string","format":"uri"},"eventsUrl":{"description":"URL for task events SSE stream, when a task exists","type":"string","format":"uri"}},"required":["status"],"additionalProperties":false,"description":"Task status; poll taskUrl or subscribe to eventsUrl"}}}},"302":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"redirectUrl":{"type":"string"}},"required":["redirectUrl"],"additionalProperties":false}}}},"400":{"description":"Bad request response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}}}},"403":{"description":"Forbidden response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Forbidden response"}}}},"404":{"description":"Not found response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Not found response"}}}}}}},"/media/{orgName}/{projectName}/{assetName}.webp":{"get":{"operationId":"get-media-v2-image-webp-optional-1","summary":"Get asset WebP (media v2)","tags":["assets"],"description":"Get asset as WebP image (read-only). Redirects to file if a cached result exists; 404 otherwise. Does not start tasks.","parameters":[{"schema":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"in":"query","name":"width","required":false,"description":"The width of the resized image"},{"schema":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"in":"query","name":"height","required":false,"description":"The height of the resized image"},{"schema":{"type":"integer","minimum":1,"maximum":100},"in":"query","name":"quality","required":false,"description":"The quality of the resized image"},{"schema":{"type":"boolean"},"in":"query","name":"download","required":false},{"schema":{"type":"boolean"},"in":"query","name":"original","required":false},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"orgName","required":true,"description":"The name of the organization"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"projectName","required":true,"description":"The name of the project"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"assetName","required":true,"description":"The name of the asset"}],"security":[{"jwtToken":[]},{"secretToken":[]},{"frontendToken":[]},{}],"responses":{"302":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"redirectUrl":{"type":"string"}},"required":["redirectUrl"],"additionalProperties":false}}}},"400":{"description":"Bad request response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}}}},"403":{"description":"Forbidden response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Forbidden response"}}}},"404":{"description":"Not found response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Not found response"}}}}}},"post":{"operationId":"post-media-v2-image-webp-optional-1","summary":"POST asset WebP (media v2)","tags":["assets"],"description":"Start or return existing WebP image/thumbnail task. Returns 302 if already complete, 202 with task URLs otherwise.","parameters":[{"schema":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"in":"query","name":"width","required":false,"description":"The width of the resized image"},{"schema":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"in":"query","name":"height","required":false,"description":"The height of the resized image"},{"schema":{"type":"integer","minimum":1,"maximum":100},"in":"query","name":"quality","required":false,"description":"The quality of the resized image"},{"schema":{"type":"boolean"},"in":"query","name":"download","required":false},{"schema":{"type":"boolean"},"in":"query","name":"original","required":false},{"schema":{"type":"boolean"},"in":"query","name":"cache","required":false},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"orgName","required":true,"description":"The name of the organization"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"projectName","required":true,"description":"The name of the project"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"assetName","required":true,"description":"The name of the asset"}],"security":[{"jwtToken":[]},{"secretToken":[]},{"frontendToken":[]},{}],"responses":{"202":{"description":"Task status; poll taskUrl or subscribe to eventsUrl","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["QUEUED","RUNNING","SUCCESS","FAILED"],"description":"Current task status"},"taskId":{"description":"Task ID for polling, when a task exists","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"taskUrl":{"description":"URL to poll task status (GET), when a task exists","type":"string","format":"uri"},"eventsUrl":{"description":"URL for task events SSE stream, when a task exists","type":"string","format":"uri"}},"required":["status"],"additionalProperties":false,"description":"Task status; poll taskUrl or subscribe to eventsUrl"}}}},"302":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"redirectUrl":{"type":"string"}},"required":["redirectUrl"],"additionalProperties":false}}}},"400":{"description":"Bad request response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}}}},"403":{"description":"Forbidden response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Forbidden response"}}}},"404":{"description":"Not found response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Not found response"}}}}}}},"/media/{orgName}/{projectName}/{assetName}@{version}":{"get":{"operationId":"get-media-original","summary":"Download original content using its source extension","tags":["assets"],"parameters":[{"schema":{"type":"boolean"},"in":"query","name":"download","required":false},{"schema":{"type":"boolean"},"in":"query","name":"original","required":false},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"orgName","required":true,"description":"The name of the organization"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"projectName","required":true,"description":"The name of the project"},{"schema":{"type":"string","maxLength":128},"in":"path","name":"assetName","required":true},{"schema":{"type":"string","maxLength":256},"in":"path","name":"version","required":true}],"security":[{"jwtToken":[]},{"secretToken":[]},{"frontendToken":[]},{}],"responses":{"302":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"redirectUrl":{"type":"string"}},"required":["redirectUrl"],"additionalProperties":false}}}},"400":{"description":"Bad request response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}}}},"403":{"description":"Forbidden response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Forbidden response"}}}},"404":{"description":"Not found response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Not found response"}}}}}}},"/media/{orgName}/{projectName}/{assetName}":{"get":{"operationId":"get-media-original-optional-1","summary":"Download original content using its source extension","tags":["assets"],"parameters":[{"schema":{"type":"boolean"},"in":"query","name":"download","required":false},{"schema":{"type":"boolean"},"in":"query","name":"original","required":false},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"orgName","required":true,"description":"The name of the organization"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"projectName","required":true,"description":"The name of the project"},{"schema":{"type":"string","maxLength":128},"in":"path","name":"assetName","required":true}],"security":[{"jwtToken":[]},{"secretToken":[]},{"frontendToken":[]},{}],"responses":{"302":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"redirectUrl":{"type":"string"}},"required":["redirectUrl"],"additionalProperties":false}}}},"400":{"description":"Bad request response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}}}},"403":{"description":"Forbidden response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Forbidden response"}}}},"404":{"description":"Not found response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Not found response"}}}}}}},"/reference-images/{orgName}/{projectName}/{productCode}":{"post":{"operationId":"create-reference-image","summary":"Create reference image","tags":["reference-images"],"description":"Add a reference image to a product. Requires project update access. Use prepare-upload (assets) to get uploadToken.","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"uploadToken":{"type":"string","description":"Upload token from prepare-upload"},"description":{"description":"Optional description for the reference image","type":"string","maxLength":10240}},"required":["uploadToken"],"additionalProperties":false}}},"required":true},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"orgName","required":true,"description":"The name of the organization"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"projectName","required":true,"description":"The name of the project"},{"schema":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"productCode","required":true,"description":"The code of the product (unique within project)"}],"security":[{"jwtToken":[]},{"secretToken":[]}],"responses":{"201":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"productId":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"description":{"type":"string"},"fileOid":{"type":"string"},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"}},"required":["id","productId","description","fileOid","createdAt","updatedAt"],"additionalProperties":false}}}},"400":{"description":"Bad request response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}}}},"401":{"description":"Unauthorized response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Unauthorized response"}}}},"403":{"description":"Forbidden response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Forbidden response"}}}},"404":{"description":"Not found response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Not found response"}}}}}}},"/products/{orgName}/{projectName}/{productCode}":{"delete":{"operationId":"delete-product","summary":"Delete product","tags":["products"],"description":"Delete a product. Requires project update access.","parameters":[{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"orgName","required":true,"description":"The name of the organization"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"projectName","required":true,"description":"The name of the project"},{"schema":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"productCode","required":true,"description":"The code of the product (unique within project)"}],"security":[{"jwtToken":[]},{"secretToken":[]}],"responses":{"204":{"description":"No content response","content":{"application/json":{"schema":{"type":"object","properties":{},"additionalProperties":false,"description":"No content response"}}}},"400":{"description":"Bad request response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}}}},"401":{"description":"Unauthorized response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Unauthorized response"}}}},"403":{"description":"Forbidden response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Forbidden response"}}}},"404":{"description":"Not found response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Not found response"}}}}}},"get":{"operationId":"get-product","summary":"Get product","tags":["products"],"description":"Get product details by organization, project, and product code. Requires project read access.","parameters":[{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"orgName","required":true,"description":"The name of the organization"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"projectName","required":true,"description":"The name of the project"},{"schema":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"productCode","required":true,"description":"The code of the product (unique within project)"}],"security":[{"jwtToken":[]},{"secretToken":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"code":{"type":"string"},"name":{"type":"string","maxLength":1024},"description":{"type":"string"},"projectId":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"projectName":{"type":"string"},"orgId":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"orgName":{"type":"string"},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"referenceImages":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"productId":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"description":{"type":"string"},"fileOid":{"type":"string"},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"}},"required":["id","productId","description","fileOid","createdAt","updatedAt"],"additionalProperties":false}},"firstReferenceImageOid":{"type":["null","string"]}},"required":["id","code","name","description","projectId","projectName","orgId","orgName","createdAt","updatedAt"],"additionalProperties":false}}}},"400":{"description":"Bad request response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}}}},"401":{"description":"Unauthorized response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Unauthorized response"}}}},"403":{"description":"Forbidden response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Forbidden response"}}}},"404":{"description":"Not found response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Not found response"}}}}}},"patch":{"operationId":"update-product","summary":"Update product","tags":["products"],"description":"Update a product. Requires project update access.","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"code":{"description":"New code (unique within project)","type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"name":{"description":"Display name","type":"string","maxLength":1024},"description":{"description":"Description","type":"string","maxLength":10240}},"additionalProperties":false}}}},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"orgName","required":true,"description":"The name of the organization"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"projectName","required":true,"description":"The name of the project"},{"schema":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"productCode","required":true,"description":"The code of the product (unique within project)"}],"security":[{"jwtToken":[]},{"secretToken":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"code":{"type":"string"},"name":{"type":"string","maxLength":1024},"description":{"type":"string"},"projectId":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"projectName":{"type":"string"},"orgId":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"orgName":{"type":"string"},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"referenceImages":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"productId":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"description":{"type":"string"},"fileOid":{"type":"string"},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"}},"required":["id","productId","description","fileOid","createdAt","updatedAt"],"additionalProperties":false}},"firstReferenceImageOid":{"type":["null","string"]}},"required":["id","code","name","description","projectId","projectName","orgId","orgName","createdAt","updatedAt"],"additionalProperties":false}}}},"400":{"description":"Bad request response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}}}},"401":{"description":"Unauthorized response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Unauthorized response"}}}},"403":{"description":"Forbidden response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Forbidden response"}}}},"404":{"description":"Not found response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Not found response"}}}}}}},"/tasks/{orgName}/{projectName}/{taskId}":{"get":{"operationId":"get-project-task","summary":"Get project task","tags":["tasks"],"description":"Get a task by ID. Task must belong to the project. Requires project read access.","parameters":[{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"orgName","required":true,"description":"The name of the organization"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"projectName","required":true,"description":"The name of the project"},{"schema":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"in":"path","name":"taskId","required":true,"description":"The task ID"}],"security":[{"jwtToken":[]},{"secretToken":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"The ID of the task"},"taskType":{"type":"string","description":"The type of the task"},"runner":{"type":"string","description":"The runner that executes the task"},"parameters":{"description":"JSON string of task parameters","type":["null","string"]},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$","description":"When the task was created"},"name":{"type":"string","description":"Human-readable task name"},"targetUrl":{"description":"Optional target URL","type":["null","string"]},"orgName":{"description":"Org name (owner of task or project)","type":["null","string"]},"projectName":{"description":"Project name if task is project-scoped","type":["null","string"]},"assetName":{"description":"Asset name if task is asset-scoped","type":["null","string"]},"createdByName":{"type":"string","description":"Display name of user who created the task"},"latestRunStatus":{"anyOf":[{"type":"string","enum":["RUNNING","SUCCESS","FAILED"]},{"type":"null"}],"description":"Latest run status"},"latestRunDuration":{"description":"Latest run duration in seconds","type":["null","number"]},"latestRunResults":{"anyOf":[{},{"type":"null"}],"description":"Latest run results payload"}},"required":["id","taskType","runner","parameters","createdAt","name","targetUrl","orgName","projectName","createdByName","latestRunStatus","latestRunDuration","latestRunResults"],"additionalProperties":false}}}},"401":{"description":"Unauthorized response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Unauthorized response"}}}},"403":{"description":"Forbidden response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Forbidden response"}}}},"404":{"description":"Not found response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Not found response"}}}},"500":{"description":"Server error response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Server error response"}}}}}}},"/assets/{orgName}/{projectName}/{assetName}/versions":{"get":{"operationId":"list-asset-versions","summary":"List asset versions","tags":["assets"],"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"orgName","required":true,"description":"The name of the organization"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"projectName","required":true,"description":"The name of the project"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"assetName","required":true,"description":"The name of the asset"}],"security":[{"jwtToken":[]},{"secretToken":[]},{}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"originalExtension":{"type":"string"},"analysis":{"anyOf":[{"type":"object","properties":{"schemaVersion":{"type":"number","enum":[1]},"sourceFileOid":{"type":"string","minLength":64,"maxLength":64,"pattern":"^[a-f0-9]+$"},"analyzerId":{"type":"string","minLength":1},"analyzerVersion":{"type":"string","minLength":1},"status":{"type":"string","enum":["pending","running","succeeded","failed","unsupported"]},"analyzedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]},"data":{"anyOf":[{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["model"]},"dimensions":{"anyOf":[{"type":"object","properties":{"widthMeters":{"type":"number","minimum":0},"depthMeters":{"type":"number","minimum":0},"heightMeters":{"type":"number","minimum":0},"unitSource":{"type":"string","enum":["format-defined","declared","assumed","unknown"]},"measurementBasis":{"type":"string"}},"required":["widthMeters","depthMeters","heightMeters","unitSource","measurementBasis"],"additionalProperties":false},{"type":"null"}]},"meshCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"geometryCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"triangleCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"vertexCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"materialCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"textureCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"textures":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"path":{"type":["string","null"]},"widthPixels":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"heightPixels":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"format":{"type":["string","null"]},"mimeType":{"type":["string","null"]},"byteSize":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"mipLevelCount":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"colorSpace":{"type":["string","null"]},"usages":{"type":"array","items":{"type":"string"}}},"required":["id","path","widthPixels","heightPixels","format","mimeType","byteSize"],"additionalProperties":false}}},"required":["kind","dimensions","meshCount","geometryCount","triangleCount","vertexCount","materialCount","textureCount","textures"],"additionalProperties":false},{"type":"object","properties":{"version":{"type":"string"},"colorspace":{"type":"string"},"materials":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"category":{"type":"string"}},"required":["category"],"additionalProperties":false}},"nodeGraphCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"topLevelNodeCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"referencedTextures":{"type":"array","items":{"type":"string"}},"warnings":{"type":"array","items":{"type":"string"}},"kind":{"type":"string","enum":["material"]},"nodeCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"textureCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"textures":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"path":{"type":["string","null"]},"widthPixels":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"heightPixels":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"format":{"type":["string","null"]},"mimeType":{"type":["string","null"]},"byteSize":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"mipLevelCount":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"colorSpace":{"type":["string","null"]},"usages":{"type":"array","items":{"type":"string"}}},"required":["id","path","widthPixels","heightPixels","format","mimeType","byteSize"],"additionalProperties":false}}},"required":["materials","nodeGraphCount","topLevelNodeCount","referencedTextures","warnings","kind","nodeCount","textureCount","textures"],"additionalProperties":false},{"type":"object","properties":{"version":{"type":"string"},"metadata":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}},"photometricType":{"type":"integer","minimum":1,"maximum":3},"photometricTypeName":{"type":"string","enum":["A","B","C"]},"photometry":{"type":"string","enum":["absolute","relative"]},"manufacturer":{"type":"string"},"luminaire":{"type":"string"},"lightSource":{"type":"string"},"lampCatalog":{"type":"string"},"lampCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"lumensPerLamp":{"type":"number"},"inputWatts":{"type":"number"},"peakCandela":{"type":"number"},"verticalAngles":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"horizontalAngles":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"units":{"type":"string","enum":["feet","meters"]},"dimensions":{"type":"object","properties":{"width":{"type":"number"},"length":{"type":"number"},"height":{"type":"number"}},"required":["width","length","height"],"additionalProperties":false},"hasTilt":{"type":"boolean"},"warnings":{"type":"array","items":{"type":"string"}},"kind":{"type":"string","enum":["light"]},"luminousFluxLumens":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"efficacyLumensPerWatt":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"beamAngleDegrees":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"fieldAngleDegrees":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"declaredLampFluxLumens":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"downwardFluxLumens":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"upwardFluxLumens":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"metricsTiltDegrees":{"type":"number"},"beamAngles":{"type":"array","items":{"type":"object","properties":{"horizontalDegrees":{"type":"number"},"peakDirectionDegrees":{"type":"number"},"peakCandela":{"type":"number","minimum":0},"beamAngleDegrees":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"fieldAngleDegrees":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"beamAngleStatus":{"type":"string","enum":["ok","no-light","no-crossing","multiple-lobes"]},"fieldAngleStatus":{"type":"string","enum":["ok","no-light","no-crossing","multiple-lobes"]}},"required":["horizontalDegrees","peakDirectionDegrees","peakCandela","beamAngleDegrees","fieldAngleDegrees","beamAngleStatus","fieldAngleStatus"],"additionalProperties":false}},"metricsStatus":{"type":"string","enum":["supported","unsupported","unavailable"]}},"required":["version","metadata","photometricType","photometricTypeName","photometry","manufacturer","luminaire","lightSource","lampCatalog","lampCount","lumensPerLamp","inputWatts","peakCandela","verticalAngles","horizontalAngles","units","dimensions","hasTilt","warnings","kind","luminousFluxLumens","efficacyLumensPerWatt","beamAngleDegrees","fieldAngleDegrees","metricsStatus"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","enum":["envmap"]},"widthPixels":{"type":"integer","minimum":0,"maximum":9007199254740991},"heightPixels":{"type":"integer","minimum":0,"maximum":9007199254740991},"format":{"type":"string"},"colorSpace":{"type":"string"},"projection":{"type":"string","enum":["equirectangular","unknown"]},"brightnessUnit":{"type":"string","enum":["relative","cd/m2"]},"calibration":{"type":["string","null"]},"minimumBrightness":{"type":"number","minimum":0},"maximumBrightness":{"type":"number","minimum":0},"averageBrightness":{"type":"number","minimum":0},"percentile01Brightness":{"type":"number","minimum":0},"percentile99Brightness":{"type":"number","minimum":0},"dynamicRangeStops":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]}},"required":["kind","widthPixels","heightPixels","format","colorSpace","projection","brightnessUnit","calibration","minimumBrightness","maximumBrightness","averageBrightness","percentile01Brightness","percentile99Brightness","dynamicRangeStops"],"additionalProperties":false}]},{"type":"null"}]},"validation":{"anyOf":[{"type":"object","properties":{"status":{"type":"string","enum":["valid","invalid","unassessed"]},"validator":{"type":"string"},"validatorVersion":{"type":"string"},"rules":{"type":"array","items":{"type":"string"}},"issues":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string"},"severity":{"type":"string","enum":["error","warning","info"]},"message":{"type":"string"},"location":{"type":"string"}},"required":["code","severity","message"],"additionalProperties":false}}},"required":["status","validator","validatorVersion","rules","issues"],"additionalProperties":false},{"type":"null"}]},"diagnostics":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string"},"severity":{"type":"string","enum":["error","warning","info"]},"message":{"type":"string"},"location":{"type":"string"}},"required":["code","severity","message"],"additionalProperties":false}}},"required":["schemaVersion","sourceFileOid","analyzerId","analyzerVersion","status","analyzedAt","data","validation","diagnostics"],"additionalProperties":false},{"type":"null"}]},"analysisSummary":{"anyOf":[{"type":"object","properties":{"schemaVersion":{"type":"number","enum":[1]},"sourceFileOid":{"type":"string","minLength":64,"maxLength":64,"pattern":"^[a-f0-9]+$"},"analyzerId":{"type":"string","minLength":1},"analyzerVersion":{"type":"string","minLength":1},"status":{"type":"string","enum":["pending","running","succeeded","failed","unsupported"]},"analyzedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]},"validationStatus":{"anyOf":[{"type":"string","enum":["valid","invalid","unassessed"]},{"type":"null"}]},"errorCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"warningCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"data":{"anyOf":[{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["model"]},"dimensions":{"anyOf":[{"type":"object","properties":{"widthMeters":{"type":"number","minimum":0},"depthMeters":{"type":"number","minimum":0},"heightMeters":{"type":"number","minimum":0},"unitSource":{"type":"string","enum":["format-defined","declared","assumed","unknown"]},"measurementBasis":{"type":"string"}},"required":["widthMeters","depthMeters","heightMeters","unitSource","measurementBasis"],"additionalProperties":false},{"type":"null"}]},"meshCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"geometryCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"triangleCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"vertexCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"materialCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"textureCount":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["kind","dimensions","meshCount","geometryCount","triangleCount","vertexCount","materialCount","textureCount"],"additionalProperties":false},{"type":"object","properties":{"version":{"type":"string"},"colorspace":{"type":"string"},"nodeGraphCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"topLevelNodeCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"kind":{"type":"string","enum":["material"]},"nodeCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"textureCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"materialCount":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["nodeGraphCount","topLevelNodeCount","kind","nodeCount","textureCount","materialCount"],"additionalProperties":false},{"type":"object","properties":{"version":{"type":"string"},"photometricType":{"type":"integer","minimum":1,"maximum":3},"photometricTypeName":{"type":"string","enum":["A","B","C"]},"photometry":{"type":"string","enum":["absolute","relative"]},"manufacturer":{"type":"string"},"luminaire":{"type":"string"},"lightSource":{"type":"string"},"lampCatalog":{"type":"string"},"lampCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"lumensPerLamp":{"type":"number"},"inputWatts":{"type":"number"},"peakCandela":{"type":"number"},"verticalAngles":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"horizontalAngles":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"units":{"type":"string","enum":["feet","meters"]},"dimensions":{"type":"object","properties":{"width":{"type":"number"},"length":{"type":"number"},"height":{"type":"number"}},"required":["width","length","height"],"additionalProperties":false},"hasTilt":{"type":"boolean"},"kind":{"type":"string","enum":["light"]},"luminousFluxLumens":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"efficacyLumensPerWatt":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"beamAngleDegrees":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"fieldAngleDegrees":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"declaredLampFluxLumens":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"downwardFluxLumens":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"upwardFluxLumens":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"metricsTiltDegrees":{"type":"number"},"metricsStatus":{"type":"string","enum":["supported","unsupported","unavailable"]}},"required":["version","photometricType","photometricTypeName","photometry","manufacturer","luminaire","lightSource","lampCatalog","lampCount","lumensPerLamp","inputWatts","peakCandela","verticalAngles","horizontalAngles","units","dimensions","hasTilt","kind","luminousFluxLumens","efficacyLumensPerWatt","beamAngleDegrees","fieldAngleDegrees","metricsStatus"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","enum":["envmap"]},"widthPixels":{"type":"integer","minimum":0,"maximum":9007199254740991},"heightPixels":{"type":"integer","minimum":0,"maximum":9007199254740991},"format":{"type":"string"},"colorSpace":{"type":"string"},"projection":{"type":"string","enum":["equirectangular","unknown"]},"brightnessUnit":{"type":"string","enum":["relative","cd/m2"]},"calibration":{"type":["string","null"]},"minimumBrightness":{"type":"number","minimum":0},"maximumBrightness":{"type":"number","minimum":0},"averageBrightness":{"type":"number","minimum":0},"percentile01Brightness":{"type":"number","minimum":0},"percentile99Brightness":{"type":"number","minimum":0},"dynamicRangeStops":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]}},"required":["kind","widthPixels","heightPixels","format","colorSpace","projection","brightnessUnit","calibration","minimumBrightness","maximumBrightness","averageBrightness","percentile01Brightness","percentile99Brightness","dynamicRangeStops"],"additionalProperties":false}]},{"type":"null"}]}},"required":["schemaVersion","sourceFileOid","analyzerId","analyzerVersion","status","analyzedAt","validationStatus","errorCount","warningCount","data"],"additionalProperties":false},{"type":"null"}]},"description":{"default":"","type":"string","maxLength":10240,"description":"The description of the entity"},"id":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"assetId":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"version":{"type":"string","pattern":"^(0|[1-9][0-9]*)\\.(0|[1-9][0-9]*)\\.(0|[1-9][0-9]*)$"},"fileOid":{"type":"string"},"thumbnailOid":{"type":["null","string"]},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"createdByUserId":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"createdByUserName":{"type":["null","string"]},"originalSize":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]}},"required":["description","id","assetId","version","fileOid","thumbnailOid","createdAt","createdByUserId","createdByUserName","originalSize"],"additionalProperties":false}}}}},"400":{"description":"Bad request response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}}}},"403":{"description":"Forbidden response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Forbidden response"}}}},"404":{"description":"Not found response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Not found response"}}}}}},"post":{"operationId":"create-asset-version","summary":"Upload an immutable asset version","tags":["assets"],"description":"Upload an unused exact version, or omit version to increment the highest major.","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"description":{"type":"string","maxLength":10240,"description":"The description of the entity"},"uploadToken":{"type":"string"},"version":{"type":"string","pattern":"^(0|[1-9][0-9]*)\\.(0|[1-9][0-9]*)\\.(0|[1-9][0-9]*)$"}},"required":["uploadToken"],"additionalProperties":false}}},"required":true},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"orgName","required":true,"description":"The name of the organization"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"projectName","required":true,"description":"The name of the project"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"assetName","required":true,"description":"The name of the asset"}],"security":[{"jwtToken":[]},{"secretToken":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"name":{"type":"string"},"type":{"type":"string","enum":["MODEL","MATERIAL","IMAGE","SCENE","ENVMAP","CAD","LIGHT"]},"visibility":{"type":"string","enum":["PRIVATE","UNLISTED","PUBLIC"],"description":"The visibility of the asset"},"projectId":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"projectName":{"type":"string"},"orgId":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"orgName":{"type":"string"},"description":{"type":"string"},"keywords":{"type":"string"},"shareLicense":{"type":"string","enum":["NONE","CC_0","CC_BY","CC_BY_SA","CC_BY_NC","CC_BY_NC_SA","CC_BY_ND","CC_BY_NC_ND"]},"aiUsage":{"type":"string","enum":["UNDISCLOSED","AI_USED","AI_FREE"],"description":"The AI usage policy of the asset"},"commentMode":{"type":"string","enum":["ENABLED","MEMBERS_ONLY","NONE"]},"reported":{"type":"boolean"},"likeCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"shareCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"archived":{"type":"boolean"},"metadata":{"type":"string","maxLength":10240},"originalSize":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"width":{"type":["null","number"]},"height":{"type":["null","number"]},"depth":{"type":["null","number"]},"version":{"type":"string","pattern":"^(0|[1-9][0-9]*)\\.(0|[1-9][0-9]*)\\.(0|[1-9][0-9]*)$"},"latestVersion":{"type":"string","pattern":"^(0|[1-9][0-9]*)\\.(0|[1-9][0-9]*)\\.(0|[1-9][0-9]*)$"},"versionId":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"originalExtension":{"type":"string"},"fileOid":{"type":"string"},"thumbnailOid":{"type":["null","string"]},"analysis":{"anyOf":[{"type":"object","properties":{"schemaVersion":{"type":"number","enum":[1]},"sourceFileOid":{"type":"string","minLength":64,"maxLength":64,"pattern":"^[a-f0-9]+$"},"analyzerId":{"type":"string","minLength":1},"analyzerVersion":{"type":"string","minLength":1},"status":{"type":"string","enum":["pending","running","succeeded","failed","unsupported"]},"analyzedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]},"data":{"anyOf":[{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["model"]},"dimensions":{"anyOf":[{"type":"object","properties":{"widthMeters":{"type":"number","minimum":0},"depthMeters":{"type":"number","minimum":0},"heightMeters":{"type":"number","minimum":0},"unitSource":{"type":"string","enum":["format-defined","declared","assumed","unknown"]},"measurementBasis":{"type":"string"}},"required":["widthMeters","depthMeters","heightMeters","unitSource","measurementBasis"],"additionalProperties":false},{"type":"null"}]},"meshCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"geometryCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"triangleCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"vertexCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"materialCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"textureCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"textures":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"path":{"type":["string","null"]},"widthPixels":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"heightPixels":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"format":{"type":["string","null"]},"mimeType":{"type":["string","null"]},"byteSize":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"mipLevelCount":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"colorSpace":{"type":["string","null"]},"usages":{"type":"array","items":{"type":"string"}}},"required":["id","path","widthPixels","heightPixels","format","mimeType","byteSize"],"additionalProperties":false}}},"required":["kind","dimensions","meshCount","geometryCount","triangleCount","vertexCount","materialCount","textureCount","textures"],"additionalProperties":false},{"type":"object","properties":{"version":{"type":"string"},"colorspace":{"type":"string"},"materials":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"category":{"type":"string"}},"required":["category"],"additionalProperties":false}},"nodeGraphCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"topLevelNodeCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"referencedTextures":{"type":"array","items":{"type":"string"}},"warnings":{"type":"array","items":{"type":"string"}},"kind":{"type":"string","enum":["material"]},"nodeCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"textureCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"textures":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"path":{"type":["string","null"]},"widthPixels":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"heightPixels":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"format":{"type":["string","null"]},"mimeType":{"type":["string","null"]},"byteSize":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"mipLevelCount":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"colorSpace":{"type":["string","null"]},"usages":{"type":"array","items":{"type":"string"}}},"required":["id","path","widthPixels","heightPixels","format","mimeType","byteSize"],"additionalProperties":false}}},"required":["materials","nodeGraphCount","topLevelNodeCount","referencedTextures","warnings","kind","nodeCount","textureCount","textures"],"additionalProperties":false},{"type":"object","properties":{"version":{"type":"string"},"metadata":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}},"photometricType":{"type":"integer","minimum":1,"maximum":3},"photometricTypeName":{"type":"string","enum":["A","B","C"]},"photometry":{"type":"string","enum":["absolute","relative"]},"manufacturer":{"type":"string"},"luminaire":{"type":"string"},"lightSource":{"type":"string"},"lampCatalog":{"type":"string"},"lampCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"lumensPerLamp":{"type":"number"},"inputWatts":{"type":"number"},"peakCandela":{"type":"number"},"verticalAngles":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"horizontalAngles":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"units":{"type":"string","enum":["feet","meters"]},"dimensions":{"type":"object","properties":{"width":{"type":"number"},"length":{"type":"number"},"height":{"type":"number"}},"required":["width","length","height"],"additionalProperties":false},"hasTilt":{"type":"boolean"},"warnings":{"type":"array","items":{"type":"string"}},"kind":{"type":"string","enum":["light"]},"luminousFluxLumens":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"efficacyLumensPerWatt":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"beamAngleDegrees":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"fieldAngleDegrees":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"declaredLampFluxLumens":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"downwardFluxLumens":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"upwardFluxLumens":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"metricsTiltDegrees":{"type":"number"},"beamAngles":{"type":"array","items":{"type":"object","properties":{"horizontalDegrees":{"type":"number"},"peakDirectionDegrees":{"type":"number"},"peakCandela":{"type":"number","minimum":0},"beamAngleDegrees":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"fieldAngleDegrees":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"beamAngleStatus":{"type":"string","enum":["ok","no-light","no-crossing","multiple-lobes"]},"fieldAngleStatus":{"type":"string","enum":["ok","no-light","no-crossing","multiple-lobes"]}},"required":["horizontalDegrees","peakDirectionDegrees","peakCandela","beamAngleDegrees","fieldAngleDegrees","beamAngleStatus","fieldAngleStatus"],"additionalProperties":false}},"metricsStatus":{"type":"string","enum":["supported","unsupported","unavailable"]}},"required":["version","metadata","photometricType","photometricTypeName","photometry","manufacturer","luminaire","lightSource","lampCatalog","lampCount","lumensPerLamp","inputWatts","peakCandela","verticalAngles","horizontalAngles","units","dimensions","hasTilt","warnings","kind","luminousFluxLumens","efficacyLumensPerWatt","beamAngleDegrees","fieldAngleDegrees","metricsStatus"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","enum":["envmap"]},"widthPixels":{"type":"integer","minimum":0,"maximum":9007199254740991},"heightPixels":{"type":"integer","minimum":0,"maximum":9007199254740991},"format":{"type":"string"},"colorSpace":{"type":"string"},"projection":{"type":"string","enum":["equirectangular","unknown"]},"brightnessUnit":{"type":"string","enum":["relative","cd/m2"]},"calibration":{"type":["string","null"]},"minimumBrightness":{"type":"number","minimum":0},"maximumBrightness":{"type":"number","minimum":0},"averageBrightness":{"type":"number","minimum":0},"percentile01Brightness":{"type":"number","minimum":0},"percentile99Brightness":{"type":"number","minimum":0},"dynamicRangeStops":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]}},"required":["kind","widthPixels","heightPixels","format","colorSpace","projection","brightnessUnit","calibration","minimumBrightness","maximumBrightness","averageBrightness","percentile01Brightness","percentile99Brightness","dynamicRangeStops"],"additionalProperties":false}]},{"type":"null"}]},"validation":{"anyOf":[{"type":"object","properties":{"status":{"type":"string","enum":["valid","invalid","unassessed"]},"validator":{"type":"string"},"validatorVersion":{"type":"string"},"rules":{"type":"array","items":{"type":"string"}},"issues":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string"},"severity":{"type":"string","enum":["error","warning","info"]},"message":{"type":"string"},"location":{"type":"string"}},"required":["code","severity","message"],"additionalProperties":false}}},"required":["status","validator","validatorVersion","rules","issues"],"additionalProperties":false},{"type":"null"}]},"diagnostics":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string"},"severity":{"type":"string","enum":["error","warning","info"]},"message":{"type":"string"},"location":{"type":"string"}},"required":["code","severity","message"],"additionalProperties":false}}},"required":["schemaVersion","sourceFileOid","analyzerId","analyzerVersion","status","analyzedAt","data","validation","diagnostics"],"additionalProperties":false},{"type":"null"}]},"analysisSummary":{"anyOf":[{"type":"object","properties":{"schemaVersion":{"type":"number","enum":[1]},"sourceFileOid":{"type":"string","minLength":64,"maxLength":64,"pattern":"^[a-f0-9]+$"},"analyzerId":{"type":"string","minLength":1},"analyzerVersion":{"type":"string","minLength":1},"status":{"type":"string","enum":["pending","running","succeeded","failed","unsupported"]},"analyzedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]},"validationStatus":{"anyOf":[{"type":"string","enum":["valid","invalid","unassessed"]},{"type":"null"}]},"errorCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"warningCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"data":{"anyOf":[{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["model"]},"dimensions":{"anyOf":[{"type":"object","properties":{"widthMeters":{"type":"number","minimum":0},"depthMeters":{"type":"number","minimum":0},"heightMeters":{"type":"number","minimum":0},"unitSource":{"type":"string","enum":["format-defined","declared","assumed","unknown"]},"measurementBasis":{"type":"string"}},"required":["widthMeters","depthMeters","heightMeters","unitSource","measurementBasis"],"additionalProperties":false},{"type":"null"}]},"meshCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"geometryCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"triangleCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"vertexCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"materialCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"textureCount":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["kind","dimensions","meshCount","geometryCount","triangleCount","vertexCount","materialCount","textureCount"],"additionalProperties":false},{"type":"object","properties":{"version":{"type":"string"},"colorspace":{"type":"string"},"nodeGraphCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"topLevelNodeCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"kind":{"type":"string","enum":["material"]},"nodeCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"textureCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"materialCount":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["nodeGraphCount","topLevelNodeCount","kind","nodeCount","textureCount","materialCount"],"additionalProperties":false},{"type":"object","properties":{"version":{"type":"string"},"photometricType":{"type":"integer","minimum":1,"maximum":3},"photometricTypeName":{"type":"string","enum":["A","B","C"]},"photometry":{"type":"string","enum":["absolute","relative"]},"manufacturer":{"type":"string"},"luminaire":{"type":"string"},"lightSource":{"type":"string"},"lampCatalog":{"type":"string"},"lampCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"lumensPerLamp":{"type":"number"},"inputWatts":{"type":"number"},"peakCandela":{"type":"number"},"verticalAngles":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"horizontalAngles":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"units":{"type":"string","enum":["feet","meters"]},"dimensions":{"type":"object","properties":{"width":{"type":"number"},"length":{"type":"number"},"height":{"type":"number"}},"required":["width","length","height"],"additionalProperties":false},"hasTilt":{"type":"boolean"},"kind":{"type":"string","enum":["light"]},"luminousFluxLumens":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"efficacyLumensPerWatt":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"beamAngleDegrees":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"fieldAngleDegrees":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"declaredLampFluxLumens":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"downwardFluxLumens":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"upwardFluxLumens":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"metricsTiltDegrees":{"type":"number"},"metricsStatus":{"type":"string","enum":["supported","unsupported","unavailable"]}},"required":["version","photometricType","photometricTypeName","photometry","manufacturer","luminaire","lightSource","lampCatalog","lampCount","lumensPerLamp","inputWatts","peakCandela","verticalAngles","horizontalAngles","units","dimensions","hasTilt","kind","luminousFluxLumens","efficacyLumensPerWatt","beamAngleDegrees","fieldAngleDegrees","metricsStatus"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","enum":["envmap"]},"widthPixels":{"type":"integer","minimum":0,"maximum":9007199254740991},"heightPixels":{"type":"integer","minimum":0,"maximum":9007199254740991},"format":{"type":"string"},"colorSpace":{"type":"string"},"projection":{"type":"string","enum":["equirectangular","unknown"]},"brightnessUnit":{"type":"string","enum":["relative","cd/m2"]},"calibration":{"type":["string","null"]},"minimumBrightness":{"type":"number","minimum":0},"maximumBrightness":{"type":"number","minimum":0},"averageBrightness":{"type":"number","minimum":0},"percentile01Brightness":{"type":"number","minimum":0},"percentile99Brightness":{"type":"number","minimum":0},"dynamicRangeStops":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]}},"required":["kind","widthPixels","heightPixels","format","colorSpace","projection","brightnessUnit","calibration","minimumBrightness","maximumBrightness","averageBrightness","percentile01Brightness","percentile99Brightness","dynamicRangeStops"],"additionalProperties":false}]},{"type":"null"}]}},"required":["schemaVersion","sourceFileOid","analyzerId","analyzerVersion","status","analyzedAt","validationStatus","errorCount","warningCount","data"],"additionalProperties":false},{"type":"null"}]},"materialInfo":{"type":"object","properties":{"version":{"type":"string"},"colorspace":{"type":"string"},"materials":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"category":{"type":"string"}},"required":["category"],"additionalProperties":false}},"nodeGraphCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"topLevelNodeCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"referencedTextures":{"type":"array","items":{"type":"string"}},"warnings":{"type":"array","items":{"type":"string"}}},"required":["materials","nodeGraphCount","topLevelNodeCount","referencedTextures","warnings"],"additionalProperties":false},"lightInfo":{"type":"object","properties":{"version":{"type":"string"},"metadata":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}},"photometricType":{"type":"integer","minimum":1,"maximum":3},"photometricTypeName":{"type":"string","enum":["A","B","C"]},"photometry":{"type":"string","enum":["absolute","relative"]},"manufacturer":{"type":"string"},"luminaire":{"type":"string"},"lightSource":{"type":"string"},"lampCatalog":{"type":"string"},"lampCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"lumensPerLamp":{"type":"number"},"inputWatts":{"type":"number"},"peakCandela":{"type":"number"},"verticalAngles":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"horizontalAngles":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"units":{"type":"string","enum":["feet","meters"]},"dimensions":{"type":"object","properties":{"width":{"type":"number"},"length":{"type":"number"},"height":{"type":"number"}},"required":["width","length","height"],"additionalProperties":false},"hasTilt":{"type":"boolean"},"warnings":{"type":"array","items":{"type":"string"}}},"required":["version","metadata","photometricType","photometricTypeName","photometry","manufacturer","luminaire","lightSource","lampCatalog","lampCount","lumensPerLamp","inputWatts","peakCandela","verticalAngles","horizontalAngles","units","dimensions","hasTilt","warnings"],"additionalProperties":false}},"required":["id","name","type","visibility","projectId","projectName","orgId","orgName","description","keywords","shareLicense","aiUsage","commentMode","reported","likeCount","shareCount","createdAt","updatedAt","archived","metadata","version","latestVersion","versionId","originalExtension","fileOid"],"additionalProperties":false}}}},"400":{"description":"Bad request response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}}}},"401":{"description":"Unauthorized response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Unauthorized response"}}}},"403":{"description":"Forbidden response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Forbidden response"}}}},"404":{"description":"Not found response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Not found response"}}}},"409":{"description":"Conflict response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Conflict response"}}}}}}},"/comments/{orgName}/{projectName}/{assetName}/{commentId}":{"delete":{"operationId":"delete-comment","summary":"Delete comment","tags":["comments"],"description":"Delete a comment on an asset, addressed by org, project, asset, and comment id.","parameters":[{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"orgName","required":true,"description":"The name of the organization"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"projectName","required":true,"description":"The name of the project"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"assetName","required":true,"description":"The name of the asset"},{"schema":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"in":"path","name":"commentId","required":true,"description":"The ID of the comment"}],"security":[{"jwtToken":[]},{"secretToken":[]}],"responses":{"204":{"description":"No content response","content":{"application/json":{"schema":{"type":"object","properties":{},"additionalProperties":false,"description":"No content response"}}}},"400":{"description":"Bad request response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}}}},"401":{"description":"Unauthorized response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Unauthorized response"}}}},"403":{"description":"Forbidden response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Forbidden response"}}}},"404":{"description":"Not found response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Not found response"}}}}}},"patch":{"operationId":"edit-comment","summary":"Edit comment","tags":["comments"],"description":"Edit a comment on an asset, addressed by org, project, asset, and comment id.","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","minLength":1,"maxLength":10240,"description":"The updated comment text"}},"required":["text"],"additionalProperties":false}}},"required":true},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"orgName","required":true,"description":"The name of the organization"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"projectName","required":true,"description":"The name of the project"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"assetName","required":true,"description":"The name of the asset"},{"schema":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"in":"path","name":"commentId","required":true,"description":"The ID of the comment"}],"security":[{"jwtToken":[]},{"secretToken":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"text":{"type":"string","minLength":1,"maxLength":10240,"description":"The text of the comment"},"likeCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"moderatedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]},"moderationReason":{"type":["null","string"]},"createdByUserId":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"createdByName":{"type":"string"},"likeId":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]}},"required":["id","text","likeCount","createdAt","moderatedAt","moderationReason","createdByUserId","createdByName","likeId"],"additionalProperties":false}}}},"400":{"description":"Bad request response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}}}},"401":{"description":"Unauthorized response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Unauthorized response"}}}},"403":{"description":"Forbidden response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Forbidden response"}}}},"404":{"description":"Not found response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Not found response"}}}}}}},"/reference-images/{orgName}/{projectName}/{productCode}/{referenceImageId}":{"delete":{"operationId":"delete-reference-image","summary":"Delete reference image","tags":["reference-images"],"description":"Delete a reference image. Requires project update access.","parameters":[{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"orgName","required":true,"description":"The name of the organization"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"projectName","required":true,"description":"The name of the project"},{"schema":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"productCode","required":true,"description":"The code of the product (unique within project)"},{"schema":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"in":"path","name":"referenceImageId","required":true,"description":"The ID of the reference image"}],"security":[{"jwtToken":[]},{"secretToken":[]}],"responses":{"204":{"description":"No content response","content":{"application/json":{"schema":{"type":"object","properties":{},"additionalProperties":false,"description":"No content response"}}}},"400":{"description":"Bad request response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}}}},"401":{"description":"Unauthorized response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Unauthorized response"}}}},"403":{"description":"Forbidden response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Forbidden response"}}}},"404":{"description":"Not found response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Not found response"}}}}}},"get":{"operationId":"get-reference-image","summary":"Get reference image","tags":["reference-images"],"description":"Get a reference image by ID. Requires project read access.","parameters":[{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"orgName","required":true,"description":"The name of the organization"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"projectName","required":true,"description":"The name of the project"},{"schema":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"productCode","required":true,"description":"The code of the product (unique within project)"},{"schema":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"in":"path","name":"referenceImageId","required":true,"description":"The ID of the reference image"}],"security":[{"jwtToken":[]},{"secretToken":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"productId":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"description":{"type":"string"},"fileOid":{"type":"string"},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"}},"required":["id","productId","description","fileOid","createdAt","updatedAt"],"additionalProperties":false}}}},"400":{"description":"Bad request response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}}}},"401":{"description":"Unauthorized response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Unauthorized response"}}}},"403":{"description":"Forbidden response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Forbidden response"}}}},"404":{"description":"Not found response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Not found response"}}}}}},"patch":{"operationId":"update-reference-image","summary":"Update reference image","tags":["reference-images"],"description":"Update a reference image (e.g. description). Requires project update access.","requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"description":{"description":"Description for the reference image","type":"string","maxLength":10240}},"additionalProperties":false}}}},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"orgName","required":true,"description":"The name of the organization"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"projectName","required":true,"description":"The name of the project"},{"schema":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"productCode","required":true,"description":"The code of the product (unique within project)"},{"schema":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"in":"path","name":"referenceImageId","required":true,"description":"The ID of the reference image"}],"security":[{"jwtToken":[]},{"secretToken":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"productId":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"description":{"type":"string"},"fileOid":{"type":"string"},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"}},"required":["id","productId","description","fileOid","createdAt","updatedAt"],"additionalProperties":false}}}},"400":{"description":"Bad request response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}}}},"401":{"description":"Unauthorized response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Unauthorized response"}}}},"403":{"description":"Forbidden response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Forbidden response"}}}},"404":{"description":"Not found response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Not found response"}}}}}}},"/tasks/{orgName}/{projectName}/{taskId}/events":{"get":{"operationId":"get-project-task-events","summary":"Task events stream","tags":["tasks"],"description":"Stream task lifecycle events (SSE). Supports replay from a per-task sequence number via query or Last-Event-ID, then continues streaming live events.","parameters":[{"schema":{"type":"integer","minimum":0,"maximum":9007199254740991},"in":"query","name":"sinceSequence","required":false},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"orgName","required":true,"description":"The name of the organization"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"projectName","required":true,"description":"The name of the project"},{"schema":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"in":"path","name":"taskId","required":true,"description":"The task ID"}],"security":[{"jwtToken":[]},{"secretToken":[]}],"responses":{"200":{"description":"SSE stream","content":{"application/json":{"schema":{"type":"string","description":"SSE stream"}}}},"401":{"description":"Unauthorized response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Unauthorized response"}}}},"403":{"description":"Forbidden response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Forbidden response"}}}},"404":{"description":"Not found response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Not found response"}}}},"500":{"description":"Server error response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Server error response"}}}}}}},"/tasks/{orgName}/{projectName}/{taskId}/resubmit":{"post":{"operationId":"resubmit-project-task","summary":"Resubmit project task","tags":["tasks"],"description":"Resubmit a task (re-queue for execution). Task must belong to the project. Requires project access.","parameters":[{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"orgName","required":true,"description":"The name of the organization"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"projectName","required":true,"description":"The name of the project"},{"schema":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"in":"path","name":"taskId","required":true,"description":"The task ID"}],"security":[{"jwtToken":[]},{"secretToken":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","enum":[true]}},"required":["success"],"additionalProperties":false}}}},"401":{"description":"Unauthorized response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Unauthorized response"}}}},"403":{"description":"Forbidden response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Forbidden response"}}}},"404":{"description":"Not found response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Not found response"}}}},"500":{"description":"Server error response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Server error response"}}}}}}},"/assets/{orgName}/{projectName}/{assetName}/versions/{version}":{"patch":{"operationId":"update-asset-version","summary":"Update an asset version description","tags":["assets"],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"description":{"type":"string","maxLength":10240,"description":"The description of the entity"}},"required":["description"],"additionalProperties":false}}},"required":true},"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"orgName","required":true,"description":"The name of the organization"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"projectName","required":true,"description":"The name of the project"},{"schema":{"type":"string","minLength":1,"maxLength":30,"pattern":"^[a-zA-Z][a-zA-Z0-9]*(?:-[a-zA-Z0-9]+)*$"},"in":"path","name":"assetName","required":true,"description":"The name of the asset"},{"schema":{"type":"string","pattern":"^(0|[1-9][0-9]*)\\.(0|[1-9][0-9]*)\\.(0|[1-9][0-9]*)$"},"in":"path","name":"version","required":true}],"security":[{"jwtToken":[]},{"secretToken":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"originalExtension":{"type":"string"},"analysis":{"anyOf":[{"type":"object","properties":{"schemaVersion":{"type":"number","enum":[1]},"sourceFileOid":{"type":"string","minLength":64,"maxLength":64,"pattern":"^[a-f0-9]+$"},"analyzerId":{"type":"string","minLength":1},"analyzerVersion":{"type":"string","minLength":1},"status":{"type":"string","enum":["pending","running","succeeded","failed","unsupported"]},"analyzedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]},"data":{"anyOf":[{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["model"]},"dimensions":{"anyOf":[{"type":"object","properties":{"widthMeters":{"type":"number","minimum":0},"depthMeters":{"type":"number","minimum":0},"heightMeters":{"type":"number","minimum":0},"unitSource":{"type":"string","enum":["format-defined","declared","assumed","unknown"]},"measurementBasis":{"type":"string"}},"required":["widthMeters","depthMeters","heightMeters","unitSource","measurementBasis"],"additionalProperties":false},{"type":"null"}]},"meshCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"geometryCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"triangleCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"vertexCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"materialCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"textureCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"textures":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"path":{"type":["string","null"]},"widthPixels":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"heightPixels":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"format":{"type":["string","null"]},"mimeType":{"type":["string","null"]},"byteSize":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"mipLevelCount":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"colorSpace":{"type":["string","null"]},"usages":{"type":"array","items":{"type":"string"}}},"required":["id","path","widthPixels","heightPixels","format","mimeType","byteSize"],"additionalProperties":false}}},"required":["kind","dimensions","meshCount","geometryCount","triangleCount","vertexCount","materialCount","textureCount","textures"],"additionalProperties":false},{"type":"object","properties":{"version":{"type":"string"},"colorspace":{"type":"string"},"materials":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"category":{"type":"string"}},"required":["category"],"additionalProperties":false}},"nodeGraphCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"topLevelNodeCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"referencedTextures":{"type":"array","items":{"type":"string"}},"warnings":{"type":"array","items":{"type":"string"}},"kind":{"type":"string","enum":["material"]},"nodeCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"textureCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"textures":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"path":{"type":["string","null"]},"widthPixels":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"heightPixels":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"format":{"type":["string","null"]},"mimeType":{"type":["string","null"]},"byteSize":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"mipLevelCount":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"colorSpace":{"type":["string","null"]},"usages":{"type":"array","items":{"type":"string"}}},"required":["id","path","widthPixels","heightPixels","format","mimeType","byteSize"],"additionalProperties":false}}},"required":["materials","nodeGraphCount","topLevelNodeCount","referencedTextures","warnings","kind","nodeCount","textureCount","textures"],"additionalProperties":false},{"type":"object","properties":{"version":{"type":"string"},"metadata":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}},"photometricType":{"type":"integer","minimum":1,"maximum":3},"photometricTypeName":{"type":"string","enum":["A","B","C"]},"photometry":{"type":"string","enum":["absolute","relative"]},"manufacturer":{"type":"string"},"luminaire":{"type":"string"},"lightSource":{"type":"string"},"lampCatalog":{"type":"string"},"lampCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"lumensPerLamp":{"type":"number"},"inputWatts":{"type":"number"},"peakCandela":{"type":"number"},"verticalAngles":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"horizontalAngles":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"units":{"type":"string","enum":["feet","meters"]},"dimensions":{"type":"object","properties":{"width":{"type":"number"},"length":{"type":"number"},"height":{"type":"number"}},"required":["width","length","height"],"additionalProperties":false},"hasTilt":{"type":"boolean"},"warnings":{"type":"array","items":{"type":"string"}},"kind":{"type":"string","enum":["light"]},"luminousFluxLumens":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"efficacyLumensPerWatt":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"beamAngleDegrees":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"fieldAngleDegrees":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"declaredLampFluxLumens":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"downwardFluxLumens":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"upwardFluxLumens":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"metricsTiltDegrees":{"type":"number"},"beamAngles":{"type":"array","items":{"type":"object","properties":{"horizontalDegrees":{"type":"number"},"peakDirectionDegrees":{"type":"number"},"peakCandela":{"type":"number","minimum":0},"beamAngleDegrees":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"fieldAngleDegrees":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"beamAngleStatus":{"type":"string","enum":["ok","no-light","no-crossing","multiple-lobes"]},"fieldAngleStatus":{"type":"string","enum":["ok","no-light","no-crossing","multiple-lobes"]}},"required":["horizontalDegrees","peakDirectionDegrees","peakCandela","beamAngleDegrees","fieldAngleDegrees","beamAngleStatus","fieldAngleStatus"],"additionalProperties":false}},"metricsStatus":{"type":"string","enum":["supported","unsupported","unavailable"]}},"required":["version","metadata","photometricType","photometricTypeName","photometry","manufacturer","luminaire","lightSource","lampCatalog","lampCount","lumensPerLamp","inputWatts","peakCandela","verticalAngles","horizontalAngles","units","dimensions","hasTilt","warnings","kind","luminousFluxLumens","efficacyLumensPerWatt","beamAngleDegrees","fieldAngleDegrees","metricsStatus"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","enum":["envmap"]},"widthPixels":{"type":"integer","minimum":0,"maximum":9007199254740991},"heightPixels":{"type":"integer","minimum":0,"maximum":9007199254740991},"format":{"type":"string"},"colorSpace":{"type":"string"},"projection":{"type":"string","enum":["equirectangular","unknown"]},"brightnessUnit":{"type":"string","enum":["relative","cd/m2"]},"calibration":{"type":["string","null"]},"minimumBrightness":{"type":"number","minimum":0},"maximumBrightness":{"type":"number","minimum":0},"averageBrightness":{"type":"number","minimum":0},"percentile01Brightness":{"type":"number","minimum":0},"percentile99Brightness":{"type":"number","minimum":0},"dynamicRangeStops":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]}},"required":["kind","widthPixels","heightPixels","format","colorSpace","projection","brightnessUnit","calibration","minimumBrightness","maximumBrightness","averageBrightness","percentile01Brightness","percentile99Brightness","dynamicRangeStops"],"additionalProperties":false}]},{"type":"null"}]},"validation":{"anyOf":[{"type":"object","properties":{"status":{"type":"string","enum":["valid","invalid","unassessed"]},"validator":{"type":"string"},"validatorVersion":{"type":"string"},"rules":{"type":"array","items":{"type":"string"}},"issues":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string"},"severity":{"type":"string","enum":["error","warning","info"]},"message":{"type":"string"},"location":{"type":"string"}},"required":["code","severity","message"],"additionalProperties":false}}},"required":["status","validator","validatorVersion","rules","issues"],"additionalProperties":false},{"type":"null"}]},"diagnostics":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string"},"severity":{"type":"string","enum":["error","warning","info"]},"message":{"type":"string"},"location":{"type":"string"}},"required":["code","severity","message"],"additionalProperties":false}}},"required":["schemaVersion","sourceFileOid","analyzerId","analyzerVersion","status","analyzedAt","data","validation","diagnostics"],"additionalProperties":false},{"type":"null"}]},"analysisSummary":{"anyOf":[{"type":"object","properties":{"schemaVersion":{"type":"number","enum":[1]},"sourceFileOid":{"type":"string","minLength":64,"maxLength":64,"pattern":"^[a-f0-9]+$"},"analyzerId":{"type":"string","minLength":1},"analyzerVersion":{"type":"string","minLength":1},"status":{"type":"string","enum":["pending","running","succeeded","failed","unsupported"]},"analyzedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},{"type":"null"}]},"validationStatus":{"anyOf":[{"type":"string","enum":["valid","invalid","unassessed"]},{"type":"null"}]},"errorCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"warningCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"data":{"anyOf":[{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["model"]},"dimensions":{"anyOf":[{"type":"object","properties":{"widthMeters":{"type":"number","minimum":0},"depthMeters":{"type":"number","minimum":0},"heightMeters":{"type":"number","minimum":0},"unitSource":{"type":"string","enum":["format-defined","declared","assumed","unknown"]},"measurementBasis":{"type":"string"}},"required":["widthMeters","depthMeters","heightMeters","unitSource","measurementBasis"],"additionalProperties":false},{"type":"null"}]},"meshCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"geometryCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"triangleCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"vertexCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"materialCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"textureCount":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["kind","dimensions","meshCount","geometryCount","triangleCount","vertexCount","materialCount","textureCount"],"additionalProperties":false},{"type":"object","properties":{"version":{"type":"string"},"colorspace":{"type":"string"},"nodeGraphCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"topLevelNodeCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"kind":{"type":"string","enum":["material"]},"nodeCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"textureCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"materialCount":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["nodeGraphCount","topLevelNodeCount","kind","nodeCount","textureCount","materialCount"],"additionalProperties":false},{"type":"object","properties":{"version":{"type":"string"},"photometricType":{"type":"integer","minimum":1,"maximum":3},"photometricTypeName":{"type":"string","enum":["A","B","C"]},"photometry":{"type":"string","enum":["absolute","relative"]},"manufacturer":{"type":"string"},"luminaire":{"type":"string"},"lightSource":{"type":"string"},"lampCatalog":{"type":"string"},"lampCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"lumensPerLamp":{"type":"number"},"inputWatts":{"type":"number"},"peakCandela":{"type":"number"},"verticalAngles":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"horizontalAngles":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"units":{"type":"string","enum":["feet","meters"]},"dimensions":{"type":"object","properties":{"width":{"type":"number"},"length":{"type":"number"},"height":{"type":"number"}},"required":["width","length","height"],"additionalProperties":false},"hasTilt":{"type":"boolean"},"kind":{"type":"string","enum":["light"]},"luminousFluxLumens":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"efficacyLumensPerWatt":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"beamAngleDegrees":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"fieldAngleDegrees":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"declaredLampFluxLumens":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"downwardFluxLumens":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"upwardFluxLumens":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"metricsTiltDegrees":{"type":"number"},"metricsStatus":{"type":"string","enum":["supported","unsupported","unavailable"]}},"required":["version","photometricType","photometricTypeName","photometry","manufacturer","luminaire","lightSource","lampCatalog","lampCount","lumensPerLamp","inputWatts","peakCandela","verticalAngles","horizontalAngles","units","dimensions","hasTilt","kind","luminousFluxLumens","efficacyLumensPerWatt","beamAngleDegrees","fieldAngleDegrees","metricsStatus"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","enum":["envmap"]},"widthPixels":{"type":"integer","minimum":0,"maximum":9007199254740991},"heightPixels":{"type":"integer","minimum":0,"maximum":9007199254740991},"format":{"type":"string"},"colorSpace":{"type":"string"},"projection":{"type":"string","enum":["equirectangular","unknown"]},"brightnessUnit":{"type":"string","enum":["relative","cd/m2"]},"calibration":{"type":["string","null"]},"minimumBrightness":{"type":"number","minimum":0},"maximumBrightness":{"type":"number","minimum":0},"averageBrightness":{"type":"number","minimum":0},"percentile01Brightness":{"type":"number","minimum":0},"percentile99Brightness":{"type":"number","minimum":0},"dynamicRangeStops":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]}},"required":["kind","widthPixels","heightPixels","format","colorSpace","projection","brightnessUnit","calibration","minimumBrightness","maximumBrightness","averageBrightness","percentile01Brightness","percentile99Brightness","dynamicRangeStops"],"additionalProperties":false}]},{"type":"null"}]}},"required":["schemaVersion","sourceFileOid","analyzerId","analyzerVersion","status","analyzedAt","validationStatus","errorCount","warningCount","data"],"additionalProperties":false},{"type":"null"}]},"description":{"default":"","type":"string","maxLength":10240,"description":"The description of the entity"},"id":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"assetId":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"version":{"type":"string","pattern":"^(0|[1-9][0-9]*)\\.(0|[1-9][0-9]*)\\.(0|[1-9][0-9]*)$"},"fileOid":{"type":"string"},"thumbnailOid":{"type":["null","string"]},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"},"createdByUserId":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"createdByUserName":{"type":["null","string"]},"originalSize":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]}},"required":["description","id","assetId","version","fileOid","thumbnailOid","createdAt","createdByUserId","createdByUserName","originalSize"],"additionalProperties":false}}}},"400":{"description":"Bad request response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Bad request response"}}}},"401":{"description":"Unauthorized response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Unauthorized response"}}}},"403":{"description":"Forbidden response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Forbidden response"}}}},"404":{"description":"Not found response","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error message"}},"required":["error"],"additionalProperties":false,"description":"Not found response"}}}}}}}},"servers":[{"url":"https://api.landofassets.com","description":"Default server"}],"tags":[{"name":"auth","description":"Auth","x-displayName":"Auth"},{"name":"users","description":"Users","x-displayName":"Users"},{"name":"orgs","description":"Orgs","x-displayName":"Orgs"},{"name":"projects","description":"Projects","x-displayName":"Projects"},{"name":"assets","description":"Assets","x-displayName":"Assets"},{"name":"products","description":"Products","x-displayName":"Products"},{"name":"reference-images","description":"Reference Images","x-displayName":"Reference Images"},{"name":"comments","description":"Comments","x-displayName":"Comments"},{"name":"notifications","description":"Notifications","x-displayName":"Notifications"},{"name":"email","description":"Email","x-displayName":"Email"},{"name":"member-invites","description":"Member Invites","x-displayName":"Member Invites"},{"name":"members","description":"Members","x-displayName":"Members"},{"name":"service-accounts","description":"Service Accounts","x-displayName":"Service Accounts"},{"name":"api-tokens","description":"API Tokens","x-displayName":"API Tokens"},{"name":"avatars","description":"Avatars","x-displayName":"Avatars"},{"name":"health","description":"Health","x-displayName":"Health"},{"name":"files","description":"Files","x-displayName":"Files"},{"name":"oembed","description":"oEmbed","x-displayName":"oEmbed"},{"name":"tasks","description":"Tasks","x-displayName":"Tasks"},{"name":"webhooks","description":"Webhooks","x-displayName":"Webhooks"},{"name":"internal","description":"Internal","x-displayName":"Internal"}],"x-tagGroups":[{"name":"General","tags":["auth","users","orgs","projects","assets","products","reference-images","comments","notifications","email","member-invites","members","service-accounts","api-tokens","avatars","health","files","oembed","tasks","webhooks","internal"]}]}